膜拜!用最少的代碼卻實現了最牛逼的滾動動畫!

来源:https://www.cnblogs.com/tanggoahead/archive/2023/08/04/17607298.html
-Advertisement-
Play Games

這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 發現很多人還只會promise常規用法 在js項目中,promise的使用應該是必不可少的,但我發現在同事和麵試者中,很多中級或以上的前端都還停留在promiseInst.then()、promiseInst.catch()、Promis ...


大家好,我是程式視點的小二哥!今天小二哥帶領大家學習如何使用最少的代碼創建令人嘆為觀止的滾動動畫~

在聊ScrollTrigger插件之前我們先簡單瞭解下GSAP

GreenSock 動畫平臺 (GSAP) 可為 JavaScript 可以操作的任何內容(CSS 屬性、SVG、React、畫布、通用對象等)動畫化,並解決不同瀏覽器上存在的相容問題,而且比 jQuery快 20 倍。大約1000萬個網站和許多主要品牌都在使用GSAP。

接下來小二哥帶領大家一起學習ScrollTrigger插件的使用。

插件簡介

ScrollTrigger是基於GSAP實現的一款高性能頁面滾動觸發HTML元素動畫的插件。通過ScrollTrigger使用最少的代碼創建令人嘆為觀止的滾動動畫。我們需要知道ScrollTrigger是基於GSAP實現的插件,ScrollTrigger是處理滾動事件的,而真正處理動畫是GSAP,二者組合使用才能實現滾動動畫~

插件特點

  • 將任何動畫鏈接到特定元素,以便它僅在視圖中顯示該元素時才執行該動畫。
  • 可以在進入/離開定義的區域或將其直接鏈接到滾動欄時在動畫上執行操作(播放、暫停、恢復、重新啟動、反轉、完成、重置)。
  • 延遲動畫和滾動條之間的同步。
  • 根據速度捕捉動畫中的進度值。
  • 嵌入滾動直接觸發到任何 GSAP 動畫(包括時間線)或創建獨立實例,並利用豐富的回調系統做任何您想做的事。
  • 高級固定功能可以在某些滾動位置之間鎖定一個元素。
  • 靈活定義滾動位置。
  • 支持垂直或水平滾動。
  • 豐富的回調系統。
  • 當視窗調整大小時,自動重新計算位置。
  • 在開發過程中啟用視覺標記,以準確查看開始/結束/觸發點的位置。
  • 在滾動記錄器處於活動狀態時,如將active類添加到觸發元素中:toggleClass: "active"
  • 使用 matchMedia() 標準媒體查詢為各種屏幕尺寸創建不同的設置。
  • 自定義滾動觸發器容器,可以定義一個 div 而不一定是瀏覽器視口。
  • 高度優化以實現最大性能。
  • 插件大約只有6.5kb大小。

安裝

CDN

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/gsap.min.js"></script>  
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/ScrollTrigger.min.js"></script>  

ES Modules

import { gsap } from "gsap";  
import { ScrollTrigger } from "gsap/ScrollTrigger";  
  
gsap.registerPlugin(ScrollTrigger);  

UMD/CommonJS

import { gsap } from "gsap/dist/gsap";  
import { ScrollTrigger } from "gsap/dist/ScrollTrigger";  
  
gsap.registerPlugin(ScrollTrigger);  
  

簡單示例

gsap.to(".box", {  
  scrollTrigger: ".box", // start the animation when ".box" enters the viewport (once)  
  x: 500  
});  

高級示例

let tl = gsap.timeline({  
    // 添加到整個時間線   
    scrollTrigger: {  
      trigger: ".container",  
      pin: true,   // 在執行時固定觸發器元素  
      start: "top top", // 當觸發器的頂部碰到視口的頂部時  
      end: "+=500", // 在滾動 500 px後結束  
      scrub: 1, // 觸發器1秒後跟上滾動條  
      snap: {  
        snapTo: "labels", // 捕捉時間線中最近的標簽  
        duration: {min: 0.2, max: 3}, // 捕捉動畫應至少為 0.2 秒,但不超過 3 秒(由速度決定)   
        delay: 0.2, // 從上次滾動事件開始等待 0.2 秒,然後再進行捕捉   
        ease: "power1.inOut" // 捕捉動畫的過度時間(預設為“power3”)   
      }  
    }  
  });  
  
