亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
何為 @scroll-timeline 滾動時間線?
示意 DEMO
@scroll-timeline 語法介紹
使用 @scroll-timeline 實現(xiàn)滾動進度指示器
使用 scroll-offsets 精確控制動畫觸發(fā)時機
使用 @scroll-timeline 實現(xiàn)各類效果
@scroll-timeline 的實驗室特性與特性檢測
特性檢測
最后
首頁 web前端 css教程 深入了解CSS動畫新特性:@scroll-timeline

深入了解CSS動畫新特性:@scroll-timeline

Mar 18, 2022 am 10:55 AM
css 動畫 新特性

在之前的文章《2022年你值得了解的幾個CSS新特性(收藏學習)》中帶大家簡單介紹了幾個CSS新特性,今天帶大家深入了解其中的一個新特性(動畫殺手锏):@scroll-timeline,希望對大家有所幫助!

深入了解CSS動畫新特性:@scroll-timeline

在 CSS 規(guī)范 Scroll-linked Animations 中,推出了一個劃時代的 CSS 功能。也就是 -- The @scroll-timeline at-rule,直譯過來就是滾動時間線。

本文,就將帶大家一探究竟,從入門到學會使用 CSS @scroll-timeline。(推薦學習:css視頻教程

何為 @scroll-timeline 滾動時間線?

什么是 @scroll-timeline 滾動時間線呢?

@scroll-timeline 能夠設定一個動畫的開始和結(jié)束由滾動容器內(nèi)的滾動進度決定,而不是由時間決定。

意思是,我們可以定義一個動畫效果,該動畫的開始和結(jié)束可以通過容器的滾動來進行控制。

示意 DEMO

再系統(tǒng)性學習語法之前,我們通過一個 DEMO,簡單了解一下它的用法:

我們首先實現(xiàn)一個簡單的字體 F 旋轉(zhuǎn)動畫

<div id="g-box">F</div>
#g-box {
    animation-name: rotate;
    animation-duration: 3s;
    animation-direction: alternate;
    animation-easing-function: linear;
}
@keyframes rotate {
    0% {
        transform: rotate(0);
    }
    100% {
        transform: rotate(360deg);
    }
}

正常而言,它是這樣一個簡單的動畫:

1.gif

接下來,我們把這個動畫和 @scroll-timeline 相結(jié)合,需要把它放置到一個可滾動的容器中:

<div id="g-box">F</div>
#g-content {
    width: 300px;
    height: 170vh;
    background: #999;
}
#g-box {
    font-size: 150px;
    margin: 70vh auto 0;
    animation-name: rotate;
    animation-duration: 3s;
    animation-direction: alternate;
    animation-easing-function: linear;
    animation-timeline: box-rotate;
}
@keyframes rotate {
    0% {
        transform: rotate(0);
    }
    100% {
        transform: rotate(360deg);
    }
}
@scroll-timeline box-rotate {
    source: selector("#g-content");
}

這里,我們實現(xiàn)了一個可滾動容器 #g-content,它的高度是 170vh,也就是可視界面高度的 1.7 倍,并且把 #g-box 容器放置在一個距離頂部 70vh 高度的地方:

2.gif

有意思的來了,我們設置的旋轉(zhuǎn)動畫不會自動開始,只有當我們向下滾動的時候,動畫才會開始進行,實際效果 Gif:

3.gif

CodePen Demo -- @scroll-timeline Demo

https://codepen.io/Chokcoco/pen/JjOZMaQ

看到這里,大家應該能夠理解 @scroll-timeline 的作用及含義了,它賦予了 CSS 能夠基于滾動條的滾動去控制動畫行進的能力! Amazing??!

@scroll-timeline 語法介紹

接下來,我們先緩一緩,簡單看一看 @scroll-timeline 的語法。

使用 @scroll-timeline,最核心的就是需要定義一個 @scroll-timeline 規(guī)則:

@scroll-timeline moveTimeline {
  source: selector("#g-content");
  orientation: vertical;
  scroll-offsets: 0px, 500px;
}

