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

CSS 动画实战:实现电商中“加入购物车”的抛物线效果

引言

在电商网站中,“加入购物车”动画 是提升用户体验的经典交互之一。一个小小的商品图标从页面飘向购物车,不仅直观地反馈了操作结果,还能增加趣味性与沉浸感。

实现这一效果的方式有很多,比如 JavaScript 计算路径 + 动画,或者 CSS3 动画 + 贝塞尔曲线。本文将带你从 CSS 动画的基础 出发,逐步讲解如何利用 @keyframes、animation-timing-function 以及 多层容器组合 来实现一个优雅的 抛物线加入购物车效果,并提供完整代码案例。


基础代码示例

我们先来看一个利用 嵌套元素 来实现 X 轴匀速、Y
轴曲线运动的抛物线动画。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Parabola Animation</title></head><body><div class="container"><div class="box-x"><div class="box-y"><div class="box"></div></div></div></div></body><style>:root {--containerWidth: 400px;--containerHeight: 400px;}.container {width: var(--containerWidth);height: var(--containerHeight);position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);border: 1px solid black;}/* X 轴:匀速运动 */.box-x {animation: jumpX 0.8s infinite linear;}/* Y 轴:使用曲线模拟加速下落、减速上升 */.box-y {animation: jumpY 0.8s infinite cubic-bezier(0.75, 0.06, 0.94, 0.88);}.box {width: 30px;height: 30px;background-color: blueviolet;border-radius: 50%;}@keyframes jumpX {from {transform: translateX(0);}to {transform: translateX(calc(var(--containerWidth) - 30px));}}@keyframes jumpY {from {transform: translateY(0);}to {transform: translateY(calc(var(--containerHeight) - 30px));}}</style>
</html>

效果示例

在这里插入图片描述


为什么要用嵌套元素?

  • 问题transform: translate(x, y) 会同时作用于 X 和
    Y,如果我们在一个元素上设置 animation-timing-function,那么 X 和 Y
    会同时受到影响。\
  • 解决方案:通过嵌套结构,把 X 和 Y 的运动分开:
    • 外层 .box-x 只管 X 轴,并设置 linear 匀速运动;
    • 内层 .box-y 只管 Y 轴,并用 cubic-bezier 调整速度曲线。

这样就能实现一个接近 物理抛物线 的运动效果。


animation-timing-function 详解

animation-timing-function 控制动画在
时间进度与实际位置之间的映射关系。常见值如下:

  1. linear

    • 匀速运动,没有加速度。\
    • 在本例中用于 X 轴运动
    animation-timing-function: linear;
    
  2. ease

    • 默认值,开始和结束慢,中间快。
    animation-timing-function: ease;
    
  3. ease-in

    • 由慢到快,模拟加速进入。\
    • 常用于模拟"加速下落"。
    animation-timing-function: ease-in;
    
  4. ease-out

    • 由快到慢,模拟减速停止。\
    • 常用于"物体上升或停止"。
    animation-timing-function: ease-out;
    
  5. ease-in-out

    • 先加速,后减速。\
    • 常用于"自然的往返运动"。
    animation-timing-function: ease-in-out;
    
  6. cubic-bezier(n, n, n, n)

    • 自定义贝塞尔曲线,范围为 0 ~ 1。\
    • 我们示例中的参数 cubic-bezier(0.75, 0.06, 0.94, 0.88),表现为
      快速下落、缓慢上升,模拟重力加速度。
    animation-timing-function: cubic-bezier(0.75, 0.06, 0.94, 0.88);
    

总结

  • X 轴:使用 linear 匀速,保证水平运动自然。\
  • Y 轴:使用 cubic-bezier
    ease-in/ease-out,制造出"加速下落、减速上升"的效果。\
  • 嵌套结构:分离 X 和 Y 的动画逻辑,是实现更复杂动画的常用技巧。

