亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

如何反轉CSS中的貝塞爾曲線的實現方法

2024-07-11 09:00:03
字體:
來源:轉載
供稿:網友

首先來看一看我之前寫的一個CSS輪播動畫效果,為了讓切換時動畫的過渡更加的平滑我在animation-timing-function屬性中并沒有使用CSS提供的各種關鍵詞,而使用了cubic-bezier(貝塞爾)函數。

貝塞爾函數乍一看會讓人困惑摸不著頭腦,但如果使用得當,它可以為動畫的用戶體驗增添一種更棒的感覺。

在構建這個輪播動畫的時候,我意識到當我給一頁添加了顯示的貝塞爾函數時,它前一頁隱藏的貝塞爾函數則是反向的。我覺得我們分享這篇文章的內容是非常值得的,因為創建一個貝塞爾曲線并反轉它可能看起來很棘手,但實際上非常的簡單。

了解基礎的easing

首先,Easing這個詞用來描述元素動畫在時間線上的加速與減速節奏。我們可以將其繪制成一個圖表,其中x軸是時間,y軸是動畫的進度。linear是沒有加速或減速(一直以相同的速度移動)的圖形,表現在圖上就是一條直線:

非線性的Easing會讓動畫更自然、更逼真。我們可以對CSS中的transition和animation應用各種的easing,我們可以將這些值設置在transition-timing-function或者animation-timing-function屬性上??偣灿形鍌€關鍵字可以設置:

  • linear – 上面已經介紹了
  • ease-in – 動畫開始時很慢,并隨著它的進行而加速。
  • ease-out – 動畫開始很快,最后減速。
  • ease-in-out – 動畫開始緩慢,中間加速,最后減速。
  • ease – 默認值,與ease-in-out的動畫過程相反。

了解cubic-bezier

如果上面介紹的關鍵字值都不適合我們的動畫,我們可以使用cubic-bezier貝塞爾函數創建自定義的曲線。下面是一個例子:

.my-element {  animation-name: slide;  animation-duration: 3s;  animation-timing-function: cubic-bezier(0.45, 0.25, 0.60, 0.95);}

我們可以將這些屬性簡寫為一個,如下所示:

.my-element {  animation: slide 3s cubic-bezier(0.45, 0.25, 0.60, 0.95);}

你會注意到cubic-bezier貝塞爾函數有四個值。這四個值是繪制曲線所需的兩對坐標。這些坐標代表什么意思呢?如果你使用過Illustrator,那么控制曲線大小和方向的向量點對你來說就會很熟悉。這就是我們用cubic-bezier貝塞爾函數繪制曲線所必須的點。

我們并不需要知道貝塞爾曲線背后的所有數學知識。因為有大佬為我們創建了方便的工具,例如LeaVerou的cubic-bezier.com,這個網站中我們可以可視化的創建一條貝塞爾曲線并復制它的坐標點值。我的輪播效果的貝塞爾曲線就是用這個工具創建的,它看起來是這樣的:

在這里,可以看到我們需要的兩個點:cubic-bezier(x1, y1, x2, y2)。

在正反兩個方向上應用easing

上面的輪播圖中應用了正反兩個方向的動畫 - 單擊左箭頭時,當前項目向右滑出視圖,同時下一個項目向左滑入;如果點擊右箭頭,就會發生相反的情況。我最初的假設是,可以簡單地反轉動畫使項目以相反方向滑出,如下所示:

.my-element--reversed {  animation: slide 3s cubic-bezier(0.45, 0.25, 0.60, 0.95) reverse;}

這里有一個問題:給animation添加reverse也反轉了easing曲線!所以,現在我的動畫在一個方向看起來很好,但在反方向上是不對的。

下面的演示中,第一個框顯示正方向的動畫,第二個框顯示添加reverse后的情況。

你可以看到這兩個動畫的感覺完全不一樣。第一個盒子在開始加速,并且隨著動畫的進展緩慢地減速,而第二個盒子開始時相當緩慢,然后在停止之前有一個加速的過程。

