日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

動畫進(jìn)階 | CSS 也能實(shí)現(xiàn)完美的文字輪播與圖片輪播效果

來源: 責(zé)編: 時間:2024-03-20 17:26:30 233觀看
導(dǎo)讀今天,分享一個實(shí)際業(yè)務(wù)中能夠用得上的動畫技巧。巧用逐幀動畫,配合補(bǔ)間動畫實(shí)現(xiàn)一個無限循環(huán)的輪播效果,像是這樣:看到上述示意圖,有同學(xué)不禁會發(fā)問,這不是個非常簡單的位移動畫么?我們來簡單分析分析,從表面上看,確實(shí)好像只有

N7x28資訊網(wǎng)——每日最新資訊28at.com

今天,分享一個實(shí)際業(yè)務(wù)中能夠用得上的動畫技巧。N7x28資訊網(wǎng)——每日最新資訊28at.com

巧用逐幀動畫,配合補(bǔ)間動畫實(shí)現(xiàn)一個無限循環(huán)的輪播效果,像是這樣:N7x28資訊網(wǎng)——每日最新資訊28at.com

N7x28資訊網(wǎng)——每日最新資訊28at.com

看到上述示意圖,有同學(xué)不禁會發(fā)問,這不是個非常簡單的位移動畫么?N7x28資訊網(wǎng)——每日最新資訊28at.com

我們來簡單分析分析,從表面上看,確實(shí)好像只有元素的 transform: translate() 在位移,但是注意,這里有兩個難點(diǎn):N7x28資訊網(wǎng)——每日最新資訊28at.com

  • 這是個無限輪播的效果,我們的動畫需要支持任意多個元素的無限輪播切換。
  • 因?yàn)槭禽啿?,所以,運(yùn)行到最后一個的時候,需要動畫切到第一個元素。

到這里,你可以暫停思考一下,如果有 20 個元素,需要進(jìn)行類似的無限輪播播報,使用 CSS 實(shí)現(xiàn),你會怎么去做呢?N7x28資訊網(wǎng)——每日最新資訊28at.com

逐幀動畫控制整體切換

首先,我需要利用到逐幀動畫效果,也被稱為步驟緩動函數(shù),利用的是 animation-timing-function 中,的 steps,語法如下:N7x28資訊網(wǎng)——每日最新資訊28at.com

{    /* Keyword values */    animation-timing-function: step-start;    animation-timing-function: step-end;    /* Function values */    animation-timing-function: steps(6, start)    animation-timing-function: steps(4, end);}

如果你對 steps 的語法還不是特別了解,強(qiáng)烈建議你先看看我的這篇文章 -- 深入淺出 CSS 動畫[1],它對理解本文起著至關(guān)重要的作用。N7x28資訊網(wǎng)——每日最新資訊28at.com

好的,還是文章以開頭的例子,假設(shè)我們存在這樣 HTML 結(jié)構(gòu):N7x28資訊網(wǎng)——每日最新資訊28at.com

<div class="g-container">  <ul>    <li>Lorem ipsum 1111111</li>    <li>Lorem ipsum 2222222</li>    <li>Lorem ipsum 3333333</li>    <li>Lorem ipsum 4444444</li>    <li>Lorem ipsum 5555555</li>    <li>Lorem ipsum 6666666</li>  </ul></div>

首先,我們實(shí)現(xiàn)這樣一個簡單的布局:N7x28資訊網(wǎng)——每日最新資訊28at.com

N7x28資訊網(wǎng)——每日最新資訊28at.com

在這里,要實(shí)現(xiàn)輪播效果,并且是任意個數(shù),我們可以借助 animation-timing-function: steps():N7x28資訊網(wǎng)——每日最新資訊28at.com

:root {  // 輪播的個數(shù)  --s: 6;  // 單個 li 容器的高度  --h: 36;  // 單次動畫的時長  --speed: 1.5s;}.g-container {  width: 300px;  height: calc(var(--h) * 1px);}ul {  display: flex;  flex-direction: column;  animation: move calc(var(--speed) * var(--s)) steps(var(--s)) infinite;}ul li {  width: 100%;}@keyframes move {  0% {    transform: translate(0, 0);  }  100% {    transform: translate(0, calc(var(--s) * var(--h) * -1px));  }}

別看到上述有幾個 CSS 變量就慌了,其實(shí)很好理解:N7x28資訊網(wǎng)——每日最新資訊28at.com

  • calc(var(--speed) * var(--s)):單次動畫的耗時 * 輪播的個數(shù),也就是總動畫時長。
  • steps(var(--s)) 就是逐幀動畫的幀數(shù),這里也就是 steps(6),很好理解。
  • calc(var(--s) * var(--h) * -1px)) 單個 li 容器的高度 * 輪播的個數(shù),其實(shí)就是 ul 的總體高度,用于設(shè)置逐幀動畫的終點(diǎn)值。

