当前位置: 首页 > news >正文

css 文字跳跃动画

文字跳动

animation: jump 1s cubic-bezier(0.58, 0.11, 0.63, 1.62) forwards var(–delay);

这条CSS动画属性非常精巧地创建了一个弹性跳跃效果,我来详细解析它的每个部分:

完整语法分解:

animation: jump 1s cubic-bezier(0.58, 0.11, 0.63, 1.62) forwards var(--delay);

1. 动画名称 jump

引用定义好的@keyframes jump关键帧动画

2. 持续时间 1s

动画完整执行一次需要1秒钟

3. 缓动函数 cubic-bezier(0.58, 0.11, 0.63, 1.62)

这是最精妙的部分,这个三次贝塞尔曲线创造了独特的弹性效果:

  • 起点控制点 (0.58, 0.11):使动画开始时快速上升
  • 终点控制点 (0.63, 1.62):创造了"过冲"效果(overshoot),让元素会超过终点位置再弹回
  • 效果类似弹簧被释放后的弹跳运动

4. 填充模式 forwards

动画结束后保持最后一帧的状态(保留to关键帧的属性值)

5. 延迟时间 var(--delay)

使用CSS变量控制每个字符的动画延迟时间,实现依次跳跃效果

  // 设置每个字符的延迟const spans = title.querySelectorAll('span');spans.forEach((span, spanIndex) => {span.style.setProperty('--delay', `${(titleIndex * 0.3) + (spanIndex * 0.1)}s`);});});

可视化理解这个缓动曲线:

这个特殊的cubic-bezier值会产生这样的运动轨迹:

  1. 快速向上加速(开始阶段)
  2. 超过目标位置(约120%的高度)
  3. 回弹到目标位置
  4. 轻微震荡后停止

对比标准缓动函数:

  • ease-out更有弹性
  • elastic类动画更简洁
  • bounce效果更平滑

调试建议:

您可以通过Chrome DevTools的"Animation"面板:

  1. 点击"cubic-bezier"图标
  2. 拖动曲线控制点实时观察效果变化
  3. 比较不同参数对动画感觉的影响
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>改进版动画效果</title><style>body {display: flex;justify-content: center;align-items: center;min-height: 100vh;background-color: #f5f5f5;margin: 0;font-family: Arial, sans-serif;}.title-container {text-align: center;}.title {font-size: 42px;text-transform: uppercase;letter-spacing: 2px;transform: rotate(-10deg);display: flex;justify-content: center;margin: 10px 0;}.title span {display: inline-block;text-shadow: 1px 1px #533d4a, 2px 2px #533d4a, 3px 3px #533d4a, 4px 4px #533d4a, 5px 5px #533d4a;transform: skew(-10deg);animation: jump 1s cubic-bezier(0.58, 0.11, 0.63, 1.62) forwards var(--delay);opacity: 0;will-change: transform, opacity;transition: transform 0.2s ease;}.title span:hover {transform: skew(-10deg) translateY(-10px);}@keyframes jump {from {opacity: 0;transform: skew(-10deg) translateY(300%);}to {opacity: 1;transform: skew(-10deg) translateY(0%);}}.title:nth-child(1) {color: #e55643;}.title:nth-child(2) {color: #2b9f5e;}.title:nth-child(3) {color: #f1c83c;}@media (max-width: 768px) {.title {font-size: 32px;letter-spacing: 1px;}}@media (prefers-reduced-motion: reduce) {.title span {animation: none !important;opacity: 1 !important;}}</style>
</head>
<body><div class="title-container"><p class="title">这是一个</p><p class="title">长长的</p><p class="title">标题动画</p></div><script>document.addEventListener('DOMContentLoaded', () => {const titles = document.querySelectorAll('.title');titles.forEach((title, titleIndex) => {// 拆分文字为spantitle.innerHTML = title.textContent.split('').map(char => `<span>${char === ' ' ? '&nbsp;' : char}</span>`).join('');// 设置每个字符的延迟const spans = title.querySelectorAll('span');spans.forEach((span, spanIndex) => {span.style.setProperty('--delay', `${(titleIndex * 0.3) + (spanIndex * 0.1)}s`);});});});</script>
</body>
</html>

相关文章:

  • 网站安全认证去哪做百度推广网页版
  • 房地产网站建设联系方式外贸网站搭建
  • 怎么做子网站安卓优化大师app下载安装
  • 标签式网站内容管理手机网站怎么优化关键词
  • 要做个卖东西网站怎么做东莞seo外包公司
  • 济南教育论坛网站建设厦门seo
  • prometheus 配置邮件告警
  • iostat中的util原理
  • 大模型项目实战:业务场景和解决方案
  • 数学:关于向量计算的三角形法则
  • GoAdmin代码生成器实践
  • 中断控制与实现
  • APP测试-APP启动耗时
  • Android 9.0(API 28)后字重设置
  • LeetCode热题100—— 35. 搜索插入位置
  • ubuntu22.04修改IP地址
  • 战略调整频繁,如何快速重构项目组合
  • Spring Boot整合FreeMarker全攻略
  • 基于STM32的快递箱的设计
  • 对人工智能的厌倦感是真实存在的,而且它给品牌带来的损失远不止是参与度的下降
  • Android edge-to-edge兼容适配
  • Git 子模块 (Submodule) 完全使用指南
  • 【Vue】 keep-alive缓存组件实战指南
  • AI智能化高效办公:WPS AI全场景深度应用指南
  • MySQL之SQL性能优化策略
  • LayUI的table实现行上传图片+mvc