当前位置:首页 > JavaScript

js实现mousemove

2026-03-15 02:19:25JavaScript

监听鼠标移动事件

在JavaScript中,可以通过监听mousemove事件来跟踪鼠标在页面上的移动。以下是基本实现方式:

document.addEventListener('mousemove', function(event) {
    console.log('Mouse X:', event.clientX, 'Mouse Y:', event.clientY);
});

获取鼠标坐标

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

  • clientX/clientY:相对于浏览器窗口可视区域的坐标
  • pageX/pageY:相对于整个文档的坐标(包含滚动偏移)
  • screenX/screenY:相对于整个屏幕的坐标
element.addEventListener('mousemove', (e) => {
    const x = e.pageX - element.offsetLeft;
    const y = e.pageY - element.offsetTop;
});

性能优化处理

高频触发的mousemove事件可能导致性能问题,可以通过节流(throttle)优化:

js实现mousemove

function throttle(fn, delay) {
    let lastCall = 0;
    return function(...args) {
        const now = Date.now();
        if (now - lastCall < delay) return;
        lastCall = now;
        fn.apply(this, args);
    }
}

document.addEventListener('mousemove', throttle(function(e) {
    // 处理逻辑
}, 16)); // 约60fps

元素跟随鼠标

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

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

检测移动方向

通过比较前后坐标计算移动方向:

js实现mousemove

let prevX = 0, prevY = 0;
document.addEventListener('mousemove', (e) => {
    const dx = e.clientX - prevX;
    const dy = e.clientY - prevY;
    prevX = e.clientX;
    prevY = e.clientY;

    if (Math.abs(dx) > Math.abs(dy)) {
        console.log(dx > 0 ? '向右' : '向左');
    } else {
        console.log(dy > 0 ? '向下' : '向上');
    }
});

鼠标移动轨迹记录

记录鼠标移动路径并绘制:

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

    // 使用canvas绘制轨迹
    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 box = document.getElementById('box');
box.addEventListener('mousemove', (e) => {
    // 相对于box元素的坐标
    const x = e.clientX - box.getBoundingClientRect().left;
    const y = e.clientY - box.getBoundingClientRect().top;
    console.log(`Box内坐标: (${x}, ${y})`);
});

标签: jsmousemove
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现授权

js实现授权

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