<thead id="kdfuf"><font id="kdfuf"></font></thead>
<samp id="kdfuf"></samp>
    <nav id="kdfuf"><strong id="kdfuf"></strong></nav>
      中文字幕无码一区二区三区在线,久久精品人人做人人爽,国产一级内射无挡观看,十八禁在线黄色网站,日韩欧美国产另类久久久精品 ,少妇人妻偷人精品一区二区,久久午夜视频,亚洲春色AⅤ无码专区

      js使用transition效果實現無縫滾動

      2020-9-7    seo達人

      前言

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

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

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

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

      • 進場動畫就是從最右側到屏幕中央
      • 出場動畫是從屏幕中央到左側移出

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

      如果不用vue呢?

      很簡單,我們自己實現一個transtition的效果就好啦,主要做的是以下兩點

      • 元素顯示的時候,即display屬性不為none的時候,添加xx-enter-active動畫
      • 元素消失的時候,先添加動畫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來監聽動畫結束,注意這里每次從新添加類的時候需要重新添加監聽器,不然會無法監聽。如果不使用這個方法你可以使用定時器的方式來移除leave-active類。

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

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

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

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

      那么,動畫怎么寫呢?

       .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屬性,這個屬性表示你的元素狀態將保持動畫后的狀態,如果不設置的話,動畫跑完一遍,你的元素本來執行了離開動畫,執行完以后會回來中央位置杵著。這個時候你會問了,上面的代碼不是寫了,動畫執行完就隱藏元素嗎?

      如果你使用上面的setTimeout來命令元素執行完動畫后消失,那么可能會有一瞬間的閃爍,因為實際業務中,你的代碼可能比較復雜,setTimeout沒法在那么精準的時間內執行。保險起見,就讓元素保持動畫離開的最后狀態,即translateX(-100%)。此時元素已經在屏幕外了,不用關心它的表現了

      輪播邏輯怎么寫?

      很簡單,我們進一個新元素的時候同時移除舊元素即可,兩者同時執行進場和離場動畫即可。

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

      藍藍設計www.tuitetiyu.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

      日歷

      鏈接

      個人資料

      藍藍設計的小編 http://www.tuitetiyu.cn

      存檔

      主站蜘蛛池模板: 亚洲视频在线日韩| 国产真人无打码作爱免费视频| 亚洲最大AV资源站无码AV网址| 超碰人人做人人爽人人| 99九九热久久只有精品| 国产乱子伦在线观看| 午夜精品一区二区三区在线观看| videosgratis灌满另类| 成年无码av动漫网站天堂网| 精品久久久久久无码专区不卡| 91久久精品亚洲中文字幕无码| 久久亚洲AV午夜福利精品一区二区三区| 不卡无码人妻一区三区音频| 亚洲ⅰ人成五月天| 亚洲人成无码网站久久99热国产| 国产亚洲精品久久久久秋霞| 久久AV无码精品人妻出轨 | 国产在线观看播放av| 久久久综合香蕉尹人综合网| 水蜜桃无码AV在线观看| 少妇极品熟妇人妻无码| 国产高跟黑色丝袜在线| 18无码粉嫩小泬无套在线观看| 精品无码一区二区| 国产精品女同久久久久电影院 | 人妻天天爽夜夜爽一区二区| 国产成人五月综合网| 亚洲精品第一在线影院| 色婷婷亚洲精品综合影院| 道真| 国产蝌蚪免费精品视频动漫 | 亚洲精品国产精华液怎么样| 成年美女黄网站色大片免费看| 国产自产一区二区三区视频| 国产成人AAAAA级毛片| 亚洲精品无码鲁网午夜| 你们一个一个上好痛不用下载| 亚洲电影av无码中字| 青草青青精品视频网站| 国产一级爽爽爽爽爽影院| 亚洲成av人片天堂网|