当前位置:首页 > 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轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…