当前位置:首页 > JavaScript

js实现游标

2026-01-14 14:12:32JavaScript

使用JavaScript实现游标

在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法:

修改默认鼠标指针样式

通过CSS的cursor属性可以修改元素的鼠标指针样式:

.element {
  cursor: pointer; /* 手型指针 */
  cursor: url('custom-cursor.png'), auto; /* 自定义图片 */
}

JavaScript动态修改:

js实现游标

document.getElementById('myElement').style.cursor = 'wait'; /* 等待状态 */

创建自定义游标元素

完全替换默认指针,创建一个跟随鼠标移动的DOM元素:

const customCursor = document.createElement('div');
customCursor.style.position = 'fixed';
customCursor.style.width = '20px';
customCursor.style.height = '20px';
customCursor.style.backgroundColor = 'red';
customCursor.style.borderRadius = '50%';
customCursor.style.pointerEvents = 'none'; /* 防止遮挡点击事件 */
document.body.appendChild(customCursor);

document.addEventListener('mousemove', (e) => {
  customCursor.style.left = `${e.clientX}px`;
  customCursor.style.top = `${e.clientY}px`;
});

/* 隐藏默认指针 */
document.body.style.cursor = 'none';

高级游标交互效果

实现带延迟跟随效果的游标:

js实现游标

const cursor = document.getElementById('cursor');
let mouseX = 0, mouseY = 0;
let posX = 0, posY = 0;

function animate() {
  posX += (mouseX - posX) / 5; /* 延迟系数 */
  posY += (mouseY - posY) / 5;

  cursor.style.transform = `translate3d(${posX}px, ${posY}px, 0)`;
  requestAnimationFrame(animate);
}

document.addEventListener('mousemove', (e) => {
  mouseX = e.clientX;
  mouseY = e.clientY;
});

animate();

响应式游标状态

根据交互元素改变游标样式:

const hoverElements = document.querySelectorAll('.hover-effect');

hoverElements.forEach(el => {
  el.addEventListener('mouseenter', () => {
    cursor.classList.add('cursor-hover');
  });
  el.addEventListener('mouseleave', () => {
    cursor.classList.remove('cursor-hover');
  });
});

对应CSS:

.cursor-hover {
  transform: scale(1.5);
  background-color: blue;
}

性能优化建议

  1. 使用transform代替top/left定位以获得更好的性能
  2. 限制mousemove事件的触发频率
  3. 对自定义游标使用硬件加速:
    .custom-cursor {
      will-change: transform;
    }

浏览器兼容性注意事项

  1. 自定义游标图片格式需注意浏览器支持情况
  2. 移动端设备可能需要特殊处理
  3. 某些浏览器可能限制自定义游标的最小尺寸

以上方法可以根据具体需求组合使用,实现从简单样式修改到复杂交互游标的各种效果。

标签: 游标js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现密码

js实现密码

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

节流js实现

节流js实现

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

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…