You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现画廊项hover时仅显示自身标题和播放图标问题求助

JavaScript实现画廊项hover时仅显示自身标题和播放图标问题求助

嘿,我懂你的困扰啦——现在鼠标悬停任意一个画廊项,所有的播放图标和标题都会一起显示出来,这肯定不是你想要的效果😅。问题出在你当前的JS代码里:每次触发hover事件时,你遍历了所有的播放图标和标题元素,所以才会全部一起冒出来。下面给你两种实用的解决思路:


方法一:纯CSS实现(强烈推荐)

这种hover交互效果用CSS就能完美搞定,完全不需要写JavaScript,不仅代码更简洁,浏览器原生支持的性能也更好。根据你的HTML结构,每个.gallery-item-block内部包含对应的图标和标题,直接用CSS的:hover伪类就能精准控制子元素的显示:

/* 给画廊项添加过渡效果 */
.gallery-item-block {
  transition: all 0.5s ease;
}

/* 默认状态下隐藏图标和标题 */
.gallery-item-block-iconplay,
.gallery-item-block-title {
  display: none;
  opacity: 0; /* 配合过渡实现淡入 */
  transition: opacity 0.5s ease;
}

/* 悬停画廊项时,显示内部的图标和标题,并触发淡入 */
.gallery-item-block:hover .gallery-item-block-iconplay,
.gallery-item-block:hover .gallery-item-block-title {
  display: block;
  opacity: 1;
}

如果你的fade-in类是自定义的动画,也可以替换成CSS关键帧动画:

@keyframes fade-in {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}

.gallery-item-block:hover .gallery-item-block-iconplay,
.gallery-item-block:hover .gallery-item-block-title {
  display: block;
  animation: fade-in 0.5s ease forwards;
}

方法二:修改你的JavaScript代码

如果你一定要用JS来实现,核心思路是:只操作当前悬停项内部的图标和标题,而不是全局所有的元素。可以通过当前元素的querySelector来定位子元素:

const img_block = document.querySelectorAll('.gallery-item-block');

// 用forEach遍历每个画廊项,绑定事件
img_block.forEach(item => {
  item.style.transition = 'all 0.5s ease';
  
  // 鼠标悬停事件
  item.addEventListener('mouseover', () => {
    // 获取当前项内部的播放图标和标题
    const playBtn = item.querySelector('.gallery-item-block-iconplay');
    const title = item.querySelector('.gallery-item-block-title');
    
    playBtn.style.display = 'block';
    playBtn.classList.add('fade-in');
    
    title.style.display = 'block';
    title.classList.add('fade-in');
  });
  
  // 鼠标离开事件
  item.addEventListener('mouseout', () => {
    const playBtn = item.querySelector('.gallery-item-block-iconplay');
    const title = item.querySelector('.gallery-item-block-title');
    
    playBtn.style.display = 'none';
    title.style.display = 'none';
  });
});

这里用addEventListener绑定事件比直接赋值onmouseover更灵活,而且通过item.querySelector精准获取当前项的子元素,就不会出现“一hover全显示”的问题啦。


备注:内容来源于stack exchange,提问作者TecNight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 16:03:02