97国产精品视频人人做人人爱,3344在线观看无码,成年人国产视频,欧美日一级片,在线看AV天堂,高清无码一本到东京热,欧美一级黄片一区2区,免费又爽又刺激高潮网址

js使用transition效果實(shí)現(xiàn)無縫滾動

2020-9-7    seo達(dá)人

前言

無縫輪播一直是面試的熱門題目,而大部分答案都是復(fù)制第一張到最后。誠然,這種方法是非常標(biāo)準(zhǔn),那么有沒有另類一點(diǎn)的方法呢?

第一種方法是需要把所有圖片一張張擺好,然后慢慢移動的,

但是我能不能直接不擺就硬移動呢?

如果你使用過vue的transition,我們是可以通過給每一張圖片來添加入場動畫和離場動畫來模擬這個(gè)移動

  • 進(jìn)場動畫就是從最右側(cè)到屏幕中央
  • 出場動畫是從屏幕中央到左側(cè)移出

這樣看起來的效果就是圖片從右邊一直往左移動,但是這個(gè)不一樣的地方是,我們每一個(gè)元素都有這個(gè)進(jìn)場動畫和離場動畫,我們根本不用關(guān)心它是第幾個(gè)元素,你只管輪播就是。

如果不用vue呢?

很簡單,我們自己實(shí)現(xiàn)一個(gè)transtition的效果就好啦,主要做的是以下兩點(diǎn)

  • 元素顯示的時(shí)候,即display屬性不為none的時(shí)候,添加xx-enter-active動畫
  • 元素消失的時(shí)候,先添加動畫xx-leave-active, 注意要讓動畫播完才消失
 function hide(el){
     el.className = el.className.replace(' slide-enter-active','')
     el.className += ' slide-leave-active' el.addEventListener('animationend',animationEvent)
 } function animationEvent(e){
     e.target.className = e.target.className.replace(' slide-leave-active','')
     e.target.style.display = 'none' e.target.removeEventListener('animationend',animationEvent)
 } function show(el){
     el.style.display = 'flex' el.className += ' slide-enter-active' }

這里我們使用了animationend來監(jiān)聽動畫結(jié)束,注意這里每次從新添加類的時(shí)候需要重新添加監(jiān)聽器,不然會無法監(jiān)聽。如果不使用這個(gè)方法你可以使用定時(shí)器的方式來移除leave-active類。

 function hide(el){
     el.className = el.className.replace(' slide-enter-active','') 

el.className += ' slide-leave-active' setTimeout(()=>

{ //動畫結(jié)束后清除class el.className = el.className.replace(' slide-leave-active','')

el.style.display = 'none' }, ANIMATION_TIME) //這個(gè)ANIMATION_TIME為你在css中動畫執(zhí)行的時(shí)間 }

那么,動畫怎么寫呢?

 .slide-enter-active{ position: absolute; animation: slideIn ease .5s forwards;
 } .slide-leave-active{ position: absolute; animation: slideOut ease .5s forwards;
 } @keyframes slideIn {
     0%{ transform: translateX(100%);
     }
     100%{ transform: translateX(0);
     }
 } @keyframes slideOut {
     0%{ transform: translateX(0);
     }
     100%{ transform: translateX(-100%);
     }
 }

需要注意的是這里的 forwards屬性,這個(gè)屬性表示你的元素狀態(tài)將保持動畫后的狀態(tài),如果不設(shè)置的話,動畫跑完一遍,你的元素本來執(zhí)行了離開動畫,執(zhí)行完以后會回來中央位置杵著。這個(gè)時(shí)候你會問了,上面的代碼不是寫了,動畫執(zhí)行完就隱藏元素嗎?

如果你使用上面的setTimeout來命令元素執(zhí)行完動畫后消失,那么可能會有一瞬間的閃爍,因?yàn)閷?shí)際業(yè)務(wù)中,你的代碼可能比較復(fù)雜,setTimeout沒法在那么精準(zhǔn)的時(shí)間內(nèi)執(zhí)行。保險(xiǎn)起見,就讓元素保持動畫離開的最后狀態(tài),即translateX(-100%)。此時(shí)元素已經(jīng)在屏幕外了,不用關(guān)心它的表現(xiàn)了

輪播邏輯怎么寫?

很簡單,我們進(jìn)一個(gè)新元素的時(shí)候同時(shí)移除舊元素即可,兩者同時(shí)執(zhí)行進(jìn)場和離場動畫即可。

 function autoPlay(){
     setTimeout(()=>{
         toggleShow(新元素, 舊元素) this.autoPlay()
     },DURATION) //DURATION為動畫間隔時(shí)間 } function toggleShow(newE,oldE){ //舊ele和新ele同時(shí)動畫 hide(oldE)
     show(newE)
 }

藍(lán)藍(lán)設(shè)計(jì)m.0391cbd.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)

日歷

鏈接

個(gè)人資料

存檔

主站蜘蛛池模板: 久久久久国产精品嫩草影院| 91精品久久久无码中文字幕vr| 国产精品任我爽爆在线播放6080 | 亚洲国产午夜精华无码福利| 国内精品久久久久鸭| 亚洲成网站| 国产探花在线视频| 日韩在线播放中文字幕| 亚洲乱码在线视频| 国产91无码福利在线| 亚洲 欧美 偷自乱 图片| 欧洲一区二区三区无码| 91网在线| 亚洲性视频网站| 免费播放毛片| 99色亚洲国产精品11p| 久久亚洲国产视频| 99这里只有精品免费视频| 亚洲成a人片77777在线播放| 色网站在线视频| 久久精品中文字幕免费| 亚洲无码91视频| 欧美日韩亚洲国产主播第一区| 亚洲国内精品自在自线官| 欧美高清国产| 久久九九热视频| 亚洲精品无码高潮喷水A| 激情视频综合网| 日本道中文字幕久久一区| 乱人伦中文视频在线观看免费| 2021国产精品自产拍在线观看| 久久婷婷五月综合色一区二区| 国产性猛交XXXX免费看| 久久人搡人人玩人妻精品| 国产成人做受免费视频| 99精品视频在线观看免费播放| 1769国产精品免费视频| 国产一级二级在线观看| 91精品小视频| 国产精品私拍在线爆乳| 国产黑丝视频在线观看| 久久久久国产一区二区| 亚洲热线99精品视频| 天天色综合4| 免费欧美一级| 国产美女叼嘿视频免费看| 丁香婷婷激情综合激情| 亚洲性视频网站| 欧美日韩中文字幕在线| A级毛片无码久久精品免费| 国产免费久久精品99re丫丫一| 久久99热66这里只有精品一| 国产性生大片免费观看性欧美| 麻豆精品在线| 九九九精品成人免费视频7| 国精品91人妻无码一区二区三区| 视频一本大道香蕉久在线播放 | 成人中文在线| 国产激情国语对白普通话| 国产精品永久久久久| 国产区福利小视频在线观看尤物| 无码区日韩专区免费系列 | 亚洲精品福利视频| 国内精品免费| 国产SUV精品一区二区| 91麻豆精品国产高清在线| 国产成人凹凸视频在线| 中国一级特黄大片在线观看| 国内毛片视频| www.亚洲一区| 视频一区视频二区中文精品| 国产女人水多毛片18| 日韩激情成人| 天天婬欲婬香婬色婬视频播放| 国产成人亚洲精品色欲AV| 国产激情无码一区二区APP| 色综合网址| 亚洲高清中文字幕在线看不卡| 欧美午夜一区| 99这里只有精品6| 国产伦片中文免费观看| 国产精品久久精品|