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

當前位置:首頁 > 科技  > 軟件

CSS 實現3d輪播圖的一些思路,你學會了嗎?

來源: 責編: 時間:2024-07-03 17:21:20 250觀看
導讀最近在項目中碰到一個比較典型的3d輪播圖動效,如下所示:圖片說難不難,說簡單也不簡單,這是一個無限循環的輪播效果,并且個數是固定的,你會如何實現呢?原效果是通過vue的transition組件實現的,感覺有些笨重,思考了一番,發現純 CS
最近在項目中碰到一個比較典型的3d輪播圖動效,如下所示:

scx28資訊網——每日最新資訊28at.com

圖片圖片scx28資訊網——每日最新資訊28at.com

說難不難,說簡單也不簡單,這是一個無限循環的輪播效果,并且個數是固定的,你會如何實現呢?scx28資訊網——每日最新資訊28at.com

原效果是通過vue的transition組件實現的,感覺有些笨重,思考了一番,發現純 CSS也能實現這樣的效果,而且性能更好,實現也更簡潔,一起來看看吧!scx28資訊網——每日最新資訊28at.com

一、CSS 動畫實現思路

首先來分析一下思路。看著是一個連貫的輪播效果,其實單獨看每一個子項,都是完全相同的運動軌跡。scx28資訊網——每日最新資訊28at.com

圖片圖片scx28資訊網——每日最新資訊28at.com

然后是這個動畫,其實就是6個關鍵幀,逐一去位移和縮放,如下:scx28資訊網——每日最新資訊28at.com

圖片圖片scx28資訊網——每日最新資訊28at.com

然后給每個子項不同的“負延遲”,是不是就剛好錯開,形成一個完整的輪播效果了呢?scx28資訊網——每日最新資訊28at.com

無論CSS怎么實現,動畫原理就這些了,下面來看幾個實現方式scx28資訊網——每日最新資訊28at.com

二、CSS 動畫關鍵幀

首先簡單布局一下,先用一個元素實現動畫;scx28資訊網——每日最新資訊28at.com

<div class="item"></div>

加點修飾;scx28資訊網——每日最新資訊28at.com

