当前位置:首页 > JavaScript

js鼠标事件实现动效

2026-03-02 00:07:23JavaScript

鼠标事件基础

鼠标事件包括clickmouseovermouseoutmousemovemousedownmouseup等。通过监听这些事件,可以触发对应的动效。

element.addEventListener('mouseover', () => {
  // 动效逻辑
});

常见动效实现方式

CSS过渡配合事件 通过添加/移除类名触发CSS过渡效果:

element.addEventListener('mouseenter', () => {
  element.classList.add('hover-effect');
});
element.addEventListener('mouseleave', () => {
  element.classList.remove('hover-effect');
});

对应CSS:

.hover-effect {
  transition: transform 0.3s;
  transform: scale(1.1);
}

GSAP动画库 实现更复杂的动画序列:

element.addEventListener('click', () => {
  gsap.to(element, {
    duration: 0.5,
    x: 100,
    rotation: 360,
    ease: "bounce.out"
  });
});

拖拽动效实现

结合mousedownmousemovemouseup实现拖拽:

let isDragging = false;
element.addEventListener('mousedown', () => {
  isDragging = true;
});

document.addEventListener('mousemove', (e) => {
  if (!isDragging) return;
  element.style.transform = `translate(${e.clientX}px, ${e.clientY}px)`;
});

document.addEventListener('mouseup', () => {
  isDragging = false;
});

鼠标跟随效果

利用mousemove事件获取坐标:

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

性能优化建议

  1. 使用requestAnimationFrame替代直接样式修改
  2. 对高频事件(如mousemove)进行节流
  3. 硬件加速:使用transformopacity属性
  4. 避免在事件回调中进行复杂DOM操作
function throttle(callback, limit) {
  let waiting = false;
  return function() {
    if (!waiting) {
      callback.apply(this, arguments);
      waiting = true;
      setTimeout(() => {
        waiting = false;
      }, limit);
    }
  }
}

高级交互示例

实现元素磁吸效果:

js鼠标事件实现动效

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

  const distance = Math.sqrt(x*x + y*y);
  if (distance < 100) {
    gsap.to(element, {
      x: (x - rect.width/2) * 0.2,
      y: (y - rect.height/2) * 0.2,
      duration: 0.5
    });
  }
});

标签: 鼠标事件
分享给朋友:

相关文章

jquery事件绑定

jquery事件绑定

jQuery 事件绑定的基本方法 使用 on() 方法绑定事件是最推荐的方式,兼容性强且支持动态元素。语法如下: $(selector).on(eventName, handlerFunction)…

vue 实现事件委托

vue 实现事件委托

Vue 中实现事件委托的方法 事件委托是一种通过将事件监听器绑定到父元素而非子元素的技术,利用事件冒泡机制统一处理子元素的事件。Vue 中可以通过以下方式实现: 1. 使用 v-on 和事件修饰符…

vue实现事件代理

vue实现事件代理

事件代理的概念 事件代理(Event Delegation)是一种利用事件冒泡机制,将子元素的事件委托给父元素统一处理的技术。在Vue中,可以通过v-on指令或$on方法实现事件代理,减少事件监听器的…

vue事件循环实现

vue事件循环实现

Vue 的事件循环实现 Vue 的事件循环机制主要依赖于 JavaScript 的原生事件循环(Event Loop),并结合 Vue 自身的响应式系统和异步更新队列机制。以下是 Vue 事件循环的核…

vue实现拖拽事件

vue实现拖拽事件

Vue 实现拖拽事件的方法 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…

vue实现人工点击事件

vue实现人工点击事件

Vue 中实现人工点击事件的方法 在 Vue 中可以通过多种方式触发点击事件,以下是几种常见的实现方法: 使用 v-on 或 @ 指令绑定原生事件 通过模板语法直接绑定原生 click 事件: &…