国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
逐幀動畫控制整體切換
利用補間動畫實現(xiàn)兩組數(shù)據(jù)間的切換
末尾填充頭部第一組數(shù)據(jù)
橫向無限輪播
輪播圖?不在話下
首頁 web前端 css教程 原來利用純CSS也能實現(xiàn)文字輪播與圖片輪播!

原來利用純CSS也能實現(xiàn)文字輪播與圖片輪播!

Jun 10, 2022 pm 01:00 PM
css javascript css3 動畫 前端

怎么制作文字輪播與圖片輪播?大家第一想到的是不是利用js,其實利用純CSS也能實現(xiàn)文字輪播與圖片輪播,下面來看看實現(xiàn)方法,希望對大家有所幫助!

原來利用純CSS也能實現(xiàn)文字輪播與圖片輪播!

今天,分享一個實際業(yè)務中能夠用得上的動畫技巧。【推薦學習:css視頻教程

巧用逐幀動畫,配合補間動畫實現(xiàn)一個無限循環(huán)的輪播效果,像是這樣:

看到上述示意圖,有同學不禁會發(fā)問,這不是個非常簡單的位移動畫么?

我們來簡單分析分析,從表面上看,確實好像只有元素的 transform: translate() 在位移,但是注意,這里有兩個難點:

  • 這是個無限輪播的效果,我們的動畫需要支持任意多個元素的無限輪播切換

  • 因為是輪播,所以,運行到最后一個的時候,需要動畫切到第一個元素

到這里,你可以暫停思考一下,如果有 20 個元素,需要進行類似的無限輪播播報,使用 CSS 實現(xiàn),你會怎么去做呢?

逐幀動畫控制整體切換

首先,我需要利用到逐幀動畫效果,也被稱為步驟緩動函數(shù),利用的是 animation-timing-function 中,的 steps,語法如下:

