当前位置:首页 > JavaScript

js实现瞄

2026-03-14 20:51:56JavaScript

实现鼠标跟随效果

使用JavaScript实现鼠标跟随效果通常涉及监听鼠标移动事件,并更新页面元素的位置。以下是两种常见实现方式:

基础实现(DOM元素跟随)

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

平滑跟随效果(带延迟)

js实现瞄

let posX = 0, posY = 0;
const follower = document.getElementById('follower');
const delay = 20; // 延迟系数

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

function updateFollower() {
  const currentX = parseFloat(follower.style.left || 0);
  const currentY = parseFloat(follower.style.top || 0);

  follower.style.left = `${currentX + (posX - currentX) / delay}px`;
  follower.style.top = `${currentY + (posY - currentY) / delay}px`;

  requestAnimationFrame(updateFollower);
}

updateFollower();

实现自定义光标

如需替换默认光标为自定义图形:

document.body.style.cursor = 'none';
const customCursor = document.createElement('div');
customCursor.id = 'custom-cursor';
document.body.appendChild(customCursor);

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

对应CSS示例:

js实现瞄

#custom-cursor {
  position: fixed;
  width: 32px;
  height: 32px;
  background: url('cursor.png') no-repeat;
  pointer-events: none;
  z-index: 9999;
}

高级效果实现

粒子跟随效果

class Particle {
  constructor() {
    this.x = 0;
    this.y = 0;
    this.size = Math.random() * 5 + 2;
    this.speedX = Math.random() * 3 - 1.5;
    this.speedY = Math.random() * 3 - 1.5;
  }

  update() {
    this.x += this.speedX;
    this.y += this.speedY;
    if (this.size > 0.2) this.size -= 0.1;
  }

  draw(ctx) {
    ctx.fillStyle = `hsl(${Math.random() * 360}, 100%, 50%)`;
    ctx.beginPath();
    ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
    ctx.fill();
  }
}

const canvas = document.createElement('canvas');
document.body.appendChild(canvas);
const ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

let particles = [];
document.addEventListener('mousemove', (e) => {
  for (let i = 0; i < 5; i++) {
    particles.push(new Particle());
    particles[particles.length - 1].x = e.clientX;
    particles[particles.length - 1].y = e.clientY;
  }
});

function animate() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  for (let i = 0; i < particles.length; i++) {
    particles[i].update();
    particles[i].draw(ctx);
    if (particles[i].size <= 0.2) {
      particles.splice(i, 1);
      i--;
    }
  }
  requestAnimationFrame(animate);
}

animate();

性能优化建议

对于复杂效果,使用Canvas比操作DOM元素性能更好。避免在mousemove事件中直接进行复杂计算,可以使用防抖技术或requestAnimationFrame优化性能。

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

function render() {
  // 更新逻辑放在这里
  requestAnimationFrame(render);
}

render();

标签: js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现继承

js实现继承

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

js实现文件下载

js实现文件下载

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

js轮播图实现原理

js轮播图实现原理

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

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…