当前位置:首页 > JavaScript

js实现鼠标移动

2026-03-01 02:43:09JavaScript

监听鼠标移动事件

在JavaScript中,可以通过mousemove事件监听鼠标移动。该事件会在鼠标指针移动时触发。

document.addEventListener('mousemove', function(event) {
    console.log('鼠标位置:', event.clientX, event.clientY);
});

获取鼠标坐标

event对象包含鼠标当前的位置信息:

  • clientXclientY:相对于浏览器窗口可视区域的坐标
  • pageXpageY:相对于整个文档的坐标(包含滚动偏移)
  • screenXscreenY:相对于屏幕的坐标
document.addEventListener('mousemove', (e) => {
    console.log(`窗口坐标: ${e.clientX}, ${e.clientY}`);
    console.log(`文档坐标: ${e.pageX}, ${e.pageY}`);
    console.log(`屏幕坐标: ${e.screenX}, ${e.screenY}`);
});

跟随鼠标移动元素

可以通过改变元素的positionabsolutefixed,然后更新其lefttop样式来实现跟随效果。

const follower = document.getElementById('follower');

document.addEventListener('mousemove', (e) => {
    follower.style.left = `${e.clientX}px`;
    follower.style.top = `${e.clientY}px`;
});

性能优化

频繁的mousemove事件可能影响性能,可以使用节流(throttle)技术减少处理频率。

function throttle(func, limit) {
    let lastFunc;
    let lastRan;
    return function() {
        const context = this;
        const args = arguments;
        if (!lastRan) {
            func.apply(context, args);
            lastRan = Date.now();
        } else {
            clearTimeout(lastFunc);
            lastFunc = setTimeout(function() {
                if ((Date.now() - lastRan) >= limit) {
                    func.apply(context, args);
                    lastRan = Date.now();
                }
            }, limit - (Date.now() - lastRan));
        }
    }
}

document.addEventListener('mousemove', throttle(function(e) {
    console.log('节流后的鼠标位置:', e.clientX, e.clientY);
}, 100));

鼠标移动方向判断

通过比较前后位置的差值,可以判断鼠标移动方向。

let prevX = 0;
let prevY = 0;

document.addEventListener('mousemove', (e) => {
    const deltaX = e.clientX - prevX;
    const deltaY = e.clientY - prevY;

    if (Math.abs(deltaX) > Math.abs(deltaY)) {
        console.log(deltaX > 0 ? '向右移动' : '向左移动');
    } else {
        console.log(deltaY > 0 ? '向下移动' : '向上移动');
    }

    prevX = e.clientX;
    prevY = e.clientY;
});

鼠标移动速度计算

根据移动距离和时间差可以计算鼠标移动速度。

js实现鼠标移动

let lastTime = 0;
let lastX = 0;
let lastY = 0;

document.addEventListener('mousemove', (e) => {
    const now = Date.now();
    const timeDiff = now - lastTime;

    if (timeDiff > 0) {
        const distance = Math.sqrt(
            Math.pow(e.clientX - lastX, 2) + 
            Math.pow(e.clientY - lastY, 2)
        );
        const speed = distance / timeDiff;
        console.log(`移动速度: ${speed} 像素/毫秒`);
    }

    lastX = e.clientX;
    lastY = e.clientY;
    lastTime = now;
});

标签: 鼠标js
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…