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 = ax2 + bx + c),可以考慮使用 JavaScript +
requestAnimationFrame
來實現。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96716.shtml
英文地址,請注明出處:http://en.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;數據庫運維面臨著極大的…