通过 animation-timing-function 的不同曲线组合,我们可以在纯 CSS
中模拟出接近物理效果的运动,增强动画的自然感。


✅ 建议:在实际项目中,如果需要更精确的物理效果(比如抛物线轨迹公式
y = ax² + bx + c),可以考虑使用 JavaScript +
requestAnimationFrame
来实现。


文章转载自:

http://i5O7hEMw.dkqyg.cn
http://kKO12RAN.dkqyg.cn
http://2KXjpKLe.dkqyg.cn
http://VUJ7kWsQ.dkqyg.cn
http://VxPMiZHZ.dkqyg.cn
http://9Maawk1g.dkqyg.cn
http://8wx61nU6.dkqyg.cn
http://iFsw9l6v.dkqyg.cn
http://NT3ADgfW.dkqyg.cn
http://mlFnutEX.dkqyg.cn
http://Dcmp6dAC.dkqyg.cn
http://MJyJXCve.dkqyg.cn
http://Tf8JX2pJ.dkqyg.cn
http://1E6sDBUA.dkqyg.cn
http://24L15AhT.dkqyg.cn
http://gPJaav5R.dkqyg.cn
http://g0f4YI90.dkqyg.cn
http://du4DzGwH.dkqyg.cn
http://z7yI2uQY.dkqyg.cn
http://6JvrUxwa.dkqyg.cn
http://v9ifL2as.dkqyg.cn
http://FhBYhJ4B.dkqyg.cn
http://ApCh8S8D.dkqyg.cn
http://xcZ394rl.dkqyg.cn
http://iigh5Ddw.dkqyg.cn
http://KAqXVEOF.dkqyg.cn
http://JdQbtqJt.dkqyg.cn
http://fYmxPfYd.dkqyg.cn
http://r2VczjMe.dkqyg.cn
http://wf5kjdgn.dkqyg.cn
http://www.dtcms.com/a/380024.html

相关文章:

  • Terraform整合到GitLab+Jenkins工具链
  • android studio 断点无效
  • Prompt技术深度解析:从基础原理到前沿应用的全面指南
  • WPF报错 XDG000 Windows Presentation Foundation (WPF) 项目中不支持 Application
  • Docker的使用及核心命令
  • Jmeter测试
  • 神经网络基本概念
  • 【打包app】uniapp打包ios端和安卓端app
  • 【LeetCode 每日一题】3000. 对角线最长的矩形的面积
  • 制造业档案管理混乱:档案宝如何破解?
  • 第4周 数组的概念和常见操作
  • vue,uniapp 实现卷帘对比效果
  • 鸿蒙 NEXT UI 性能优化实战:打造流畅用户界面的关键策略
  • 使用UniApp实现一个AI对话页面
  • 智能科技与搜索引擎优化关键词的新契机
  • 搜维尔科技:全身可穿戴Teslasuit动捕服的功能,自立式FES装置
  • Java 大视界 -- Java 大数据在智能医疗健康档案数据分析与个性化健康管理中的应用(410)
  • RK3588 Android12默认移除导航栏
  • HBuilder 运行编译器内存溢出
  • lesson59:JavaScript 控制流详解:分支结构与循环语句全指南
  • Avalonia 基础导航实现:从页面切换到响应式交互全指南
  • 【连载2】C# MVC 自定义错误页设计:404/500 处理与 SEO 优化
  • java jdbc连接sqlserver2008R2版本数据库报错,驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
  • 企业级AI大模型选型指南:从评估部署到安全实践
  • Spring Boot + Redis 缓存性能优化实战:从5秒到毫秒级的性能提升
  • 【Vue2手录09】购物车实战
  • 【论文阅读】Uncertainty Modeling for Out-of-Distribution Generalization (ICLR 2022)
  • PAT乙级_1111 对称日_Python_AC解法_无疑难点
  • Kafka面试精讲 Day 16:生产者性能优化策略
  • vue 批量自动引入并注册组件或路由