0

0

如何实现悬停时暂停动画并在鼠标离开后继续完成回弹动画

聖光之護

聖光之護

发布时间:2026-02-06 20:07:14

|

682人浏览过

|

来源于php中文网

原创

如何实现悬停时暂停动画并在鼠标离开后继续完成回弹动画

本文介绍一种基于 javascript 状态管理的 css 动画控制方案,解决「悬停触发正向旋转(-8° → 0°),鼠标离开后平滑回弹(0° → -8°)」的需求,避免元素因样式重置而突兀跳回初始状态。

要实现「鼠标悬停时启动正向旋转动画、离开时自动播放反向回弹动画,且两段动画均需完整执行、不中断、不跳变」,仅靠纯 CSS 的 :hover + transition 或简单 animation 类切换是不够的——因为 CSS 无法感知动画是否正在运行,也无法在动画中途响应 hover 状态变化。必须引入 JavaScript 进行动画生命周期监控状态协同判断

✅ 核心思路:双状态驱动

我们维护两个独立但关联的状态:

  • Hover 状态:通过 element.matches(':hover') 实时检测(比 mouseenter/mouseleave 更可靠,尤其应对快速进出场景);
  • 动画状态:用 Map 映射每个元素到其当前动画阶段(backward / forward / rotatingForward / rotatingBackward)。

只有当「当前处于 forward 状态且不再 hover」时,才触发回弹;同理,「当前处于 backward 状态且开始 hover」才触发正向旋转。这样确保动画不会被覆盖或打断。

Figma Slides
Figma Slides

Figma Slides 是 Figma 发布的PPT制作和演示文稿生成工具,可以帮助创建、设计、定制和分享演示文稿

下载

✅ 关键技术点说明

  • animation-fill-mode: forwards:必须显式设置(代码中通过 style.animation = "... forwards" 实现),否则动画结束后元素会立即恢复原始 transform 值,造成“闪回”。
  • 监听 animationstart 和 animationend:精准捕获动画启停时刻,及时更新状态映射。
  • 直接操作 element.style.animation:比切换 class 更可控,旧动画会自动终止,新动画立即接管(无需手动 removeClass)。

✅ 完整可运行代码示例








Just a basic explanation of the picture.

Second polaroid with same behavior.

⚠️ 注意事项

  • 不要使用 transition 混合 animation:二者机制不同,混合易导致行为不可控;
  • 避免在 :hover 中直接写 transform:这会覆盖 animation 的 forwards 效果,造成跳变;
  • 若需支持旧版 IE,请补充 -ms-transform 等前缀(现代项目通常可忽略);
  • 多个元素共用同一套逻辑?✅ querySelectorAll + forEach 已天然支持。

✅ 总结

该方案将「动画控制权」从 CSS 移交至 JS,通过精细化的状态协同,实现了真正符合直觉的悬停交互体验:动画不中断、不跳帧、不重置,进退皆从容。适用于 Polaroid 相框、卡片翻转、图标悬停动效等需要精确时序控制的 UI 场景。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

139

2025.12.04

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

534

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

17

2025.12.06

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

64

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

42

2025.11.27

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

516

2023.06.20

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.2万人学习

CSS教程
CSS教程

共754课时 | 28.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号