当前位置:首页 > JavaScript

js实现mousemove

2026-04-06 20:00:05JavaScript

监听鼠标移动事件

在JavaScript中,可以通过addEventListener方法监听mousemove事件。以下是一个基本实现:

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

获取鼠标坐标

mousemove事件对象包含鼠标的坐标信息:

  • clientXclientY:相对于浏览器窗口的坐标
  • pageXpageY:相对于整个文档的坐标
  • screenXscreenY:相对于屏幕的坐标
document.addEventListener('mousemove', function(e) {
    console.log('窗口坐标:', e.clientX, e.clientY);
    console.log('文档坐标:', e.pageX, e.pageY);
    console.log('屏幕坐标:', e.screenX, e.screenY);
});

限制事件触发频率

对于性能敏感的场合,可以使用节流(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));

跟踪鼠标移动轨迹

记录鼠标移动轨迹并绘制:

const points = [];
document.addEventListener('mousemove', function(e) {
    points.push({x: e.clientX, y: e.clientY});
    if (points.length > 100) points.shift();

    // 绘制轨迹
    const canvas = document.getElementById('canvas');
    const ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.beginPath();
    points.forEach((p, i) => {
        if (i === 0) ctx.moveTo(p.x, p.y);
        else ctx.lineTo(p.x, p.y);
    });
    ctx.stroke();
});

元素跟随鼠标

实现元素跟随鼠标移动的效果:

const follower = document.getElementById('follower');
document.addEventListener('mousemove', function(e) {
    follower.style.transform = `translate(${e.clientX}px, ${e.clientY}px)`;
});

性能优化建议

对于复杂的鼠标移动交互,考虑以下优化:

js实现mousemove

  • 使用requestAnimationFrame进行动画更新
  • 减少DOM操作,尽量使用CSS变换
  • 必要时使用事件委托
  • 移除不需要的监听器避免内存泄漏

标签: jsmousemove
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…