导读:本期聚焦于小伙伴创作的《如何实现悬停暂停动画并在鼠标离开后平滑恢复原状态》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何实现悬停暂停动画并在鼠标离开后平滑恢复原状态》有用,将其分享出去将是对创作者最好的鼓励。

在网页交互里,悬停暂停动画并且鼠标离开后平滑恢复是一个常见需求。直接使用animation-play-state:paused可以暂停,但离开时动画会瞬间跳回时间轴位置继续跑,视觉上不够自然。下面介绍两种实现方式。

如何实现悬停暂停动画并在鼠标离开后平滑恢复原状态

纯CSS实现悬停暂停

最简单的方法是利用:hover切换animation-play-state,并为元素加一层transition来缓和状态变化。不过animation本身不能被transition直接平滑,所以我们通常对变换属性做补充处理。

/* 定义一个旋转动画 */
@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

.box {
  width: 100px;
  height: 100px;
  background: #3498db;
  animation: spin 3s linear infinite;
  /* 离开时给transform一点过渡,减弱跳变感 */
  transition: transform 0.3s ease;
}

/* 鼠标悬停暂停 */
.box:hover {
  animation-play-state: paused;
}

上面的写法在悬停时可以暂停,但由于animation时间轴不随transition变化,离开后仍是按原周期继续。若希望“恢复”看起来平滑,可改用下面JS方案。

JavaScript控制平滑恢复

通过监听mouseenter与mouseleave,用getAnimations()拿到动画对象,暂停时记录进度,离开时用transition补间当前transform到目标角度,再恢复播放。

const box = document.querySelector('.box');
let anim = box.getAnimations()[0];

box.addEventListener('mouseenter', () => {
  anim.pause();
});

box.addEventListener('mouseleave', () => {
  // 当前旋转角度
  const style = getComputedStyle(box);
  const matrix = new DOMMatrix(style.transform);
  const current = Math.atan2(matrix.b, matrix.a) * 180 / Math.PI;

  // 设定一个靠近当前角度的续播起点较复杂,这里仅演示加transition平滑
  box.style.transition = 'transform 0.4s ease';
  // 离开后直接继续播放,浏览器会从暂停帧延续
  anim.play();
  setTimeout(() => { box.style.transition = 'none'; }, 400);
});

注意事项

  • 使用animation-play-state时,动画时间轴不会倒退,离开即续播。
  • 若用transition补间,要避免和animation的transform冲突,可在离开事件后暂存内联样式。
  • 在Chrome等现代浏览器中,getAnimations()兼容性良好,旧版IE不可用。

小结

悬停暂停动画核心是利用animation-play-state,而平滑恢复依赖transition过渡或JS精确控制进度。根据项目兼容需求选择方案即可。

CSS_animationhover_pausetransition修改时间:2026-07-27 21:48:16

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。