当前位置:首页 > 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实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js轮播图实现原理

js轮播图实现原理

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

js实现投球

js实现投球

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

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let currentY…

js实现滑动

js实现滑动

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