{
????/*?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 的語法還不是特別了解,強烈建議你先看看我的這篇文章 -- 深入淺出 CSS 動畫,它對理解本文起著至關(guān)重要的作用。

好的,還是文章以開頭的例子,假設(shè)我們存在這樣 HTML 結(jié)構(gòu):

<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>

首先,我們實現(xiàn)這樣一個簡單的布局:

在這里,要實現(xiàn)輪播效果,并且是任意個數(shù),我們可以借助 animation-timing-function: steps()

: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 變量就慌了,其實很好理解:

  • calc(var(--speed) * var(--s)):單次動畫的耗時 * 輪播的個數(shù),也就是總動畫時長

  • steps(var(--s)) 就是逐幀動畫的幀數(shù),這里也就是 steps(6),很好理解

  • calc(var(--s) * var(--h) * -1px)) 單個 li 容器的高度 * 輪播的個數(shù),其實就是 ul 的總體高度,用于設(shè)置逐幀動畫的終點值

上述的效果,實際如下:

如果給容器添加上 overflow: hidden,就是這樣的效果:

這樣,我們就得到了整體的結(jié)構(gòu),至少,整個效果是循環(huán)的。

但是由于只是逐幀動畫,所以只能看到切換,但是每一幀之間,沒有過渡動畫效果。所以,接下來,我們還得引入補間動畫。

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

我們需要利用補間動畫,實現(xiàn)動態(tài)的切換效果。

這一步,其實也非常簡單,我們要做的,就是將一組數(shù)據(jù),利用 transform,從狀態(tài) A 位移到 狀態(tài) B。

單獨拿出一個來演示的話,大致的代碼如下:

<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);
  }
}

非常簡單的一個動畫:

bgg1

基于上述效果,我們?nèi)绻岩婚_始提到的 逐幀動畫 和這里這個 補間動畫 結(jié)合一下,ul 的整體移動,和 li 的 單個移動疊在在一起:

: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));
  }
}

就能得到這樣一個效果:

Wow,神奇的化學反應產(chǎn)生了!基于 逐幀動畫補間動畫 的結(jié)合,我們幾乎實現(xiàn)了一個輪播效果。

當然,有一點瑕疵,可以看到,最后一組數(shù)據(jù),是從第六組數(shù)據(jù) transform 移動向了一組空數(shù)據(jù):

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

實際開發(fā)過輪播的同學肯定知道,這里,其實也很好處理,我們只需要在末尾,補一組頭部的第一個數(shù)據(jù)即可:

改造下我們的 HTML:

<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>
    <!--末尾補一個首條數(shù)據(jù)-->
    <li>Lorem ipsum 1111111</li>
  </ul>
</div>

這樣,我們再看看效果:

Beautiful!如果你還有所疑惑,我們給容器加上 overflow: hidden,實際效果如下,通過額外添加的最后一組數(shù)據(jù),我們的整個動畫剛好完美的銜接上,一個完美的輪播效果:

完整的代碼,你可以戳這里:CodePen Demo -- Vertical Infinity Loop

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

橫向無限輪播

當然,實現(xiàn)了豎直方向的輪播,橫向的效果也是一樣的。

并且,我們可以通過在 HTML 結(jié)構(gòu)中,通過 style 內(nèi)填寫 CSS 變量值,傳入實際的 li 個數(shù),以達到根據(jù)不同 li 個數(shù)適配不同動畫:

<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>
    <!--末尾補一個首尾數(shù)據(jù)-->
    <li>Lorem ipsum 1111111</li>
  </ul>
</div>

整個動畫的 CSS 代碼基本是一致的,我們只需要改變兩個動畫的 transform 值,從豎直位移,改成水平位移即可:

: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)化為了橫向的效果:

完整的代碼,你可以戳這里:CodePen Demo -- Horizontal Infinity Loop

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

輪播圖?不在話下

OK,上面的只是文字版的輪播,那如果是圖片呢?

沒問題,方法都是一樣的。基于上述的代碼,我們可以輕松地將它修改一下后得到圖片版的輪播效果。

代碼都是一樣的,就不再列出來,直接看看效果:

完整的代碼,你可以戳這里:CodePen Demo -- Horizontal Image Infinity Loop

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

掌握了這個技巧之后,你可以將它運用在非常多只需要簡化版的輪播效果之上。

再簡單總結(jié)一下,非常有意思的技巧:

  • 利用 逐幀動畫,實現(xiàn)整體的輪播的循環(huán)效果

  • 利用 補間動畫,實現(xiàn)具體的 狀態(tài)A狀態(tài)B* 的動畫效果

  • 逐幀動畫 配合 補間動畫 構(gòu)成整體輪播的效果

  • 通過向 HTML 結(jié)構(gòu)末尾補充一組頭部數(shù)據(jù),實現(xiàn)整體動畫的銜接

  • 通過 HTML 元素的 style 標簽,利用 CSS 變量,填入實際的參與循環(huán)的 DOM 個數(shù),可以實現(xiàn) JavaScript 與 CSS 的打通

(學習視頻分享:web前端

以上是原來利用純CSS也能實現(xiàn)文字輪播與圖片輪播!的詳細內(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)

什么是'渲染障礙CSS”? 什么是'渲染障礙CSS”? Jun 24, 2025 am 12:42 AM

CSS會阻塞頁面渲染是因為瀏覽器默認將內(nèi)聯(lián)和外部CSS視為關(guān)鍵資源,尤其是使用引入的樣式表、頭部大量內(nèi)聯(lián)CSS以及未優(yōu)化的媒體查詢樣式。1.提取關(guān)鍵CSS并內(nèi)嵌至HTML;2.延遲加載非關(guān)鍵CSS通過JavaScript;3.使用media屬性優(yōu)化加載如打印樣式;4.壓縮合并CSS減少請求。建議使用工具提取關(guān)鍵CSS,結(jié)合rel="preload"異步加載,合理使用media延遲加載,避免過度拆分與復雜腳本控制。

什么是AutoPrefixer,它如何工作? 什么是AutoPrefixer,它如何工作? Jul 02, 2025 am 01:15 AM

Autoprefixer是一個根據(jù)目標瀏覽器范圍自動為CSS屬性添加廠商前綴的工具。1.它解決了手動維護前綴易出錯的問題;2.通過PostCSS插件形式工作,解析CSS、分析需加前綴的屬性、依配置生成代碼;3.使用步驟包括安裝插件、設(shè)置browserslist、在構(gòu)建流程中啟用;4.注意事項有不手動加前綴、保持配置更新、非所有屬性都加前綴、建議配合預處理器使用。

您如何使用CSS對SVG進行動畫動畫? 您如何使用CSS對SVG進行動畫動畫? Jun 30, 2025 am 02:06 AM

AnimatingSVGwithCSSispossibleusingkeyframesforbasicanimationsandtransitionsforinteractiveeffects.1.Use@keyframestodefineanimationstagesforpropertieslikescale,opacity,andcolor.2.ApplytheanimationtoSVGelementssuchas,,orviaCSSclasses.3.Forhoverorstate-b

什么是圓錐級函數(shù)? 什么是圓錐級函數(shù)? Jul 01, 2025 am 01:16 AM

theconic-Gradient()functionIncsscreatesCircularGradientsThatRotateColorStopSaroundAcentralPoint.1.IsidealForPieCharts,ProgressIndicators,colordichers,colorwheels和decorativeBackgrounds.2.itworksbysbysbysbydefindefingincolordefingincolorstopsatspecificains off.

CSS自定義屬性的范圍是什么? CSS自定義屬性的范圍是什么? Jun 25, 2025 am 12:16 AM

CSS自定義屬性的作用域取決于其聲明的上下文,全局變量通常定義在:root中,而局部變量則定義在特定選擇器內(nèi),以便組件化和隔離樣式。例如,定義在.card類中的變量僅對匹配該類的元素及其子元素可用。最佳實踐包括:1.使用:root定義全局變量如主題色;2.在組件內(nèi)部定義局部變量以實現(xiàn)封裝;3.避免重復聲明同一變量;4.注意選擇器特異性可能引發(fā)的覆蓋問題。此外,CSS變量區(qū)分大小寫,且應在使用前定義以避免錯誤。若變量未定義或引用失敗,則會采用回退值或默認值initial。調(diào)試時可通過瀏覽器開發(fā)者工

CSS教程專注于移動優(yōu)先設(shè)計 CSS教程專注于移動優(yōu)先設(shè)計 Jul 02, 2025 am 12:52 AM

Mobile-firstCSSdesignrequiressettingtheviewportmetatag,usingrelativeunits,stylingfromsmallscreensup,optimizingtypographyandtouchtargets.First,addtocontrolscaling.Second,use%,em,orreminsteadofpixelsforflexiblelayouts.Third,writebasestylesformobile,the

如何在VUE中實現(xiàn)過渡和動畫? 如何在VUE中實現(xiàn)過渡和動畫? Jun 24, 2025 pm 02:17 PM

ToaddtransitionsandanimationsinVue,usebuilt-incomponentslikeand,applyCSSclasses,leveragetransitionhooksforcontrol,andoptimizeperformance.1.WrapelementswithandapplyCSStransitionclasseslikev-enter-activeforbasicfadeorslideeffects.2.Useforanimatingdynam

CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動畫 CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動畫 Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉(zhuǎn)器的方法有三種:1.使用邊框的基本旋轉(zhuǎn)器,通過HTML和CSS實現(xiàn)簡單動畫;2.使用多個點的自定義旋轉(zhuǎn)器,通過不同延遲時間實現(xiàn)跳動效果;3.在按鈕中添加旋轉(zhuǎn)器,通過JavaScript切換類來顯示加載狀態(tài)。每種方法都強調(diào)了設(shè)計細節(jié)如顏色、大小、可訪問性和性能優(yōu)化的重要性,以提升用戶體驗。

See all articles