其中:

  • source:綁定觸發(fā)滾動動畫的滾動容器
    • source: auto:綁定到 Document,也就是全局 Windows 對象
    • source: selector("id-selector"),通過 selector(),內(nèi)置一個 #id 選擇器,選取一個可滾動容器
    • source: none:不指的滾動容器
  • orientation:設定滾動時間線的方向
    • orientation: auto:默認為 vertical,也就是豎直方向的滾動
    • orientation: vertical:豎直方向的滾動
    • orientation: horizontal:水平方向的滾動
    • orientation: block:不太常用,使用沿塊軸的滾動位置,符合書寫模式和方向性
    • orientation: inline:不太常用,使用沿內(nèi)聯(lián)軸的滾動位置,符合書寫模式和方向性
  • scroll-offsets:滾動時間線的核心,設定在滾動的什么階段,觸發(fā)動畫,可通過三種方式之一進行設置:
    • scroll-offsets: none 這意味著沒有 scroll-offset 指定。
    • 由逗號分隔的 length-percentage 值列表確定。每個值都映射到animation-duration。例如,如果 ananimation-duration 設置為 2s 且滾動偏移量為 0px, 30px, 100px,則在 1s 時,滾動偏移量將為 30px。
    • 第三種確定滾動偏移量的方法是使用元素偏移量。這意味著可以指定頁面內(nèi)的元素,其位置決定了滾動時間線以及要使用這些元素的哪個邊緣。指定元素是使用 selector() 函數(shù)完成的,該函數(shù)接收元素的 id。邊緣由關(guān)鍵字 start 或確定 end??蛇x的閾值的 0–1 可用于表示元素滾動中預期可見的百分比。

scroll-offsets 的理解會比較困難,我們稍后詳述。

在設定了一個 @scroll-timeline 之后,我們只需要將它和動畫綁定起來即可,通過 animation-timeline

@scroll-timeline moveTimeline {
  source: selector("#g-content");
  orientation: vertical;
  scroll-offsets: 0px, 500px;
}
div {
    animation-name: move;
    animation-duration: 3s;
    animation-timeline: moveTimeline;
}
@keyframes move{
    0% {
        transform: translate(0, 0);
    }
    100% {
        transform: translate(100%, 0);
    }
}

使用 @scroll-timeline 實現(xiàn)滾動進度指示器

之前在 不可思議的純 CSS 滾動進度條效果 一文中,我們介紹了一種使用漸變實現(xiàn)的純 CSS 滾動進度指示器效果:

4.gif

該方法有些小小的瑕疵。其中一個就是當滾動距離太短的時候,進度條右側(cè)會有明顯的斜邊效果。

而有了 @scroll-timeline 之后,我們終于可以將滾動和動畫這兩個元素綁定起來,再實現(xiàn)滾動進度指示器,就已經(jīng)非常輕松了:

<div id="g-container">
    <p>...文本內(nèi)容...</p>
</div>
#g-container {
    width: 100vw;
}
#g-container::before {
    content: "";
    position: fixed;
    height: 5px;
    left: 0;
    top: 0;
    right: 0;
    background: #ffc107;
    animation-name: scale;
    animation-duration: 1s;
    animation-fill-mode: forwards;
    animation-timeline: box-rotate;
    transform-origin: 0 50%;
}

@keyframes scale {
    0% {
        transform: scaleX(0);
    }
    100% {
        transform: scaleX(1);
    }
}
@scroll-timeline box-rotate {
    source: auto;
    orientation: vertical;
}

1、我們在頁面最上方,通過一個偽元素,實現(xiàn)一個占滿屏幕 100%5px 高的進度條。正常而言是這樣:

5.gif

2、通過設定一個 transform: scaleX(0)transform: scaleX(1) 的動畫,并且將它與 body 的滾動相綁定,即可得到滾動指示器,效果如下:

6.gif

完整的代碼,你可以戳這里:CodePen Demo - 使用 @scroll-timeline 實現(xiàn)滾動進度條

https://codepen.io/Chokcoco/pen/eYeKLMj

使用 scroll-offsets 精確控制動畫觸發(fā)時機

