当前位置:首页 > JavaScript

js实现hover

2026-04-06 22:04:31JavaScript

Hover 效果的 JavaScript 实现

使用 JavaScript 实现 hover 效果可以通过监听鼠标事件(mouseentermouseleave)来动态修改元素的样式或行为。以下是几种常见实现方式:

通过事件监听修改样式

为元素添加 mouseentermouseleave 事件,直接修改元素的 style 属性:

const element = document.getElementById('hoverElement');

element.addEventListener('mouseenter', () => {
  element.style.backgroundColor = 'lightblue';
  element.style.transition = 'background-color 0.3s';
});

element.addEventListener('mouseleave', () => {
  element.style.backgroundColor = '';
});

通过类名切换样式

更推荐通过添加/移除 CSS 类的方式实现,便于维护:

const element = document.querySelector('.hover-target');

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

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

对应的 CSS:

.hover-target {
  background-color: white;
  transition: background-color 0.3s;
}

.hover-target.hover-active {
  background-color: lightblue;
}

动态显示隐藏内容

实现 hover 时显示子元素(如提示框):

const trigger = document.querySelector('.tooltip-trigger');
const tooltip = document.querySelector('.tooltip');

trigger.addEventListener('mouseenter', () => {
  tooltip.style.display = 'block';
});

trigger.addEventListener('mouseleave', () => {
  tooltip.style.display = 'none';
});

事件委托实现批量 hover

对于动态生成的多个元素,使用事件委托优化性能:

document.addEventListener('mouseover', (event) => {
  if (event.target.matches('.hover-item')) {
    event.target.classList.add('hover-state');
  }
});

document.addEventListener('mouseout', (event) => {
  if (event.target.matches('.hover-item')) {
    event.target.classList.remove('hover-state');
  }
});

高级应用:延时 hover 效果

实现 hover 后延迟显示的效果(如菜单延迟关闭):

js实现hover

let hoverTimer;
const dropdown = document.querySelector('.dropdown');

dropdown.addEventListener('mouseenter', () => {
  clearTimeout(hoverTimer);
  dropdown.classList.add('open');
});

dropdown.addEventListener('mouseleave', () => {
  hoverTimer = setTimeout(() => {
    dropdown.classList.remove('open');
  }, 300);
});

注意事项

  • 移动端设备需要额外处理 touch 事件
  • 频繁的样式修改可能导致性能问题,优先使用 CSS hover 伪类
  • 复杂动画建议使用 CSS transform 和 opacity 属性以获得硬件加速

标签: jshover
分享给朋友:

相关文章

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

vue实现js休眠

vue实现js休眠

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

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…