我們有兩種方法來解決這個問題:

  • 創建一個新的keyframe animation來顯示動畫,然后設置為相同的easing。對于簡單的動畫這樣設置無可厚非,但是如果遇到復雜的動畫該怎么辦呢?創建反向的動畫需要做更多的工作,而且很容易出錯。
  • 我們可以使用相同的keyframe animation(并設置animation-direction:reverse)并反轉貝塞爾曲線,這樣就實現了在正反兩個方向上使用同一個easing的效果。這種方法并不難。

反轉貝塞爾曲線,對應在坐標軸中就是將整體圖形旋轉180度:

通過簡單的數學計算就可以得到反轉后的點坐標,具體方法是:交換兩個坐標點,并將每個值都用1減去。

例如,正方向的坐標是:x1, y1, x2, y2

那么,反方向的坐標就通過下面的公式得出:(1 - x2), (1 - y2), (1 - x1), (1 - y1)

在下面的演示中,第三個框是我們需要的效果:元素向相反的方向滑動,但是它與正方向的動畫曲線是一樣的。

我們來看看如何計算反向的貝塞爾曲線。

用CSS自定義屬性來計算反向曲線

我們可以使用CSS自定義屬來計算新的曲線!首先將每個值賦給一個變量:

:root {  --x1: 0.45;  --y1: 0.25;  --x2: 0.6;  --y2: 0.95;    --originalCurve: cubic-bezier(var(--x1), var(--y1), var(--x2), var(--y2));}

然后我們可以使用這些變量來計算新值:

:root {  --reversedCurve: cubic-bezier(calc(1 - var(--x2)), calc(1 - var(--y2)), calc(1 - var(--x1)), calc(1 - var(--y1)));}

現在,如果我們對第一組變量做任何的更改,反向曲線點將會被自動計算出來。為了在檢查和調試代碼時更容易發現問題,我喜歡將這些新值分配到它們自己的變量中:

:root {  /* 正向原始值 */  --x1: 0.45;  --y1: 0.25;  --x2: 0.6;  --y2: 0.95;    --originalCurve: cubic-bezier(var(--x1), var(--y1), var(--x2), var(--y2));    /* 反向計算值 */  --x1-r: calc(1 - var(--x2));  --y1-r: calc(1 - var(--y2));  --x2-r: calc(1 - var(--x1));  --y2-r: calc(1 - var(--y1));    --reversedCurve: cubic-bezier(var(--x1-r), var(--y1-r), var(--x2-r), var(--y2-r));}

現在剩下的就是將新的曲線應用到反向動畫中:

.my-element--reversed {  animation: slide 3s var(--reversedCurve) reverse;}

