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

如何用CSS实现页面加载后hover时仅运行一次loading动画?

问题:Hover时加载动画仅运行一次的纯CSS实现

我正在为hover时显示电影详情的div制作CSS加载动画,现有HTML代码如下:

<div class="tooltips ">
  <img src=".." alt="img">
  <div class="toolcon">
    <div class="plc">
      <div class="loadingContainer1">
        <div class="ball1"></div>
        <div class="ball2"></div>
        <div class="ball3"></div>
        <div class="ball4"></div>
      </div>
    </div>
    <div class="tooldiv ">
      movie details
    </div>
  </div>
</div>

现有CSS代码:

.tooltips:hover{
 .toolcon{
     display: block;
     background: transparent;
     backdrop-filter: blur(60px);
     opacity: 1;
     div{display: block;}
         }
}

.loadingContainer1{animation: fadeout 1.8s linear forwards;}

@keyframes fadeIn{
    0%{display: flex;}
    100%{display: none;}
}

目前功能正常,但每次hover时加载动画都会重复运行,希望页面加载后仅在第一次hover时触发动画,能否用纯CSS实现?


解决方案

问题根源在于之前使用display切换元素显示状态,每次hover时元素会被重新渲染,导致动画重复触发。通过调整显示逻辑和动画设置,纯CSS可以实现仅第一次hover运行动画的需求,具体修改如下:

1. 调整详情容器的显示逻辑

放弃display切换,改用opacity和visibility控制显示,避免元素被反复移除/重建:

/* 默认隐藏详情容器 */
.toolcon {
  background: transparent;
  backdrop-filter: blur(60px);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.3s ease, visibility 0.3s ease;
}

/* hover时显示详情容器 */
.tooltips:hover .toolcon {
  opacity: 1;
  visibility: visible;
}

2. 修改加载动画的触发规则

设置动画仅运行1次,且完成后保持最终状态,默认暂停动画,仅第一次hover时启动:

.loadingContainer1 {
  /* 动画仅运行1次,完成后保持最后一帧状态 */
  animation: fadeout 1.8s linear forwards;
  animation-iteration-count: 1;
  /* 默认暂停动画 */
  animation-play-state: paused;
}

/* 第一次hover时启动动画 */
.tooltips:hover .loadingContainer1 {
  animation-play-state: running;
}

3. 修正动画关键帧

用opacity和visibility控制加载容器的显示,避免display导致的动画重置:

@keyframes fadeout {
  0% {
    opacity: 1;
    visibility: visible;
  }
  100% {
    opacity: 0;
    visibility: hidden;
  }
}

可选优化:动画完成后移除占位空间

如果希望加载容器在动画结束后完全不占空间,可以在关键帧中添加高度控制:

@keyframes fadeout {
  0% {
    opacity: 1;
    visibility: visible;
    height: auto;
  }
  99% {
    opacity: 0;
    visibility: visible;
    height: auto;
  }
  100% {
    opacity: 0;
    visibility: hidden;
    height: 0;
    overflow: hidden;
  }
}

原理说明

加载容器始终存在于DOM中(未被display:none移除),动画设置为仅运行1次并保持最终状态,第一次hover时启动动画,完成后就一直保持隐藏状态,后续hover不会再触发动画。


内容的提问来源于stack exchange,提问作者ECD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:35:00