// 向時間線添加動畫和標簽   
tl.addLabel("start")  
  .from(".box p", {scale: 0.3, rotation:45, autoAlpha: 0})  
  .addLabel("color")  
  .from(".box", {backgroundColor: "#28a92b"})  
  .addLabel("spin")  
  .to(".box", {rotation: 360})  
  .addLabel("end");  

自定義示例

ScrollTrigger.create({  
  trigger: "#id",  
  start: "top top",  
  endTrigger: "#otherID",  
  end: "bottom 50%+=100px",  
  onToggle: self => console.log("toggled, isActive:", self.isActive),  
  onUpdate: self => {  
    console.log("progress:", self.progress.toFixed(3), "direction:", self.direction, "velocity", self.getVelocity());  
  }  
});  

接下來,我們一起來看使用ScrollTrigger可以實現什麼樣的效果吧~

效果演示





利用ScrollTrigger可以實現很多炫酷的效果,還有更多示例及源代碼,歡迎查閱官網哦~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 適用Linux所有版本,就是命令不一樣,我以Ubuntu為例,命令使用的也是Ubuntu的。 sudo apt-get install bcmwl-kernel-source #Broadcom 802.11 Linux STA 無線驅動源 sudo apt-get install broadcom ...
  • 1.確認nginx是否已安裝SSL模塊 查驗方法:進入sbin目錄,執行以下語句,顯示結果如標記所示則表示安裝成功 ./nginx -V 2.確認系統以安裝SSL工具,開始製作證書 選擇一個存放證書的路徑,執行以下語句即可: (1)生成密鑰,得到文件private.key openssl genpk ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202308/3076680-20230803123612359-1050633424.png) # 1. 問題9 ## 1.1. 只講授一門課程的教授 ## 1.2. sql ```sql select p. ...
  • **原文鏈接:** [使用 RediSearch 在 Redis 中進行全文檢索](https://mp.weixin.qq.com/s/X1qKL0jMaklGw6GLcrkp2g) Redis 大家肯定都不陌生了,作為一種快速、高性能的鍵值存儲資料庫,廣泛應用於緩存、隊列、會話存儲等方面。 然而 ...
  • #### 第3句 今日流失用戶 ##### 需求: 當日流失用戶的定義:昨天登錄的,今天沒登錄的用戶數 有一張用戶登錄日誌表,有欄位 date_stamp(日期時間戳),用戶id(uid)。如果用戶在某天登錄了,該表會有一條記錄。 ``` #今天流失人數:昨天登錄,今天沒登錄的 select a.d ...
  • TopSQL為DWS的監控系統,記錄DWS中各個作業、運算元級別的資源使用數據、耗時數據,包括下盤信息、記憶體、網路、耗時、警告、基礎信息等作業執行的數據。 ...
  • ![file](https://img2023.cnblogs.com/other/2685289/202308/2685289-20230803180034435-79319118.png) ## 導讀 國內某頭部券商是國內排名前三的全國性大型綜合證券公司。作為證券行業領頭羊之一,該券商一直高度重 ...
  • 本文分享自華為雲社區《如何為物聯網設備註入“華為雲+鴻蒙DNA”?看華為雲IoT怎麼答【華為雲IoT +鴻蒙】》,作者: 華為IoT雲服務。 根據市場咨詢機構預測,2025年全球物聯網設備將達到252億個。但各種智能設備大多都有一套自己的系統,而且互相“孤立”,無法交流。鴻蒙的到來,就是要用同一套語 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...