上述的效果,實(shí)際如下:N7x28資訊網(wǎng)——每日最新資訊28at.com

N7x28資訊網(wǎng)——每日最新資訊28at.com

如果給容器添加上 overflow: hidden,就是這樣的效果:N7x28資訊網(wǎng)——每日最新資訊28at.com

N7x28資訊網(wǎng)——每日最新資訊28at.com

這樣,我們就得到了整體的結(jié)構(gòu),至少,整個效果是循環(huán)的。N7x28資訊網(wǎng)——每日最新資訊28at.com

但是由于只是逐幀動畫,所以只能看到切換,但是每一幀之間,沒有過渡動畫效果。所以,接下來,我們還得引入補(bǔ)間動畫。N7x28資訊網(wǎng)——每日最新資訊28at.com

利用補(bǔ)間動畫實(shí)現(xiàn)兩組數(shù)據(jù)間的切換

我們需要利用補(bǔ)間動畫,實(shí)現(xiàn)動態(tài)的切換效果。N7x28資訊網(wǎng)——每日最新資訊28at.com

這一步,其實(shí)也非常簡單,我們要做的,就是將一組數(shù)據(jù),利用 transform,從狀態(tài) A 位移到 狀態(tài) B。N7x28資訊網(wǎng)——每日最新資訊28at.com

單獨(dú)拿出一個來演示的話,大致的代碼如下:N7x28資訊網(wǎng)——每日最新資訊28at.com

<div class="g-container">  <ul style="--s: 6">    <li>Lorem ipsum 1111111</li>    <li>Lorem ipsum 2222222</li>    <li>Lorem ipsum 3333333</li>    <li>Lorem ipsum 4444444</li>    <li>Lorem ipsum 5555555</li>    <li>Lorem ipsum 6666666</li>  </ul></div>
:root {  --h: 36;  --speed: 1.2s;}ul li {  height: 36px;  animation: liMove calc(var(--speed)) infinite;}@keyframes liMove {  0% {    transform: translate(0, 0);  }  80%,  100%  {    transform: translate(0, -36px);  }}

非常簡單的一個動畫:N7x28資訊網(wǎng)——每日最新資訊28at.com

N7x28資訊網(wǎng)——每日最新資訊28at.com

bgg1N7x28資訊網(wǎng)——每日最新資訊28at.com

基于上述效果,我們?nèi)绻岩婚_始提到的 逐幀動畫 和這里這個 補(bǔ)間動畫 結(jié)合一下,ul 的整體移動,和 li 的 單個移動疊在在一起:N7x28資訊網(wǎng)——每日最新資訊28at.com