大家可以再看看上面的 Gif 圖,都有一個問題,就是動畫的開始時間都是從滾動一開始就開始了,剛好在滾動結(jié)束時結(jié)束。那么如果我希望動畫在滾動的特定階段觸發(fā),那該怎么辦呢?

這里,就需要借助 scroll-offsets,去更加精確的控制我們的動畫。

在滾動過程中,我們可以將一個元素,劃分為 3 個區(qū)域:

  • 滾動過程中,從上方視野盲區(qū),進入視野
  • 滾動過程中,處于視野中
  • 滾動過程中,從視野中,進入下方視野盲區(qū)

在這里,我們就可以得到兩個邊界,上方邊界,下方邊界:

7.gif

而對于上下兩個邊界,又會有兩種狀態(tài)。以上邊界為例子,會有:

  • 元素剛剛開始進入可視區(qū)
  • 元素完全進入可視區(qū)

對于這兩種狀態(tài),我們用 start 0start 1 表示,同理,下方的邊界也可以用 end 0end 1 表示:

8.gif

這里的 0 和 1 實際表示的是,元素滾動中預期可見的百分比。

有了這些狀態(tài)值,配合 scroll-offsets,我們就可以精確控制滾動動畫的觸發(fā)時間。

我們設定一個從左向右并且伴隨透明度變化的動畫,的看看下面幾種情況:

1、滾動動畫在元素從下方開始出現(xiàn)時開始,完全出現(xiàn)后截止。

動畫運行范圍:end 0 --> end 1