為了更直觀并切可視化的做到這些,我創建了一個小工具來計算一個貝塞爾曲線的反向值。輸入原始坐標值就可以自動獲得反向曲線的值: Reverse cubic-bezier工具

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频999| 国产精品揄拍500视频| 美女撒尿一区二区三区| 91香蕉亚洲精品| 久久久国产一区二区三区| 欧美成年人在线观看| 黑人巨大精品欧美一区二区| 欧美激情乱人伦一区| 97视频免费在线观看| 久久久久亚洲精品国产| 91色琪琪电影亚洲精品久久| 97精品在线视频| 久久好看免费视频| 热久久免费视频精品| 欧美福利视频在线| 国产精品高潮在线| 国产大片精品免费永久看nba| 日韩最新在线视频| 亚洲欧美日韩第一区| 免费不卡欧美自拍视频| 一区二区三欧美| 91久热免费在线视频| 亚洲精品美女网站| 欧美激情在线狂野欧美精品| 亚洲视频在线播放| 红桃视频成人在线观看| 久久人人爽人人爽人人片av高清| 亚洲美女av在线| 在线播放日韩专区| 日韩精品在线观看视频| 精品久久久久久中文字幕| 久久视频在线看| 国产成人精品一区二区在线| 亚洲国产免费av| **欧美日韩vr在线| 亚洲精品电影在线观看| 裸体女人亚洲精品一区| 精品国产视频在线| 国产综合视频在线观看| 国产成人在线一区| 日本精品一区二区三区在线播放视频| 中日韩午夜理伦电影免费| 国模叶桐国产精品一区| 国产精品久久久久久久美男| 久久久精品一区| 欧美xxxx做受欧美.88| 亚洲视频在线视频| 欧美日本啪啪无遮挡网站| 亚洲日本中文字幕免费在线不卡| 懂色av中文一区二区三区天美| 亚洲综合av影视| 久久久久久香蕉网| 精品无人区太爽高潮在线播放| 日韩精品有码在线观看| 欧美性生交xxxxxdddd| 国产精品96久久久久久又黄又硬| 91高清免费在线观看| 亚洲国产精品久久久久秋霞不卡| 国产精品久久久久7777婷婷| 亚洲男人的天堂在线播放| 91a在线视频| 欧美大人香蕉在线| 欧美最猛性xxxxx(亚洲精品)| 日韩av在线免费看| 日韩欧美国产骚| 91在线国产电影| 成人夜晚看av| 国产精品久久久久久网站| 国产精品美女久久久久久免费| 午夜精品在线视频| 欧美大片在线看| 国产精品日韩在线播放| 欧美激情一区二区三级高清视频| 国产精品美女久久久久av超清| 日韩成人在线播放| 精品亚洲一区二区| 一区二区三区四区在线观看视频| 日韩精品免费观看| 欧美另类高清videos| 日韩美女毛茸茸| 欧美成人精品三级在线观看| 精品性高朝久久久久久久| 国产精品丝袜一区二区三区| 97久久超碰福利国产精品…| 国产精品视频中文字幕91| 久久久这里只有精品视频| 国产精品99久久久久久人| 69久久夜色精品国产69乱青草| 亚洲老司机av| 亚洲香蕉在线观看| 成人免费xxxxx在线观看| 精品性高朝久久久久久久| 欧美洲成人男女午夜视频| 国产成人精品视频在线观看| 亚洲国产精品嫩草影院久久| 欧美一区二区视频97| 亚洲日本aⅴ片在线观看香蕉| 欧美性资源免费| 亚洲欧美日韩一区二区三区在线| 尤物九九久久国产精品的特点| 亚洲精品电影在线| 2021久久精品国产99国产精品| 久久91亚洲精品中文字幕| 青青精品视频播放| 欧美亚洲一级片| 国产91色在线|| 91精品国产高清自在线看超| 中文字幕精品久久| 日韩av网站导航| 国自在线精品视频| 亚洲欧洲日韩国产| 国产91精品久久久久| 亚洲国产美女久久久久| 久久国产精品久久久久久久久久| 成人国产精品久久久| 欧美日韩精品在线| 伊人久久男人天堂| 97av在线影院| 日韩免费观看网站| 日韩中文字幕视频在线观看| 亚洲视频专区在线| 伊人伊成久久人综合网站| 亚洲伊人成综合成人网| 中文字幕亚洲色图| 日本午夜人人精品| 国产区亚洲区欧美区| 亚洲欧美日韩精品久久奇米色影视| 精品久久久久久| 亚洲韩国欧洲国产日产av| 国产精品18久久久久久首页狼| 欧美激情伊人电影| 国产精品18久久久久久首页狼| 欧洲精品毛片网站| 日韩在线播放视频| 久久久成人精品视频| 欧美成人激情在线| 国产亚洲综合久久| 中文欧美在线视频| 欧美日韩一区二区三区在线免费观看| 亚洲美女喷白浆| 欧美成人免费网| 性欧美暴力猛交69hd| 色噜噜狠狠狠综合曰曰曰| 日韩美女激情视频| 最近2019中文字幕在线高清| 成人激情视频在线播放| 久久乐国产精品| 欧美在线视频在线播放完整版免费观看| 亚洲国产精品热久久| 国产香蕉97碰碰久久人人| 亚洲欧美国产精品专区久久| 欧美中文字幕视频| 国产精品永久免费| 在线观看国产精品91| 亚洲欧洲一区二区三区在线观看| 7777免费精品视频| 欧美日韩美女视频| 国产成人精品视频在线观看| 欧美国产高跟鞋裸体秀xxxhd| 国产精品成人播放| 欧美性生活大片免费观看网址| 在线成人免费网站| 性色av一区二区三区红粉影视| 久久久电影免费观看完整版|