0

0

CSS动画实现的心跳感应UI_柔和的缩放与颜色明度变化

P粉602998670

P粉602998670

发布时间:2026-02-27 11:33:29

|

489人浏览过

|

来源于php中文网

原创

心跳动画必须用 transform: scale(),不可单独写 scale();应模拟“快缩慢回”节奏,使用 cubic-bezier(0.6, 0, 0.4, 1);颜色明度变化优先用 hsl() 调 l 值;@keyframes 中 0% 和 100% 必须显式声明且严格一致;推荐时长 1.2s~1.6s;启停应结合 focus-within、pointerdown 与自动暂停,避免重置动画状态。

css动画实现的心跳感应ui_柔和的缩放与颜色明度变化

心跳动画用 transform: scale() 还是 scale()

直接用 transform: scale(1.05),别写成 scale(1.05) —— 后者不是合法 CSS 值,浏览器会静默忽略。缩放必须挂在 transform 属性下,这是最常被复制粘贴错的地方。

真实场景里,心跳不是匀速放大再缩小,得模拟心肌收缩的“快缩慢回”:前 30% 时间完成 90% 的缩放变化,后 70% 缓缓回弹。用 cubic-bezier(0.6, 0, 0.4, 1)ease-in-out 更接近生理节奏。

  • 别用 animation-timing-function: ease,它会让缩放头重脚轻,像气球漏气
  • 起始状态建议设为 transform: scale(1),避免首次渲染闪动
  • 如果元素有 border 或阴影,缩放时可能模糊——加 will-change: transform 提前提示渲染层

颜色明度变化该用 hsl() 还是 rgba()

hsl()。明度(l)可单独调节,不干扰色相和饱和度,改一个数值就能实现“呼吸感”;而调 rgba() 的 alpha 会同时影响背景穿透和文字可读性,在深色模式下极易翻车。

典型错误是写成 hsl(350, 80%, 60%) → hsl(350, 80%, 75%),看似明度升高,但人眼对红色系明度变化极不敏感——换到橙红过渡(比如 hsl(15, 90%, 60%) → hsl(15, 90%, 72%))效果立竿见影。

立即学习前端免费学习笔记(深入)”;

Getsound
Getsound

基于当前天气条件生成个性化音景音乐

下载
  • 避免在动画中切换色相(h),会导致视觉跳变,专注调 l
  • 若需兼容 IE,hsl() 安全,但 IE 不支持 will-change 和部分贝塞尔曲线
  • 移动端 Safari 对 hsl() 动画性能友好,比反复改 rgb() 十六进制值更稳

@keyframes 里要不要写 0%100%

要写,而且必须显式写出。省略 0% 会导致动画首帧从元素当前 transformcolor 状态开始,而不是你预期的“静息态”,尤其当元素已带内联样式或 JS 修改过状态时,心跳一触发就抽搐。

更关键的是:心跳是循环动作,100% 必须严格等于 0%,否则每轮结束会有微小偏移,叠加几次后缩放失真、颜色漂移。这不是理论风险,是真实发生过的 UI 漂移 bug。

  • 示例写法:
    @keyframes heartbeat {
      0% { transform: scale(1); color: hsl(15, 90%, 60%); }
      30% { transform: scale(1.08); color: hsl(15, 90%, 72%); }
      100% { transform: scale(1); color: hsl(15, 90%, 60%); }
    }
  • 别用 from/to 替代 0%/100%,部分旧版 Android WebView 解析不准
  • 动画时长建议设为 1.2s1.6s,接近成人静息心率,太快像抽搐,太慢失去反馈感

如何让心跳动画只在用户“注视”时运行?

:hover 太粗糙,手机没 hover;靠 IntersectionObserver 监听进入视口又太重。真正轻量的解法是监听 focus-within + pointerdown 组合,再加一个 3 秒自动暂停计时器。

核心逻辑:用户点按或聚焦到该 UI 区域时启动动画,3 秒无交互则暂停。既省电,又避免后台标签页里动画狂转拖慢性能。

  • CSS 里用 .heartbeat-trigger:focus-within .heartbeat-anim { animation-play-state: running; }
  • JS 中绑定 pointerdown 后立即 setTimeout(() => el.style.animationPlayState = 'paused', 3000)
  • 千万别用 visibility: hiddendisplay: none 控制动画启停——会重置动画状态,再显示时从头开始

复杂点在于:多个心跳元素共存时,每个都要独立计时;容易被忽略的是,键盘 Tab 焦点切换也得触发,否则无障碍访问失效。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
js正则表达式
js正则表达式

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

526

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

494

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

638

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5806

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

492

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

218

2023.09.04

Js中concat和push的区别
Js中concat和push的区别

Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

240

2023.09.14

js截取字符串的方法介绍
js截取字符串的方法介绍

JavaScript字符串截取方法,包括substring、slice、substr、charAt和split方法。这些方法可以根据具体需求,灵活地截取字符串的不同部分。在实际开发中,根据具体情况选择合适的方法进行字符串截取,能够提高代码的效率和可读性 。

296

2023.09.21

html5播放器怎么用
html5播放器怎么用

本合集全面介绍HTML5播放器的使用方法,涵盖基础语法、自定义控制、兼容性处理及实战示例。阅读专题下面的文章了解更多详细内容。

0

2026.02.27

热门下载

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

精品课程

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

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

CSS教程
CSS教程

共754课时 | 36.9万人学习

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

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