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://www.pswp.cn/bicheng/96716.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习之损失函数

深度神经网络由多层网络连接而成&#xff0c;网络连接处防止线性直接相关&#xff0c;采用非线性函数进行逐层隔离&#xff0c;真正实现每层参数的独立性&#xff0c;也就是只对本层提取到的特征紧密相关。因为如果是线性函数直接相连就成了一层中间网络了&#xff0c;只不过参…

Oracle OCP认证考试题目详解082系列第32题

考察知识点:Oracle profiles(配置文件) 英语题目 32.Which are two of the account management capabilities that can be configured using Oracle profiles? A.the number of days for which an account may be logged in to one or more sessions before it is locked…

Docker 部署 MongoDB:单节点与副本集的最佳实践

Docker 部署 MongoDB&#xff1a;单节点与复制集的企业级最佳实践引言&#xff1a;容器化有状态服务的范式转变第一部分&#xff1a;基础概念与生产环境考量1.1 核心 Docker 概念深度解析1.2 Volume vs. Bind Mount&#xff1a;生产环境抉择1.3 获取与验证官方镜像官方镜像默认…

公司本地服务器上搭建部署的办公系统web项目网站,怎么让外网访问?有无公网IP下的2种通用方法教程

本地物理服务器计算机搭建部署应用包括网站等&#xff0c;然后在局域网内的访问外&#xff0c;还需要提供外地的连接访问&#xff0c;这是比较常见的跨网通信需求。如在家或在外访问公司内部办公系统网站&#xff0c;这就涉及内网IP和公网IP的转换&#xff0c;或域名的解析使用…

整体设计 之 绪 思维导图引擎 之 引 认知系统 之 引 认知系统 之 序 认知元架构 之6 拼句 之1 (豆包助手 之8)

摘要(AI生成)认知演进 中 交流句子所包含的 信息描述框架 < i , j > ( m , n )本体论基础&#xff08;数学约束&#xff09;&#xff1a; n n元&#xff08;维度&#xff09;n次&#xff08;层次&#xff09;n个&#xff08;方程&#xff09;n场&#xff08;场景&am…

微软的两个调试器debugpy和python

在生成launch.json文件时&#xff0c;新版本的python扩展解释器类型是debugpy&#xff0c;而不是就版本的type:python&#xff0c;那么两者的区别在哪&#xff1f;1. 历史演变背景&#xff08;1&#xff09;旧版&#xff08;Python扩展 < 2021.09&#xff09;使用 "typ…

【连载2】C# MVC 自定义错误页设计:404/500 处理与 SEO 优化

在开发ASP.NET MVC 应用时&#xff0c;自定义错误页是提升用户体验和 SEO 表现的重要环节。默认的错误页不仅不美观&#xff0c;还可能泄露技术细节&#xff0c;影响用户体验和搜索引擎排名。 实现自定义错误页的完整代码 配置 Web.config 自定义错误页 在 ASP.NET 中&#…

mcp解读——概述及整体架构

概念介绍 什么是模型上下文协议 &#xff08;MCP&#xff09; MCP&#xff08;模型上下文协议&#xff09;是一种用于将 AI 应用程序连接到外部系统的开源标准。 使用 MCP&#xff0c;Claude 或 ChatGPT 等人工智能应用程序可以连接到数据源&#xff08;例如本地文件、数据库&a…

AI 赋能云端运维:基于 MCP 协议深度集成 Codebuddy CLI 与腾讯云 Lighthouse 的实战全解

摘要 在云计算技术飞速演进的今天&#xff0c;服务器的管理与运维正经历着从传统手动操作、脚本自动化到智能化、对话式交互的深刻变革。本文将系统性地、全流程地展示如何将腾讯云 Lighthouse 轻量应用服务器与尖端的 AI 编程助手 Codebuddy CLI 进行深度集成。我们将从服务器…

【Proteus仿真】【51单片机】教室灯光控制器设计

文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用LCD1602液晶、DS1302时钟模块、人体红外感应模块、开关LED指示灯、继电器、PCF8591 ADC模块、光敏传感器、按键模块等。 主要功能&#xff1a; 系统运…

