<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • js使用transition效果實(shí)現(xiàn)無(wú)縫滾動(dòng)

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

          前言

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

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

          但是我能不能直接不擺就硬移動(dòng)呢?

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

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

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

          如果不用vue呢?

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

          • 元素顯示的時(shí)候,即display屬性不為none的時(shí)候,添加xx-enter-active動(dòng)畫
          • 元素消失的時(shí)候,先添加動(dòng)畫xx-leave-active, 注意要讓動(dòng)畫播完才消失
           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來(lái)監(jiān)聽(tīng)動(dòng)畫結(jié)束,注意這里每次從新添加類的時(shí)候需要重新添加監(jiān)聽(tīng)器,不然會(huì)無(wú)法監(jiān)聽(tīng)。如果不使用這個(gè)方法你可以使用定時(shí)器的方式來(lái)移除leave-active類。

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

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

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

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

          那么,動(dòng)畫怎么寫呢?

           .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)將保持動(dòng)畫后的狀態(tài),如果不設(shè)置的話,動(dòng)畫跑完一遍,你的元素本來(lái)執(zhí)行了離開(kāi)動(dòng)畫,執(zhí)行完以后會(huì)回來(lái)中央位置杵著。這個(gè)時(shí)候你會(huì)問(wèn)了,上面的代碼不是寫了,動(dòng)畫執(zhí)行完就隱藏元素嗎?

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

          輪播邏輯怎么寫?

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

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

          藍(lán)藍(lán)設(shè)計(jì)m.sdgs6788.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(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è)人資料

          存檔

          久久精品成人免费观看97| 久久香蕉国产线看观看乱码| 久久精品国产亚洲AV麻豆网站 | 久久99精品久久久久久不卡| 婷婷久久综合九色综合98| 久久人人爽人人爽人人片AV不| 久久久午夜精品福利内容| 精品多毛少妇人妻AV免费久久| 99久久香蕉国产线看观香| 人妻无码久久一区二区三区免费| 久久亚洲视频| 久久狠狠高潮亚洲精品| 婷婷伊人久久大香线蕉AV| 久久国产三级无码一区二区| 久久久久久狠狠丁香| 91精品国产综合久久香蕉| 久久国产精品免费| 久久毛片免费看一区二区三区| 久久久久国产精品三级网| 久久夜色精品国产亚洲av| 精品国产乱码久久久久软件| 日本人妻丰满熟妇久久久久久| 99久久久国产精品免费无卡顿| 国产香蕉久久精品综合网| 漂亮人妻被中出中文字幕久久| 亚洲AV无码久久| 久久99精品国产麻豆婷婷| 亚洲国产日韩欧美久久| 91精品国产综合久久四虎久久无码一级| 国产99久久久国产精品~~牛| 亚洲精品白浆高清久久久久久| 国产精品久久久久久久久鸭| 亚洲香蕉网久久综合影视| 久久成人国产精品二三区| 久久精品午夜一区二区福利 | 国产视频久久| 99精品久久精品一区二区| 国产精品久久久久久久久免费| 久久精品国产一区二区三区不卡| 伊人色综合久久天天人手人婷 | 色综合久久中文综合网|