
本教程详细讲解如何利用css的`@keyframes`规则和`animation`属性,为html元素实现逼真的震动视觉效果。文章将涵盖动画定义、属性配置、以及通过j*ascript动态触发动画的方法,并提供完整的示例代码和注意事项,帮助开发者轻松为网页增添交互性。
CSS动画主要通过两个核心概念实现:@keyframes规则和animation属性。
通过组合这两者,我们可以创建从简单的悬停效果到复杂页面过渡的各种动态视觉体验。
震动效果通常涉及元素的微小位移(translate)和旋转(rotate),以模拟不规则的晃动。以下是一个经典的震动效果@keyframes定义:
@keyframes shake {
0% { transform: translate(1px, 1px) rotate(0deg); }
10% { transform: translate(-1px, -2px) rotate(-1deg); }
20% { transform: translate(-3px, 0px) rotate(1deg); }
30% { transform: translate(3px, 2px) rotate(0deg); }
40% { transform: translate(1px, -1px) rotate(1deg); }
50% { transform: translate(-1px, 2px) rotate(-1deg); }
60% { transform: translate(-3px, 1px) rotate(0deg); }
70% { transform: translate(3px, 1px) rotate(-1deg); }
80% { transform: translate(-1px, -1px) rotate(1deg); }
90% { transform: translate(1px, 2px) rotate(0deg); }
100% { transform: translate(1px, -2px) rotate(-1deg); }
}在这个@keyframes shake定义中:
为了实现可控的震动效果(例如持续3秒),我们需要在CSS中定义一个类,将@keyframes shake动画应用到目标元素上。
.shake-active {
animation-name: shake; /* 指定要使用的 @keyframes 动画名称 */
animation-duration: 3s; /* 动画持续时间为3秒 */
animation-timing-function: ease-in-out; /* 动画速度曲线,可根据需要调整 */
animation-iteration-count: 1; /* 动画播放次数为1次 */
animation-fill-mode: forwards; /* 动画结束后保持最后一个关键帧的样式 */
}
/* 示例元素的样式,非震动效果必需 */
#myElement {
background-color: lightcoral;
height: 150px;
width: 150px;
margin: 50px;
display: flex;
justify-content: center;
align-items: center;
font-size: 1.2em;
color: white;
font-weight: bold;
}要实现“像函数一样随时调用”震动效果,我们可以结合J*aScript来动态添加和移除包含动画属性的CSS类。
function triggerShake(elementId) {
const element = document.getElementById(elementId);
if (element) {
// 确保在重新添加类之前移除旧的动画类,以允许动画再次播放
element.classList.remove('shake-active');
// 强制浏览器重绘以重置动画(通过获取一个属性)
void element.offsetWidth;
// 添加类以触发动画
element.classList.add('shake-active');
// 动画结束后移除类,以便下次可以再次触发
// 注意:这里的3000ms应与CSS中的animation-duration匹配
setTimeout(() => {
element.classList.remove('shake-active');
}, 3000);
}
}这段J*aScript代码的工作原理:
LALAL.AI
AI人声去除器和声乐提取工具
196
查看详情
将HTML、CSS和J*aScript结合起来,形成一个完整的可运行示例:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HTML元素震动效果教程</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
background-color: #f0f2f5;
}
/* 震动动画的关键帧定义 */
@keyframes shake {
0% { transform: translate(1px, 1px) rotate(0deg); }
10% { transform: translate(-1px, -2px) rotate(-1deg); }
20% { transform: translate(-3px, 0px) rotate(1deg); }
30% { transform: translate(3px, 2px) rotate(0deg); }
40% { transform: translate(1px, -1px) rotate(1deg); }
50% { transform: translate(-1px, 2px) rotate(-1deg); }
60% { transform: translate(-3px, 1px) rotate(0deg); }
70% { transform: translate(3px, 1px) rotate(-1deg); }
80% { transform: translate(-1px, -1px) rotate(1deg); }
90% { transform: translate(1px, 2px) rotate(0deg); }
100% { transform: translate(1px, -2px) rotate(-1deg); }
}
/* 应用震动动画的CSS类 */
.shake-active {
animation-name: shake;
animation-duration: 3s;
animation-timing-function: ease-in-out;
animation-iteration-count: 1;
animation-fill-mode: forwards;
}
/* 示例元素的样式 */
#myElement {
background-color: #4CAF50; /* 绿色背景 */
height: 150px;
width: 150px;
margin: 30px 0;
display: flex;
justify-content: center;
align-items: center;
font-size: 1.2em;
color: white;
font-weight: bold;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0,0,0,0.2);
transition: background-color 0.3s ease; /* 添加过渡效果 */
}
#myElement:hover {
background-color: #45a049; /* 悬停变深 */
}
button {
padding: 10px 20px;
font-size: 1em;
cursor: pointer;
background-color: #008CBA; /* 蓝色按钮 */
color: white;
border: none;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
transition: background-color 0.3s ease;
}
button:hover {
background-color: #007bb5;
}
</style>
</head>
<body>
<h1>HTML元素震动效果演示</h1>
<div id="myElement">点击按钮震动我</div>
<button onclick="triggerShake('myElement')">触发震动</button>
<script>
function triggerShake(elementId) {
const element = document.getElementById(elementId);
if (element) {
// 1. 移除旧的动画类,确保动画可以重新播放
element.classList.remove('shake-active');
// 2. 强制浏览器重绘以重置动画
void element.offsetWidth; // 触发回流
// 3. 添加类以触发动画
element.classList.add('shake-active');
// 4. 动画结束后移除类,以便下次可以再次触发
// 这里的3000ms应与CSS中的animation-duration匹配
setTimeout(() => {
element.classList.remove('shake-active');
}, 3000);
}
}
</script>
</body>
</html>如果目标是让整个HTML窗口看起来震动,可以将shake-active类应用到
元素,或者创建一个覆盖整个视口的div并对其应用动画。/* 应用于body的全屏震动 */
body.shake-active {
animation-name: shake;
animation-duration: 3s;
animation-timing-function: ease-in-out;
animation-iteration-count: 1;
animation-fill-mode: forwards;
}然后通过J*aScript document.body.classList.add('shake-active'); 来触发。
CSS transform属性(包括translate和rotate)的动画通常是高性能的,因为它们可以通过GPU加速。这意味着它们不会引起布局或绘制的重排,从而提供更流畅的动画体验。避免对width, height, margin, padding等属性进行动画,这些属性会触发昂贵的布局计算。
通过本教程,您已经掌握了如何使用CSS的@keyframes规则和animation属性来创建HTML元素的震动效果,并学会了如何结合J*aScript动态地触发和控制这些动画。这种方法不仅功能强大,而且性能优异,是为网页添加丰富交互性和视觉反馈的有效手段。在实际应用中,请务必考虑用户体验和无障碍性,以提供最佳的浏览体验。
以上就是使用CSS动画为HTML元素创建震动效果教程的详细内容,更多请关注其它相关文章!
# 设置为
# 谷歌seo公司蓝颜SEO.牛
# 南京建设网站的要求
# 京东页面描述有力seo
# 怀柔区纺织网站建设
# 广东谷歌seo推广销售
# 徐州网站推广 应选c金石下拉_强
# 马尾区seo服务电话
# 深圳神马推广纵横seo
# 石家庄网站优化方式
# 网络营销的网络推广方式
# 这是
# 无障碍
# 应与
# 全屏
# 我们可以
# css
# 是一个
# 结束后
# 持续时间
# 移除
# re
# 重绘
# 回流
# css属性
# html元素
# css动画
# ssl
# 浏览器
# html
# java
# javascript
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
百度网盘网页入口链接分享 百度网盘官网入口网页登录
《桃源记2》资源采集攻略
《三国:谋定天下》平民全阶段通用阵容
Retrofit根路径POST请求:@POST("/") 的应用与解析
在PHP环境中正确加载HTML资源:CSS样式与图片路径指南
MySQL多重JOIN技巧:高效关联同一表获取多角色信息
荣耀Magic6 Pro拍照成像偏暗_荣耀Magic6 Pro夜景优化
谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法
PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略
《via浏览器》强制缩放网页设置方法
网易云音乐闹钟铃声设置教程
消除网页顶部意外空白线:CSS布局常见问题与解决方案
Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】
b站如何剪辑视频_b站必剪app使用教程
Win10关闭UAC用户账户控制的方法 Win10降低安全提示等级【技巧】
123平台官方登录入口 123邮箱网页端在线沟通工具
电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】
Sublime怎么格式化HTML代码_Sublime前端代码美化插件使用指南
5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备
优化响应式标题底部边框:CSS实现技巧与最佳实践
sf漫画官网登录入口直达_sf漫画官方正版网址
哈尔滨城市通昵称修改方法
解决SQLAlchemy模型跨文件关联的Linter兼容性指南
抖音如何进行蓝V认证 抖音企业号申请所需资料与流程
win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】
Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合
《大学搜题酱》官网地址登录
如何外贸网站设计-能留住客户提升用户体验!
Win10运行窗口在哪里打开 Win10调出运行命令框快捷键【技巧】
AffinityDesigner图层蒙版怎么用_AffinityDesigner图层蒙版设计应用
动漫之家观看全集库 动漫之家免费资源网地址
CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程
J*aScript调试技巧_性能分析与内存快照
蛙漫2(台版)正版官网 2025免费网页版分享
VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略
win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】
海棠阅读网页版_进入海棠网页版在线阅读中心
Python csv 模块处理非字符串数据:列表写入 CSV 文件的机制解析
济南公交卡手机充值指南
PDF文件去水印平台入口 PDF水印删除网址
iSpring三分屏制作教程
使用逻辑应用(Logic Apps)自动处理邮件附件中的XML到Excel
抖音赚钱快速入门_新手必看的抖音赚钱步骤
C++ cast类型转换总结_C++ reinterpret_cast与const_cast的使用
学习通网页版个人登录_学习通网页版个人账户登录入口
优化Google Charts Gauge:在数据库无数据时显示默认值
《edge浏览器》关闭翻译功能方法
iPhone17Pro如何连接蓝牙耳机_iPhone17Pro蓝牙设备配对与连接方法介绍
抖音评论无法发送如何修复 抖音评论功能操作指南
Teambition网盘如何共享文件
2025-11-10
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。