:root {  // 輪播的個數(shù)  --s: 6;  // 單個 li 容器的高度  --h: 36;  // 單次動畫的時長  --speed: 1.5s;}.g-container {  width: 300px;  height: calc(var(--h) * 1px);}ul {  display: flex;  flex-direction: column;  animation: move calc(var(--speed) * var(--s)) steps(var(--s)) infinite;}ul li {  width: 100%;  animation: liMove calc(var(--speed)) infinite;}@keyframes move {  0% {    transform: translate(0, 0);  }  100% {    transform: translate(0, calc(var(--s) * var(--h) * -1px));  }}@keyframes liMove {  0% {    transform: translate(0, 0);  }  80%,  100%  {    transform: translate(0, calc(var(--h) * -1px));  }}

就能得到這樣一個效果:N7x28資訊網(wǎng)——每日最新資訊28at.com

N7x28資訊網(wǎng)——每日最新資訊28at.com

Wow,神奇的化學(xué)反應(yīng)產(chǎn)生了!基于 逐幀動畫 和 補(bǔ)間動畫 的結(jié)合,我們幾乎實(shí)現(xiàn)了一個輪播效果。N7x28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然,有一點(diǎn)瑕疵,可以看到,最后一組數(shù)據(jù),是從第六組數(shù)據(jù) transform 移動向了一組空數(shù)據(jù):N7x28資訊網(wǎng)——每日最新資訊28at.com

N7x28資訊網(wǎng)——每日最新資訊28at.com

末尾填充頭部第一組數(shù)據(jù)

實(shí)際開發(fā)過輪播的同學(xué)肯定知道,這里,其實(shí)也很好處理,我們只需要在末尾,補(bǔ)一組頭部的第一個數(shù)據(jù)即可:N7x28資訊網(wǎng)——每日最新資訊28at.com

改造下我們的 HTML:N7x28資訊網(wǎng)——每日最新資訊28at.com

<div class="g-container">  <ul>    <li>Lorem ipsum 1111111</li>    <li>Lorem ipsum 2222222</li>    <li>Lorem ipsum 3333333</li>    <li>Lorem ipsum 4444444</li>    <li>Lorem ipsum 5555555</li>    <li>Lorem ipsum 6666666</li>    <!--末尾補(bǔ)一個首條數(shù)據(jù)-->    <li>Lorem ipsum 1111111</li>  </ul></div>

這樣,我們再看看效果:N7x28資訊網(wǎng)——每日最新資訊28at.com

N7x28資訊網(wǎng)——每日最新資訊28at.com

Beautiful!如果你還有所疑惑,我們給容器加上 overflow: hidden,實(shí)際效果如下,通過額外添加的最后一組數(shù)據(jù),我們的整個動畫剛好完美的銜接上,一個完美的輪播效果:N7x28資訊網(wǎng)——每日最新資訊28at.com

N7x28資訊網(wǎng)——每日最新資訊28at.com

完整的代碼,你可以戳這里:CodePen Demo -- Vertical Infinity Loop[2]N7x28資訊網(wǎng)——每日最新資訊28at.com

橫向無限輪播

當(dāng)然,實(shí)現(xiàn)了豎直方向的輪播,橫向的效果也是一樣的。N7x28資訊網(wǎng)——每日最新資訊28at.com

并且,我們可以通過在 HTML 結(jié)構(gòu)中,通過 style 內(nèi)填寫 CSS 變量值,傳入實(shí)際的 li 個數(shù),以達(dá)到根據(jù)不同 li 個數(shù)適配不同動畫:N7x28資訊網(wǎng)——每日最新資訊28at.com

<div class="g-container">  <ul style="--s: 6">    <li>Lorem ipsum 1111111</li>    <li>Lorem ipsum 2222222</li>    <li>Lorem ipsum 3333333</li>    <li>Lorem ipsum 4444444</li>    <li>Lorem ipsum 5555555</li>    <li>Lorem ipsum 6666666</li>    <!--末尾補(bǔ)一個首尾數(shù)據(jù)-->    <li>Lorem ipsum 1111111</li>  </ul></div>

整個動畫的 CSS 代碼基本是一致的,我們只需要改變兩個動畫的 transform 值,從豎直位移,改成水平位移即可:N7x28資訊網(wǎng)——每日最新資訊28at.com

:root {  --w: 300;  --speed: 1.5s;}.g-container {  width: calc(--w * 1px);  overflow: hidden;}ul {  display: flex;  flex-wrap: nowrap;   animation: move calc(var(--speed) * var(--s)) steps(var(--s)) infinite;}ul li {  flex-shrink: 0;  width: 100%;  height: 100%;  animation: liMove calc(var(--speed)) infinite;}@keyframes move {  0% {    transform: translate(0, 0);  }  100% {    transform: translate(calc(var(--s) * var(--w) * -1px), 0);  }}@keyframes liMove {  0% {    transform: translate(0, 0);  }  80%,  100%  {    transform: translate(calc(var(--w) * -1px), 0);  }}

這樣,我們就輕松的轉(zhuǎn)化為了橫向的效果:N7x28資訊網(wǎng)——每日最新資訊28at.com

N7x28資訊網(wǎng)——每日最新資訊28at.com

完整的代碼,你可以戳這里:CodePen Demo -- Horizontal Infinity Loop[3]N7x28資訊網(wǎng)——每日最新資訊28at.com

輪播圖?不在話下

OK,上面的只是文字版的輪播,那如果是圖片呢?N7x28資訊網(wǎng)——每日最新資訊28at.com

沒問題,方法都是一樣的?;谏鲜龅拇a,我們可以輕松地將它修改一下后得到圖片版的輪播效果。N7x28資訊網(wǎng)——每日最新資訊28at.com

代碼都是一樣的,就不再列出來,直接看看效果:N7x28資訊網(wǎng)——每日最新資訊28at.com

N7x28資訊網(wǎng)——每日最新資訊28at.com

N7x28資訊網(wǎng)——每日最新資訊28at.com

完整的代碼,你可以戳這里:CodePen Demo -- Horizontal Image Infinity Loop[4]N7x28資訊網(wǎng)——每日最新資訊28at.com

掌握了這個技巧之后,你可以將它運(yùn)用在非常多只需要簡化版的輪播效果之上。N7x28資訊網(wǎng)——每日最新資訊28at.com

再簡單總結(jié)一下,非常有意思的技巧:N7x28資訊網(wǎng)——每日最新資訊28at.com

  • 利用 逐幀動畫,實(shí)現(xiàn)整體的輪播的循環(huán)效果。
  • 利用 補(bǔ)間動畫,實(shí)現(xiàn)具體的 *狀態(tài)A 向 狀態(tài)B 的動畫效果。
  • 逐幀動畫 配合 補(bǔ)間動畫 構(gòu)成整體輪播的效果。
  • 通過向 HTML 結(jié)構(gòu)末尾補(bǔ)充一組頭部數(shù)據(jù),實(shí)現(xiàn)整體動畫的銜接。
  • 通過 HTML 元素的 style 標(biāo)簽,利用 CSS 變量,填入實(shí)際的參與循環(huán)的 DOM 個數(shù),可以實(shí)現(xiàn) JavaScript 與 CSS 的打通。

最后

OK,本文到此結(jié)束,希望本文對你有所幫助 :)N7x28資訊網(wǎng)——每日最新資訊28at.com

