当前位置:首页 > 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实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…

js实现密码

js实现密码

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

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…