午夜勾魂曲-午夜福利自怕-午夜福利在线观看6080-午夜福利院电影-国产精品毛片AV久久97-国产精品麻豆高潮刺激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)
 }

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

日歷

鏈接

個人資料

藍藍設計的小編 http://m.gerard.com.cn

存檔

主站蜘蛛池模板: 甜性涩爱全集在线观看 | 视频一区精品自拍亚洲 | 色婷婷激情AV精品影院 | 欧美精品中文字幕亚洲专区 | 麻豆高清区在线 | 青青伊人精品 | 国产午夜精品久久久久九九 | 日本老妇一级特黄aa大片 | 性色少妇AV蜜臀人妻无码 | 亚洲理论在线a中文字幕 | 啊轻点灬大JI巴又大又粗 | 午夜AV亚洲一码二中文字幕青青 | 最新国自产拍天天更新 | 国产av久久免费观看 | 99视频在线观看免费 | 麻豆AV蜜桃AV久久 | 欧美性色xo影院69 | 精品午夜中文字幕熟女人妻在线 | 私密按摩师在线观看 百度网盘 | 男女牲交全过程免费播放 | 日韩黄色免费 | 狠狠色狠狠色综合日日32 | 色美妞论坛 | 艳鉧动漫1~6全集观看在线 | 亚洲国产精品免费线观看视频 | 99E久热只有精品8在线直播 | 暖暖视频大全免费观看 | 97视频免费上传播放 | 岛国片免费在线观看 | 成都电影免费中文高清 | 内射后入在线观看一区 | 久久sese| 亚婷婷洲AV久久蜜臀无码 | 母狗黄淑珍 | 东北嫖妓对白粗口 | 久久久精品3d动漫一区二区三区 | 韩国成人理伦片免费播放 | 国产精品久久久久久久久久久 | 秀婷程仪公欲息肉婷在线观看 | 俄罗斯XBXBXB兽交 | 无码人妻精品一区二区蜜桃色 |