当前位置:首页 > 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 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现变形

js实现变形

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