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

目錄
逐幀動畫控制整體切換
利用補間動畫實現(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 動畫,它對理解本文起著至關重要的作用。

好的,還是文章以開頭的例子,假設我們存在這樣 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 的總體高度,用于設置逐幀動畫的終點值

上述的效果,實際如下:

如果給容器添加上 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,上面的只是文字版的輪播,那如果是圖片呢?

沒問題,方法都是一樣的?;谏鲜龅拇a,我們可以輕松地將它修改一下后得到圖片版的輪播效果。

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

完整的代碼,你可以戳這里: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)容。更多信息請關注PHP中文網(wǎng)其他相關文章!

本站聲明
本文內(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
描述'垂直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.最

CSS過渡教程 CSS過渡教程 Jul 26, 2025 am 09:30 AM

csStransitionSenablesMoothPropertyChangesWithMinimalCode,ifealforHoverForpectSandInteractiveFeedback.1.usethesyntaxtransition:propertyDurationTimingTiming-functionDelayDelay; TodefineTrysitions; TodefinEtrys;

如何清除未使用的CSS? 如何清除未使用的CSS? Jul 27, 2025 am 02:47 AM

UseAutomatedToolSlikePurgecsSoruncsStoscanAndRemoveUnusedcss; 2. integratePuratePurgingIntoyourBuildProcessviawebpack,vite,vite,ortailwind ’scontentConfiguration; 3.AuditcsSusageWithChroMedEvtoolScoverAgeTabBeforgeForgingToavoidRemovingNeedEdedStyles; 4.safelistdynamic

CSS過濾屬性示例 CSS過濾屬性示例 Jul 26, 2025 am 08:08 AM

thecssfilterPropertyAppliesVisalEffectStoElementsDirectlyIncss,withCommonSiNCluding:1.Blur()forsofteningimagesorcreatingdepth,2.brightness(brightness(toadjustlightnessordNessordOrdNess)

什么是堆疊上下文? 什么是堆疊上下文? Jul 27, 2025 am 03:55 AM

astackingcontextisaself-containeerrincssthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconteroverlapplapsplatements,wherenestedContextSrextSrextSratcrets-IndexInteractions; itiscreatedByDybyPropertiesLikeLikeZ-IndexonPositionsedElements,Epacity,opacity

See all articles