@keyframes move {
    0% {
        transform: translate(-100%, 0);
        opacity: 0;
    }
    100% {
        transform: translate(0, 0);
        opacity: 1;
    }
}
@scroll-timeline box-move {
    source: auto;
    orientation: "vertical";
    scroll-offsets: 
        selector(#g-box) end 0, 
        selector(#g-box) end 1;

    /* Legacy Descriptors Below: */
    start: selector(#g-box) end 0;
    end: selector(#g-box) end 1;
    time-range: 1s;
}
#g-box {
    animation-name: move;
    animation-duration: 3s;
    animation-fill-mode: both;
    animation-timeline: box-move;
}

效果如下:

9.gif

2、滾動動畫在元素從下方完全出現(xiàn)時開始,在滾動到上方即將離開屏幕后截止:

動畫運行范圍:end 1 --> start 1

// ...
@scroll-timeline box-move {
    source: auto;
    orientation: "vertical";
    scroll-offsets: 
        selector(#g-box) end 1, 
        selector(#g-box) start 1;

    /* Legacy Descriptors Below: */
    start: selector(#g-box) end 1;
    end: selector(#g-box) start 1;
    time-range: 1s;
}
// ...

效果如下:

10.gif

3、滾動動畫在元素滾動到上方即將離開屏幕后開始,完全離開屏幕后截止:

動畫運行范圍:start 1 --> start 0

// ...
@scroll-timeline box-move {
    source: auto;
    orientation: "vertical";
    scroll-offsets: 
        selector(#g-box) start 1, 
        selector(#g-box) start 0;

    /* Legacy Descriptors Below: */
    start: selector(#g-box) start 1;
    end: selector(#g-box) start 0;
    time-range: 1s;
}
// ...

效果如下:

11.gif

掌握 scroll-offsets 的用法是靈活運用滾動時間線的關(guān)鍵,當然,在上面你還會看到 start: selector(#g-box) start 1end: selector(#g-box) start 0 這種寫法,這是規(guī)范歷史遺留問題,最新的規(guī)范已經(jīng)使用了 scroll-offsets 去替代 start: end: 的寫法。

把上述 3 種情況放在一起,再比較比較:

12.gif

完整的代碼,你可以戳這里:CodePen Demo - @scroll-timeline Demo | element-based offset

使用 @scroll-timeline 實現(xiàn)各類效果

在能夠掌握 @scroll-timeline 的各個語法之后,我們就可以開始使用它創(chuàng)造各種動畫效果了。

譬如如下的,滾動內(nèi)容不斷劃入:

13.gif

代碼較長,可以戳這里,來自 bramus 的 Codepen CodePen Demo -- Fly-in Contact List (CSS @scroll-timeline version)

https://codepen.io/bramus/pen/bGwJVzg

甚至可以結(jié)合 scroll-snap-type 制作一些全屏滾動的大屏特效動畫:

14.gif

要知道,這在以前,是完全不可能利用純 CSS 實現(xiàn)的。完整的代碼你可以戳這里:CodePen Demo -- CSS Scroll-Timeline Split Screen Carousel

https://codepen.io/Chokcoco/pen/QWOrPdM

簡而言之,任何動畫效果,如今,都可以和滾動相結(jié)合起來,甚至乎是配合 SVG 元素也不例外,這里我還簡單改造了一下之前的一個 SVG 線條動畫:

15.gif

完整的代碼你可以戳這里:CodePen Demo -- SVG Text Line Effect | Scroll Timeline

https://codepen.io/Chokcoco/pen/wvPxbRm

@scroll-timeline 的實驗室特性與特性檢測

@scroll-timeline 雖好,目前仍處于實驗室特性時間,Chrome 從 85 版本開始支持,但是默認是關(guān)閉的。

兼容性如下(2022-03-07):

16.gif

在最新的 chrome、Edge、Opera 可以通過瀏覽器配置開啟該特性,Chrome 下開啟該特性需要:

  • 瀏覽器 URL 框輸入 chrome://flags

  • 開啟 #enable-experimental-web-platform-features

美酒雖好,但是離完全能用,瀏覽器大規(guī)模支持還需要等待一會,給時間一點時間吧!

特性檢測

基于目前的兼容性問題,我們可以通過瀏覽器的特性檢測 @supports 語法,來漸進增強使用該功能。

特性檢測的語法也非常簡單:

@supports (animation-timeline: works) {
    @scroll-timeline list-item-1 {
	source: selector(#list-view);
	start: selector(#list-item-1) end 0;
	end: selector(#list-item-1) end 1;
        scroll-offsets:
            selector(#list-item-1) end 0,
            selector(#list-item-1) end 1
        ;
	time-range: 1s;
    }
    // ...
}

通過 @supports (animation-timeline: works) {} 可以判斷瀏覽器是否支持 @scroll-timeline。

最后

目前關(guān)于 @scroll-timeline 的相關(guān)介紹還非常少,但是它確是能夠改變 CSS 動畫的一個非常大的革新。隨著兼容性的逐漸普及,未來勢必會在 CSS 中占據(jù)一席之地。

本文到此結(jié)束,希望對你有幫助 :)

(學習視頻分享:web前端

以上是深入了解CSS動畫新特性:@scroll-timeline的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
如何用PHP搭建社交分享功能 PHP分享接口集成實戰(zhàn) 如何用PHP搭建社交分享功能 PHP分享接口集成實戰(zhàn) Jul 25, 2025 pm 08:51 PM

在PHP中搭建社交分享功能的核心方法是通過動態(tài)生成符合各平臺要求的分享鏈接。1.首先獲取當前頁面或指定的URL及文章信息;2.使用urlencode對參數(shù)進行編碼;3.根據(jù)各平臺協(xié)議拼接生成分享鏈接;4.在前端展示鏈接供用戶點擊分享;5.動態(tài)生成頁面OG標簽優(yōu)化分享內(nèi)容展示;6.務必對用戶輸入進行轉(zhuǎn)義以防止XSS攻擊。該方法無需復雜認證,維護成本低,適用于大多數(shù)內(nèi)容分享需求。

PHP打造博客評論系統(tǒng)變現(xiàn) PHP評論審核與防刷策略 PHP打造博客評論系統(tǒng)變現(xiàn) PHP評論審核與防刷策略 Jul 25, 2025 pm 08:27 PM

1.評論系統(tǒng)商業(yè)價值最大化需結(jié)合原生廣告精準投放、用戶付費增值服務(如上傳圖片、評論置頂)、基于評論質(zhì)量的影響力激勵機制及合規(guī)匿名數(shù)據(jù)洞察變現(xiàn);2.審核策略應采用前置審核 動態(tài)關(guān)鍵詞過濾 用戶舉報機制組合,輔以評論質(zhì)量評分實現(xiàn)內(nèi)容分級曝光;3.防刷需構(gòu)建多層防御:reCAPTCHAv3無感驗證、Honeypot蜜罐字段識別機器人、IP與時間戳頻率限制阻止灌水、內(nèi)容模式識別標記可疑評論,持續(xù)迭代應對攻擊。

什么是常見的CSS瀏覽器不一致? 什么是常見的CSS瀏覽器不一致? Jul 26, 2025 am 07:04 AM

不同瀏覽器對CSS解析存在差異,導致顯示效果不一致,主要包括默認樣式差異、盒模型計算方式、Flexbox和Grid布局支持程度及某些CSS屬性行為不一致。1.默認樣式處理不一致,解決方法是使用CSSReset或Normalize.css統(tǒng)一初始樣式;2.舊版IE的盒模型計算方式不同,建議統(tǒng)一使用box-sizing:border-box;3.Flexbox和Grid在邊緣情況或舊版本中表現(xiàn)有差異,應多測試并使用Autoprefixer;4.某些CSS屬性行為不一致,需查閱CanIuse并提供降級

如何用Mac搭建PHP Nginx環(huán)境 MacOS配置Nginx與PHP服務組合 如何用Mac搭建PHP Nginx環(huán)境 MacOS配置Nginx與PHP服務組合 Jul 25, 2025 pm 08:24 PM

Homebrew在Mac環(huán)境搭建中的核心作用是簡化軟件安裝與管理。1.Homebrew自動處理依賴關(guān)系,將復雜的編譯安裝流程封裝為簡單命令;2.提供統(tǒng)一的軟件包生態(tài),確保軟件安裝位置與配置標準化;3.集成服務管理功能,通過brewservices可便捷啟動、停止服務;4.便于軟件升級與維護,提升系統(tǒng)安全性與功能性。

描述'垂直align”屬性及其典型用例 描述'垂直align”屬性及其典型用例 Jul 26, 2025 am 07:35 AM

1.ItAdjustSelementsLikeImagesRikeImagesOrformInputswithIntExtLineSustLineSlineSlineSlineSlikeLikeLikeBaseline,中間,Super,Super,Super和Sub.2.intablebecells,ItControlScontentalStalteNtalmscontentalMedwithThtop,Middle,Middle,Midder,Midder,經(jīng)常

什么是口音色的物業(yè)? 什么是口音色的物業(yè)? Jul 26, 2025 am 09:25 AM

accent-color是CSS中用于自定義復選框、單選按鈕和滑塊等表單元素高亮顏色的屬性;1.它直接改變表單控件選中狀態(tài)的默認顏色,如將復選框的藍色勾選標記改為紅色;2.支持的元素包括type="checkbox"、type="radio"和type="range"的輸入框;3.使用accent-color可避免復雜的自定義樣式和額外DOM結(jié)構(gòu),保持原生可訪問性;4.現(xiàn)代瀏覽器普遍支持,舊瀏覽器需降級處理;5.設置accent-col

如何將SCSS編譯到CSS? 如何將SCSS編譯到CSS? Jul 27, 2025 am 01:58 AM

installdartsassvianpmafterinstallingnode.jsusingnpminstall-gsass.2.compilescsstocssssusingthecommandSassInput.scsssoutput.css.3。 useass - watchinput.scssoutput.csstoauto-compileonsave.4.watchentirefolderswithsass-watchscss:css.5.usepartialswith_prefixfo

如何更改CSS中的文本顏色? 如何更改CSS中的文本顏色? Jul 27, 2025 am 04:25 AM

要改變CSS中文本顏色,需使用color屬性;1.使用color屬性可設置文本前景色,支持顏色名稱(如red)、十六進制碼(如#ff0000)、RGB值(如rgb(255,0,0))、HSL值(如hsl(0,100%,50%))以及帶透明度的RGBA或HSLA(如rgba(255,0,0,0.5));2.可將顏色應用于包含文本的任何元素,如h1至h6標題、段落p、鏈接a(需注意a:link、a:visited、a:hover、a:active不同狀態(tài)的顏色設置)、按鈕、div、span等;3.最

See all articles