html,body{  font-family: -apple-system, "BlinkMacSystemFont", sans-serif;  margin: 0;  height: 100%;  display: flex;  justify-content: center;  flex-direction: column;  align-items: center;  background: aliceblue;  counter-reset: num;}.item{  position: absolute;  display: grid;  place-content: center;  width: 100px;  height: 100px;  border-radius: 8px;  background-color: #3E65FF;  color: #fff;  font-size: 30px;  counter-increment: num;}

這里的數字是用CSS計數器生成的,效果如下:scx28資訊網——每日最新資訊28at.com

圖片圖片scx28資訊網——每日最新資訊28at.com

根據前面的關鍵幀,很容易用代碼實現,就是。scx28資訊網——每日最新資訊28at.com

.item{  animation: slide 12s infinite;}@keyframes slide {  0%,100% {    transform: translate(0%, 0%) scale(1);  }  16.67% {    transform: translate(120%, -30%) scale(0.9);  }  33.33% {    transform: translate(100%, -70%) scale(0.8);  }  50% {    transform: translate(0, -90%) scale(0.7);  }  66.67% {    transform: translate(-100%, -70%) scale(0.8);  }  83.33% {    transform: translate(-120%, -30%) scale(0.9);  }}

這里的16.67%關鍵幀是將100%進行6等分得到的,如下所示:scx28資訊網——每日最新資訊28at.com

圖片圖片scx28資訊網——每日最新資訊28at.com

效果如下:scx28資訊網——每日最新資訊28at.com

圖片圖片scx28資訊網——每日最新資訊28at.com

雖然有動畫了,但是效果有點奇怪,每次改變位置的時候好像沒有停頓,顯得過渡有些緩慢,只是有減速和加速的過程,這是默認的ease-in-out的淡入淡出緩沖效果。scx28資訊網——每日最新資訊28at.com

那么,如何拉開一定的間隔呢?也就是希望每次運動的快一點,然后停留一會。其實也很簡單,在之前的每個關鍵點前再添加一個相同的關鍵幀,比如在16.67%的前面一點6.67%,由于是相同的,所以這段時間內是沒有動畫的,也就相當于停留了一會。scx28資訊網——每日最新資訊28at.com

圖片圖片scx28資訊網——每日最新資訊28at.com

用代碼實現就是:scx28資訊網——每日最新資訊28at.com

@keyframes slide {  0%,90%,100% {    transform: translate(0%, 0%) scale(1);  }  6.67%,  16.67% {    transform: translate(120%, -30%) scale(0.9);  }  23.33%,  33.33% {    transform: translate(100%, -70%) scale(0.8);  }  40%,  50% {    transform: translate(0, -90%) scale(0.7);  }  56.67%,  66.67% {    transform: translate(-100%, -70%) scale(0.8);  }  73.33%,  83.33% {    transform: translate(-120%, -30%) scale(0.9);  }}

這樣是不是就好多了?scx28資訊網——每日最新資訊28at.com

圖片圖片scx28資訊網——每日最新資訊28at.com

實現了一個,多個子元素也就好辦了。scx28資訊網——每日最新資訊28at.com

<div class="item" style="--i: 0"></div><div class="item" style="--i: 1"></div><div class="item" style="--i: 2"></div><div class="item" style="--i: 3"></div><div class="item" style="--i: 4"></div><div class="item" style="--i: 5"></div>

我們給每個子元素加個CSS變量,然后給每個動畫加個“負延遲”,讓這個動畫提前運行到指定位置;scx28資訊網——每日最新資訊28at.com

.item{   animation: slide 12s calc(-2s * var(--i)) infinite;}

效果如下:scx28資訊網——每日最新資訊28at.com

基本就實現這個這個輪播動畫,不過層級還有點問題。scx28資訊網——每日最新資訊28at.com

所以還需要再關鍵幀里加入層級變化;scx28資訊網——每日最新資訊28at.com

@keyframes slide {  0%,90%,100% {    z-index: 4;    transform: translate(0%, 0%) scale(1);  }  6.67%,  16.67% {    z-index: 3;    transform: translate(120%, -30%) scale(0.9);  }  23.33%,  33.33% {    z-index: 2;    transform: translate(100%, -70%) scale(0.8);  }  40%,  50% {    z-index: 1;    transform: translate(0, -90%) scale(0.7);  }  56.67%,  66.67% {    z-index: 2;    transform: translate(-100%, -70%) scale(0.8);  }  73.33%,  83.33% {    z-index: 3;    transform: translate(-120%, -30%) scale(0.9);  }}

這樣就完美了。scx28資訊網——每日最新資訊28at.com

這種實現兼容性最好,只用到了 CSS 動畫,兼容市面所有瀏覽器,可以放心使用scx28資訊網——每日最新資訊28at.com

  • CSS 3d swiper (codepen.io)[1]
  • CSS 3d swiper (juejin.cn)[2]

三、CSS @property

其實目前來說,用上面這種方式就足夠了,沒有任何問題。scx28資訊網——每日最新資訊28at.com

不過,上面對于中間停頓的處理方式可能有些繁瑣,下面再介紹另一種思路,可能更符合常規。scx28資訊網——每日最新資訊28at.com

先思考一下,如果是用 JS要如何實現?是不是可以直接每隔2秒改變位移和縮放,然后通過transition實現過渡效果?scx28資訊網——每日最新資訊28at.com

首先,我們還是需要像之前一樣,定義一些關鍵幀,不過不是直接改變位移和縮放,而是改變一些 CSS變量。scx28資訊網——每日最新資訊28at.com

@keyframes slide {  0%,100% {    --translate: 0,0;    --scale: 1;    --z: 4;  }  16.67% {    --translate: 120%,-30%;    --scale: 0.9;    --z: 3;  }  33.33% {    --translate: 100%,-70%;    --scale: 0.8;    --z: 2;  }  50% {    --translate: 0%,-90%;    --scale: 0.7;    --z: 1;  }  66.67% {    --translate: -100%,-70%;    --scale: 0.8;    --z: 2;  }  83.33% {    --translate: -120%,-30%;    --scale: 0.9;    --z: 3;  }}

然后每個子項就需要用transfrom來應用這些變量了;scx28資訊網——每日最新資訊28at.com

.item{  transform: translate(var(--translate)) scale(var(--scale));  transition: .5s transform;  animation: slide 12s calc(-2s * var(--i)) infinite;}

我們來看看效果:scx28資訊網——每日最新資訊28at.com

好像并沒有過渡動畫?這是因為animation覆蓋了transition,所以需要分離開來,我們嵌套一層父級。scx28資訊網——每日最新資訊28at.com

<div class="item-wrap" style="--i: 0">  <div class="item"></div></div><div class="item-wrap" style="--i: 1">  <div class="item"></div></div><div class="item-wrap" style="--i: 2">  <div class="item"></div></div><div class="item-wrap" style="--i: 3">  <div class="item"></div></div><div class="item-wrap" style="--i: 4">  <div class="item"></div></div><div class="item-wrap" style="--i: 5">  <div class="item"></div></div>

然后將動畫寫在父級上;scx28資訊網——每日最新資訊28at.com

.item-wrap{  animation: slide 12s calc(-2s * var(--i)) infinite;  display: contents;}

這樣就不影響了,效果如下:scx28資訊網——每日最新資訊28at.com

不過還是有點怪怪的。這是因為animation的默認效果也是ease-in-out,所以有這種漸入漸出的效果。我們需要瞬間變化,不需要過渡效果,因為過渡效果可以由transition完成。scx28資訊網——每日最新資訊28at.com

這里我們可以用steps來實現,steps(1)表示直接切換,中間沒有任何過渡。scx28資訊網——每日最新資訊28at.com

.item-wrap{  animation: slide 12s calc(-2s * var(--i)) steps(1) infinite;}

這樣效果就和前面基本一致了。scx28資訊網——每日最新資訊28at.com

你也可以訪問以下鏈接來查看實際效果:scx28資訊網——每日最新資訊28at.com

  • CSS 3d swiper @property (codepen.io)[3]
  • CSS 3d swiper @property (juejin.cn)[4]

雖然里面沒有提到CSS @property,但實際上是依賴這個特性的,因此兼容性稍差,需要Safari 16.4+,Firefox目前還不支持。scx28資訊網——每日最新資訊28at.com

四、CSS 樣式查詢

拋開兼容性,其實還有一種方式可以實現,而且更容易理解,也更符合JS的思路。scx28資訊網——每日最新資訊28at.com

我們要做的動畫很簡單,只需要改變一個 CSS變量就行,如下:scx28資訊網——每日最新資訊28at.com

@property --index {  syntax: "<number>";  initial-value: 0;  inherits: false;}@keyframes slide {  0% {    --index: 0;  }  100% {    --index: 6;  }}

通過@property可以讓--index變量從0→6一次變化。scx28資訊網——每日最新資訊28at.com

關于這個技巧,之前在多篇文章中都有提到。scx28資訊網——每日最新資訊28at.com

你可能不需要 JS!CSS實現一個計時器。scx28資訊網——每日最新資訊28at.com

如何讓CSS計數器支持小數的動態變化?scx28資訊網——每日最新資訊28at.com

還在使用定時器嗎?CSS 也能實現電子時鐘。scx28資訊網——每日最新資訊28at.com

動畫合成小技巧!CSS 實現動感的倒計時效果。scx28資訊網——每日最新資訊28at.com

自定義計數器小技巧!CSS 實現長按點贊累積動畫。scx28資訊網——每日最新資訊28at.com

scx28資訊網——每日最新資訊28at.com

實現如下:scx28資訊網——每日最新資訊28at.com

.item-wrap{  display: contents;  animation: slide 12s calc(-2s * var(--i)) steps(6) infinite;}

這樣就實現了一個--index不斷變化的動畫。scx28資訊網——每日最新資訊28at.com

當然僅僅只是這樣還不夠,我們需要根據這個變量來匹配具體的樣式,這就要用到CSS樣式查詢了,具體實現如下:scx28資訊網——每日最新資訊28at.com

@container style(--index: 0) {  .item {    transform: translate(0, 0) scale(1);    z-index: 4;  }}@container style(--index: 1) {  .item {    transform: translate(120%, -30%) scale(0.9);    z-index: 3;  }}@container style(--index: 2) {  .item {    transform: translate(100%, -70%) scale(0.8);    z-index: 2;  }}@container style(--index: 3) {  .item {    transform: translate(0, -90%) scale(0.7);    z-index: 1;  }}@container style(--index: 4) {  .item {    transform: translate(-100%, -70%) scale(0.8);    z-index: 2;  }}@container style(--index: 5) {  .item {    transform: translate(-120%, -30%) scale(0.9);    z-index: 3;  }}

這段應該很好理解,比如@container style(--index: 5) 表示,當查詢到--index為5的時候,下面的樣式就生效了,非常像通過 JS 來改變類名一樣,這種方式也能實現類似的效果。scx28資訊網——每日最新資訊28at.com

你也可以訪問以下鏈接來查看實際效果:scx28資訊網——每日最新資訊28at.com

  • CSS 3d swiper @style (codepen.io)[5]
  • CSS 3d swiper @style (juejin.cn)[6]

由于要用到樣式查詢,所以兼容性更差一點,需要Chrome 111+,酌情使用。scx28資訊網——每日最新資訊28at.com

五、總結一下

以上就是本文的全部內容了,共介紹了3種不同的實現思路,兼容性從高到低,大家可以自行選擇。scx28資訊網——每日最新資訊28at.com

對了,還有一點,有時候我們需要鼠標hover時暫停動畫,這個就體現出CSS的優勢了,直接用:hover實現,類似這樣scx28資訊網——每日最新資訊28at.com

.wrap:hover .item{    animation-play-state: paused;}

下面總結一下實現要點:scx28資訊網——每日最新資訊28at.com

  1. 整體看著是一個連貫的輪播效果,其實單獨看每一個子項,都是完全相同的運動軌跡。
  2. 給每個子項不同的“負延遲”,就能形成一個完整的輪播效果。
  3. 動畫本質上是6個關鍵幀,只是位移和縮放的變化。
  4. 直接使用關鍵幀雖然有動畫,但是效果有點奇怪,每次改變位置的時候好像沒有停頓,顯得過渡有些緩慢。
  5. 可以手動在每個關鍵點前再添加一個相同的關鍵幀,手動停頓一下。
  6. 給每個子元素加個CSS變量,通過這個變量可以計算每個動畫的“負延遲”,讓這個動畫提前運行到指定。
  7. 我們還定義一些關鍵幀,不過不是直接改變位移和縮放,而是改變一些 CSS變量。
  8. 這樣可以實現每隔2秒改變位移和縮放,然后通過transition實現過渡效果。
  9. 這種思路依賴CSS @property,兼容性稍差,需要Safari 16.4+,Firefox目前還不支持。
  10. 還可以通過樣式查詢,自動匹配每種變量的位移和縮放,更符合常規思路,需要Chrome 111+

本文鏈接:http://m.www897cc.com/showinfo-26-98557-0.htmlCSS 實現3d輪播圖的一些思路,你學會了嗎?

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

上一篇: 六個常見的 Go 接口設計錯誤

下一篇: 掌握 Python:15 個關于字符串操作的神級單行代碼

標簽:
  • 熱門焦點
  • Redmi Pad評測:紅米充滿野心的一次嘗試

    從Note系列到K系列,從藍牙耳機到筆記本電腦,紅米不知不覺之間也已經形成了自己頗有競爭力的產品體系,在中端和次旗艦市場上甚至要比小米新機的表現來得更好,正所謂“大丈夫生居
  • Redmi Buds 4開箱簡評:才199還有降噪 可以無腦入

    在上個月舉辦的Redmi Note11T Pro系列新機發布會上,除了兩款手機新品之外,Redmi還帶來了兩款TWS真無線藍牙耳機產品,Redmi Buds 4和Redmi Buds 4 Pro,此前我們在Redmi Note11T
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力。  CRM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規模如今超過580
  • 從零到英雄:高并發與性能優化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構師或者程序員,你是否曾經為公司的系統在面對高并發和性能瓶頸時感到手足無措或者焦頭爛額呢?筆者在出道那會為此是吃盡了苦頭的,不過也得
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問我,如何才能學好IO流,對各種流的概念,云里霧里的,不求甚解。用到的時候,現百度,功能雖然實現了,但是為什么用這個?不知道。更別說效率問題了~下次再遇到,
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
  • AI藝術欣賞體驗會在上海梅賽德斯奔馳中心音樂俱樂部上演

    光影交錯的鏡像世界,虛實幻化的視覺奇觀,虛擬偶像與真人共同主持,這些場景都出現在2019世界人工智能大會的舞臺上。8月29日至31日,“AI藝術欣賞體驗會”在上海
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲无毛电影| 日韩视频在线一区二区| 国产精品久久久久久久9999| 国产精品国产亚洲精品看不卡15| 久久精品麻豆| 久久一二三区| 欧美激情一区二区三区全黄| 欧美三区视频| 国产中文一区二区三区| 亚洲人成人77777线观看| 亚洲一区二区少妇| 久久午夜国产精品| 欧美日韩在线看| 国内精品久久久久久| 日韩视频免费在线| 香蕉久久夜色精品| 欧美成人精品影院| 国产精品一二三四区| 亚洲国产美女| 亚洲欧美日韩国产精品| 免费久久精品视频| 国产精品成人一区二区网站软件| 国产欧美在线视频| 亚洲激情一区| 欧美一区二区黄色| 欧美日韩成人一区二区三区| 国产视频一区在线观看一区免费| 91久久久国产精品| 欧美一级网站| 欧美日韩直播| 亚洲第一久久影院| 亚洲欧美资源在线| 欧美精品v国产精品v日韩精品| 国产欧美日韩免费| 日韩图片一区| 久久伊伊香蕉| 国产欧美亚洲精品| 亚洲网站视频| 欧美精品亚洲| 亚洲国产精品成人va在线观看| 亚洲一区二区成人| 欧美激情一区二区三区高清视频| 国产日韩成人精品| 亚洲女女女同性video| 欧美精品一线| 亚洲第一精品在线| 欧美在线观看日本一区| 欧美午夜寂寞影院| 亚洲人成久久| 久久综合色播五月| 国产婷婷一区二区| 亚洲免费小视频| 欧美日韩中文字幕在线| 亚洲黄色在线视频| 久久天堂成人| 国内久久婷婷综合| 欧美亚洲综合在线| 国产精品青草久久久久福利99| 亚洲精品国产欧美| 猛男gaygay欧美视频| 国产综合色产| 亚欧美中日韩视频| 国产女主播一区| 亚洲免费视频观看| 欧美日韩一区在线| 日韩一二三在线视频播| 欧美黑人多人双交| 亚洲精品专区| 欧美精品日日鲁夜夜添| 亚洲日本在线观看| 欧美风情在线观看| 亚洲精品资源| 欧美日韩高清不卡| 99国产欧美久久久精品| 欧美另类在线观看| 99综合视频| 欧美看片网站| 日韩一区二区精品| 欧美日韩一二三区| 中文一区二区| 国产精品卡一卡二| 亚洲欧美日韩中文视频| 国产欧美亚洲一区| 欧美专区中文字幕| 精品999日本| 欧美成人精品h版在线观看| 亚洲欧洲在线免费| 欧美人与禽猛交乱配视频| 99精品欧美一区二区三区| 欧美日韩国产成人| 亚洲视频999| 国产精品一区久久| 久久国产精品一区二区| 狠狠色综合日日| 麻豆精品网站| 亚洲精品孕妇| 欧美性大战久久久久| 亚洲欧美精品| 国模私拍一区二区三区| 久久躁狠狠躁夜夜爽| 亚洲国产精品日韩| 欧美日韩1区| 亚洲伊人伊色伊影伊综合网 | 欧美精品aa| 亚洲最新视频在线| 国产精品毛片一区二区三区| 午夜欧美大片免费观看| 国外成人网址| 欧美不卡高清| 亚洲午夜精品在线| 国产午夜精品理论片a级探花| 久久久久久久尹人综合网亚洲 | 狠狠综合久久av一区二区老牛| 久久激情婷婷| 亚洲国产日韩欧美在线99| 欧美日韩高清不卡| 午夜精品免费| 在线观看欧美日本| 欧美日韩国产综合视频在线观看中文 | 久久aⅴ乱码一区二区三区| 国产在线观看一区| 蜜桃av噜噜一区| 一本色道久久综合一区 | 亚洲美女视频| 国产欧亚日韩视频| 女人香蕉久久**毛片精品| 亚洲无吗在线| 狠狠色丁香久久婷婷综合_中| 牛人盗摄一区二区三区视频| 一本色道久久综合亚洲精品婷婷| 国产精品素人视频| 麻豆亚洲精品| 亚洲一区在线视频| 亚洲国产欧美精品| 国产精品入口福利| 欧美jizz19性欧美| 亚洲欧美日韩一区在线观看| 亚洲国产精品尤物yw在线观看| 欧美色播在线播放| 久久久欧美一区二区| 一区二区三区日韩欧美精品| 国产真实乱偷精品视频免| 欧美区日韩区| 久久久精品网| 亚洲图色在线| 伊人色综合久久天天五月婷| 国产精品白丝av嫩草影院| 看欧美日韩国产| 午夜精品免费| 一区二区三区高清在线观看| 精品va天堂亚洲国产| 国产精品久久久久7777婷婷| 美女国内精品自产拍在线播放| 中文一区二区| 91久久久久| 精品成人a区在线观看| 国产精品久久久久久久久| 欧美大片一区二区三区| 久久国内精品自在自线400部| 亚洲精品日本| 樱桃国产成人精品视频| 国产嫩草一区二区三区在线观看| 牛人盗摄一区二区三区视频| 欧美影片第一页| 亚洲女同在线| 一本色道久久综合狠狠躁篇怎么玩| 国外成人在线视频| 国产精品免费一区二区三区在线观看 | 极品少妇一区二区| 欧美日韩在线免费视频| 蜜桃久久精品一区二区| 久久精品亚洲一区| 亚洲欧美一区在线| 国产精品99久久久久久久vr | 国内精品一区二区三区| 国产精品综合久久久| 欧美色大人视频| 欧美精品一区二区三区在线播放 | 另类成人小视频在线| 欧美一区二区视频免费观看 | 在线一区二区日韩| 亚洲精品欧美| 影音欧美亚洲| 国内一区二区三区| 国产日韩欧美日韩| 国产精品人人做人人爽 | 在线观看久久av| 极品少妇一区二区三区精品视频| 国产精品日韩欧美综合| 欧美三日本三级少妇三2023 | 国产精品青草综合久久久久99 | 国产女人精品视频| 国产乱人伦精品一区二区| 国产精品久久久久一区二区| 欧美色精品天天在线观看视频| 免费日韩视频| 欧美福利一区二区| 欧美大片一区二区| 欧美成人免费一级人片100| 免费黄网站欧美| 欧美肥婆bbw| 欧美母乳在线| 欧美日韩成人综合| 欧美特黄视频|