參考資料

[1]深入淺出 CSS 動畫: https://github.com/chokcoco/iCSS/issues/141N7x28資訊網(wǎng)——每日最新資訊28at.com

[2]CodePen Demo -- Vertical Infinity Loop: https://codepen.io/Chokcoco/pen/RwQVByxN7x28資訊網(wǎng)——每日最新資訊28at.com

[3]CodePen Demo -- Horizontal Infinity Loop: https://codepen.io/Chokcoco/pen/JjpNBXYN7x28資訊網(wǎng)——每日最新資訊28at.com

[4]CodePen Demo -- Horizontal Image Infinity Loop: https://codepen.io/Chokcoco/pen/GRQvqgqN7x28資訊網(wǎng)——每日最新資訊28at.com

[5]Github -- iCSS: https://github.com/chokcoco/iCSSN7x28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-78144-0.html動畫進(jìn)階 | CSS 也能實(shí)現(xiàn)完美的文字輪播與圖片輪播效果

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 月之暗面技術(shù)重磅突破:Kimi200萬字上下文窗口內(nèi)測開啟

下一篇: 10 天 996 寫出的語言 - JavaScript

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲你懂的在线视频| 精品69视频一区二区三区| 欧美精品v日韩精品v国产精品| 欧美a级一区| 欧美日韩亚洲高清一区二区| 国产精品久久9| 国外成人免费视频| 91久久国产精品91久久性色| 中国成人亚色综合网站| 性做久久久久久久久| 久久久久久久网| 欧美激情久久久| 欧美精品一区二区三区蜜桃| 国产精品日韩二区| **网站欧美大片在线观看| 99国产麻豆精品| 欧美怡红院视频| 欧美成人免费全部| 国产精品欧美日韩久久| 激情五月婷婷综合| 亚洲视频在线观看| 久热国产精品| 国产精品女主播在线观看| 伊人狠狠色丁香综合尤物| 亚洲小说区图片区| 免费在线观看日韩欧美| 国产精品久久久久影院色老大 | 久久男女视频| 欧美日韩免费视频| 激情五月***国产精品| 亚洲图片激情小说| 欧美xxx在线观看| 国产日韩欧美高清| 一区二区成人精品| 免费成人av在线| 国产欧美一区二区精品性| 99re热精品| 美国三级日本三级久久99| 国产精品视频一区二区三区 | 日韩一级免费| 久久免费午夜影院| 国产精品美女主播在线观看纯欲| 亚洲国产一区二区视频| 欧美伊人久久久久久午夜久久久久| 欧美日韩大片| 亚洲高清不卡一区| 久久黄色小说| 国产精品美女久久久免费| 日韩香蕉视频| 欧美国产日本韩| 一色屋精品亚洲香蕉网站| 欧美夜福利tv在线| 国产精品福利在线| 99精品视频网| 欧美国产日韩视频| 在线电影国产精品| 久久久777| 国产视频欧美视频| 亚洲欧美日韩爽爽影院| 欧美三日本三级三级在线播放| 亚洲国产高清在线| 久久久免费精品视频| 国产日韩欧美综合一区| 亚洲欧美视频一区二区三区| 欧美午夜激情小视频| 99国内精品久久| 欧美—级在线免费片| 亚洲高清av在线| 美女主播一区| 亚洲第一中文字幕在线观看| 久久久久久久一区| 伊人成综合网伊人222| 久久久五月天| 激情av一区| 久久婷婷丁香| 在线看日韩欧美| 玖玖综合伊人| **性色生活片久久毛片| 老司机精品福利视频| 欲香欲色天天天综合和网| 久久人人爽人人爽| 在线观看日韩国产| 欧美成人福利视频| 最新成人av在线| 欧美国产亚洲另类动漫| 亚洲精品日韩精品| 欧美片网站免费| 一二三区精品| 国产精品女人毛片| 欧美一区亚洲二区| 国产综合色产| 麻豆免费精品视频| 亚洲欧洲日产国产综合网| 欧美日韩三区四区| 亚洲永久在线观看| 国产色爱av资源综合区| 久久久人成影片一区二区三区观看| 激情综合色综合久久综合| 麻豆精品一区二区av白丝在线| 最新日韩欧美| 欧美日韩亚洲一区二区三区| 亚洲一区精品电影| 国产一区二区三区在线免费观看| 久久青草久久| 日韩午夜精品| 国产精品三级久久久久久电影| 欧美一区二区三区免费看| 黄色小说综合网站| 欧美国产欧美综合 | 亚洲欧美日韩第一区| 国产亚洲精品bv在线观看| 久久香蕉国产线看观看av| 91久久国产自产拍夜夜嗨| 欧美日韩亚洲系列| 欧美在线视频免费观看| 亚洲国产欧洲综合997久久| 欧美日韩第一页| 先锋影音久久久| 激情亚洲成人| 欧美日韩国产成人| 性刺激综合网| 亚洲国产一二三| 国产精品成人一区二区三区吃奶| 欧美一区二区三区在线播放| 亚洲黄色成人| 国产精品午夜春色av| 久久夜色精品亚洲噜噜国产mv| 日韩网站免费观看| 国产欧美三级| 欧美电影在线| 欧美亚洲日本一区| 亚洲人成人77777线观看| 国产精品系列在线| 欧美 日韩 国产精品免费观看| 亚洲一区欧美| 亚洲第一久久影院| 国产精品美女主播在线观看纯欲| 久久久夜精品| 亚洲天堂成人在线观看| 精品不卡一区二区三区| 欧美体内she精视频| 久久人人九九| 亚洲欧美不卡| 亚洲日本va午夜在线电影| 国产欧美婷婷中文| 欧美美女bbbb| 久久久久青草大香线综合精品| 一区二区高清在线观看| 在线播放亚洲| 国产伦精品一区二区三区免费迷| 欧美电影在线播放| 久久精品99国产精品| 这里只有精品视频在线| 亚洲高清一区二区三区| 国产日韩欧美精品| 欧美日韩日本网| 免费欧美电影| 久久疯狂做爰流白浆xx| 中日韩午夜理伦电影免费| 91久久精品美女高潮| 国内综合精品午夜久久资源| 国产精品久久国产精品99gif | 亚洲在线视频| 亚洲毛片播放| 136国产福利精品导航| 国产日韩欧美精品在线| 欧美日韩在线直播| 欧美国产综合视频| 久久久久久亚洲精品中文字幕 | 欧美一区二区国产| 一本色道久久综合| 亚洲韩日在线| 亚洲大胆人体在线| 国产一区二区久久久| 国产精品人人做人人爽| 欧美日韩三级| 欧美日韩免费高清一区色橹橹| 欧美顶级大胆免费视频| 狂野欧美一区| 久久爱www久久做| 午夜精品久久久久久久99樱桃| 中文高清一区| 99精品国产在热久久下载| 亚洲日本成人网| 亚洲黄色有码视频| 91久久久在线| 亚洲人成7777| 亚洲精品一区二区三区樱花| 亚洲国产中文字幕在线观看| 亚洲国产mv| 亚洲高清久久网| 亚洲高清资源| 最新成人av在线| 亚洲精品黄网在线观看| 亚洲人成精品久久久久| 亚洲福利av| 亚洲日本黄色| 9l国产精品久久久久麻豆| 亚洲免费观看高清完整版在线观看熊 | 亚洲特级片在线| 一区二区三区欧美视频| a4yy欧美一区二区三区| 99精品99| 亚洲天堂黄色|