当前位置:首页 > JavaScript

js实现瞄

2026-02-01 21:34:38JavaScript

实现鼠标跟随效果

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

基础DOM元素跟随

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

带平滑过渡的CSS方案

const follower = document.querySelector('.follower');
let posX = 0, posY = 0;
let mouseX = 0, mouseY = 0;

function animate() {
  posX += (mouseX - posX) / 10;
  posY += (mouseY - posY) / 10;

  follower.style.transform = `translate(${posX}px, ${posY}px)`;
  requestAnimationFrame(animate);
}

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

animate();

实现自定义光标

替换系统默认光标需要隐藏原生指针并创建自定义元素:

html {
  cursor: none;
}
.custom-cursor {
  position: fixed;
  pointer-events: none;
  z-index: 9999;
}
const cursor = document.createElement('div');
cursor.className = 'custom-cursor';
document.body.appendChild(cursor);

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

实现元素吸引效果

创建磁吸效果需要计算元素与鼠标的距离:

const magnets = document.querySelectorAll('.magnet');

magnets.forEach(magnet => {
  magnet.addEventListener('mousemove', (e) => {
    const rect = magnet.getBoundingClientRect();
    const x = e.clientX - rect.left;
    const y = e.clientY - rect.top;

    magnet.style.transform = `translate(${(x - rect.width/2) * 0.2}px, ${(y - rect.height/2) * 0.2}px)`;
  });

  magnet.addEventListener('mouseout', () => {
    magnet.style.transform = 'translate(0, 0)';
  });
});

性能优化建议

对于需要高频更新的跟随效果,建议使用CSS的will-change属性:

.follower {
  will-change: transform;
}

使用transform属性代替top/left定位能获得更好的性能:

element.style.transform = `translate(${x}px, ${y}px)`;

高级跟随系统

实现带有延迟和缓动的跟随系统:

js实现瞄

class Follower {
  constructor(target) {
    this.target = target;
    this.position = { x: 0, y: 0 };
    this.speed = 0.1;
    this.update();
  }

  update() {
    const dx = mouseX - this.position.x;
    const dy = mouseY - this.position.y;

    this.position.x += dx * this.speed;
    this.position.y += dy * this.speed;

    this.target.style.transform = `
      translate(${this.position.x}px, ${this.position.y}px)
    `;

    requestAnimationFrame(() => this.update());
  }
}

标签: js
分享给朋友:

相关文章

js实现变形

js实现变形

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

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…

js实现图片移动

js实现图片移动

使用CSS和JavaScript实现图片移动 方法一:使用CSS动画结合JavaScript控制 通过CSS定义动画关键帧,JavaScript动态添加或移除动画类。 /* CSS部分 */ .m…

js实现截图

js实现截图

使用HTML2Canvas库实现截图 HTML2Canvas是一个流行的JavaScript库,可以将网页元素或整个页面转换为Canvas图像。安装方式: npm install html2canv…