当前位置:首页 > JavaScript

js实现鼠标移动

2026-03-01 02:43:09JavaScript

监听鼠标移动事件

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

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

获取鼠标坐标

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

js实现鼠标移动

  • 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)技术减少处理频率。

js实现鼠标移动

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;
});

鼠标移动速度计算

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

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实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现图片

js实现图片

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

js 实现全选

js 实现全选

实现全选功能的方法 使用 JavaScript 实现全选功能通常需要操作复选框(checkbox)的状态。以下是几种常见的实现方式。 通过 DOM 操作实现全选 // 获取全选复选框和子复选…

实现图片旋转js

实现图片旋转js

使用CSS transform属性旋转图片 通过CSS的transform属性可以轻松实现图片旋转。以下是一个简单的示例代码: const image = document.getElement…