成为一个年薪30W+的FPGA工程师是一种什么体验?

FPGA&#xff08;Field-Programmable Gate Array&#xff09;是现场可编程门阵列&#xff0c;通过硬件描述语言设计电路&#xff0c;可实现并行计算&#xff0c;广泛应用于通信、人工智能、工业控制等领域。FPGA工程师的工作包括RTL设计、仿真验证、时序分析等。尽管并非所有公…

ZooKeeper Java客户端与分布式应用实战

1. ZooKeeper Java客户端实战 ZooKeeper应用开发主要通过Java客户端API连接和操作ZooKeeper集群&#xff0c;有官方和第三方两种客户端选择。 1.1 ZooKeeper原生Java客户端 依赖引入 <dependency><groupId>org.apache.zookeeper</groupId><artifactId>…

0303 【软考高项】项目管理概述 - 组织系统(项目型组织、职能型组织、矩阵型组织)

0303 【软考高项】项目管理概述 - 组织系统&#xff08;项目型组织、职能型组织、矩阵型组织&#xff09; 目录0303 【软考高项】项目管理概述 - 组织系统&#xff08;项目型组织、职能型组织、矩阵型组织&#xff09;一、基本概念二、职能型组织二、项目型组织三、矩阵型组织3…

计算机视觉与模式识别前沿一览:2025年8月arXiv 热点研究趋势解析

本推文分析了arXiv中Computer Vision and Patteren Recognition(计算机视觉与模式识别)领域2025年8月发布的近50篇论文的研究热点&#xff0c;旨在帮助读者快速了解近期领域内的前沿技术与研究方向。arXiv是全球最具影响力的开放电子预印本平台之一&#xff0c;由美国国家科学基…

vim复制本地到linux服务器上,换行缩进过大,不对的问题

所搜的试了:setlocal shiftwidth? :setlocal tabstop? :setlocal expandtab? :setlocal softtabstop?" 设置为 4 个空格缩进 :setlocal shiftwidth4" 通常你会希望 tabstop 和 softtabstop 也保持一致 :setlocal tabstop4 :setlocal softtabstop4尝试完不起作用&…

【小程序】微信小程序九宫格抽奖动画(完整版)

这是一个微信小程序九宫格抽奖页面的完整代码&#xff0c;包括 WXML、WXSS、JS 和 JSON。 效果 九宫格抽奖功能说明&#xff1a; 静态页面布局&#xff1a; 3x3 九宫格&#xff0c;中间是“立即抽奖”按钮&#xff0c;周围是奖品金额。抽奖动画&#xff1a; 点击“立即抽奖”…

java类冲突

一、为什么会发生类冲突&#xff1f; 在 Java 的类加载机制中&#xff0c;类的唯一性是由“类加载器类的全限定名”共同决定的。当你的项目依赖了多个 jar 包&#xff0c;这些 jar 包里有同名的类&#xff08;包名和类名完全一样&#xff09;&#xff0c;但实现却不同。类加载器…

GIT客户端配置支持中文

环境&#xff1a;windows10、Git-2.42.0.2-64-bit.exe1. 问题描述客户端安装后&#xff0c;默认是不支持中文显示的&#xff0c;中文名的文件显示乱码&#xff0c;提交时打的标签内容也不支持中文显示。2. 解决新建Git全局配置文件&#xff0c;文件名为.gitconfig&#xff0c;内…

Teable vs NocoDB 开源、在线协同 多维表格大PK

文章目录 Teable 简介 特性 docker-compose部署 功能截图 NocoDB 简介 docker-compose部署 功能截图 总结 Teable 简介 Teable 是一款企业级高性能多维表格解决方案,通过无代码方式快速构建业务管理系统,支持私有部署和精细权限管理。 官方文档 特性 🚀 卓越性能 轻松处…

SQL专家云能做哪些事儿?

背景数据库是信息化的基石&#xff0c;支撑着整个业务系统&#xff0c;发挥着非常重要的作用&#xff0c;被喻为“IT的心脏”。因此&#xff0c;让数据库安全、稳定、高效地运行已经成为IT管理者必须要面对的问题。但是很多组织没有专业的DBA&#xff0c;数据库运维面临着极大的…