国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

vue組件之輪播圖實現

xuweijian / 2126人閱讀

摘要:預覽地址圖片的輪播假設需要輪播三張圖片,以前的思路就如圖所示,添加兩個節點。通過索引的切換實現組件的無縫輪播。這樣子父組件就可以通過鉤子和來實時通知子組件,從而控制內容的展示。這個判斷只需讓子組件來做就行了。

預覽地址

圖片的輪播

假設需要輪播三張圖片(1,2,3),以前的思路就如圖所示,添加兩個節點。通過索引(index)的切換實現組件的無縫輪播。


這種想法的確可行,而且實現出來效果還不錯。
缺點在于

大量的dom操作。

代碼邏輯相對挺復雜,量也更多。

重構或添加新功能會更麻煩

現在的思路

創建兩個組件分別為 carouselcarousel-item

結構如下


         
          
1
2
3

selected即為顯示的內容的name,用sync做一個"雙向綁定"。這樣子父組件就可以通過 updated鉤子和$children來實時通知子組件,從而控制內容的展示。

updated(){
           this.updateChildrens(this.selected)
       }
   methods:{
       updateChildrens(){
           //被選中的那個可以顯示了,其他的關閉
       }
   }

也就是說 carousel負責數據通信,而carousel-item只需完成動畫過渡效果就行了,這樣邏輯就非常清晰了。

這里當然就存在動畫正向與反向的問題,需要兩種方向不同的切入切出的動畫。
carousel需要做一次判斷然后在updateChildrens的時候就告訴子組件方向。

進入方向的判斷

需要一個變量記錄上一次的selected數值,假設就為 oldSelectednewSelected

自動輪播是默認正向的(往后播放),到最后一個的時候回到第一個應該也是正向的

圓點(圖片索引圖標)選取切換,只需判斷兩次變量的大小就行

方向鍵切換(箭頭圖標),和自動輪播同理,方向應時刻和箭頭方向一致

解決跳過中間圖片的問題

不管輪播圖數量多少,這里始終只在兩張圖里面切換。這樣就涉及到一個問題就是會
跳過中間的圖片

首先carousel-item有一個默認的圖片過渡時間,這里可以通過計算oldSelectednewSelected之間的差值來確定跳過圖片的數量。當然也有動畫方向的問題。

 clickSelected(newSelected){
               clearInterval(this.timer2)
               if(oldSelected===newSelected)return
               lastSelected = oldSelected
                // .............
               this.‘控制時長的函數’(lastSelected,newSelected)
           },
           
  "控制時長的函數"(lastSelected,newSelected){
               //........
               let newIndex = newSelected 
               let animationDuration = "計時器的間隔時長"
               theIndex = ‘下一個展示的圖片索引’
               //.......
             this.duration = duration  
               this."carousel組件".forEach(vm=>vm.duration=duration)
               this.$emit("update:selected",names[theIndex])//通知一下父組件將要展示的下一個圖片的索引
               if(theIndex===newIndex)return
               this.timer2 = setInterval(()=>{
                   if(theIndex===newIndex){
                       this.clearAndSet()
                   }
                   this.$emit("update:selected",names[theIndex])
                   oldIndex>newIndex?theIndex--:theIndex++
               },duration*animationDuration)
  }        

基本就能完成跳過中間圖片的這樣子的問題了,后面的click改為 hover觸發功能就很簡單了。

## Card卡片化


需要默認三個同時出現的圖片,這意味著需要一個數組。
但是依然不需要改變selected的數據類型(還是字符串)。這種情況用傳遞數組只會添加許多不必要的麻煩和降低性能,像是需要做深拷貝,遍歷判斷這類的。
因為這個應該出現的圖片的數組里面的index都是連號的。這個判斷只需讓子組件來做就行了。

現在在carousel-item通過計算得到一個數組

this.cardSelected = [selected-1,selected,selected+1]
if(`最后一張圖`){
    //.....
}else if(`第一張圖`){
    
}

現在實時顯示的三張圖片的數組已經有了,我只需要分配好他們的位置(左邊,中間,右邊

"我是決定位置的函數"(){
    let [index,position] = [this.cardSelected.indexOf(Number(this.name)),["left","main","right"]]
    return `position-${position[index]}`
}

簡單的兩行就搞定了。

然后綁定一下

 :class="{......,[我是決定位置的函數]:card}">

剩下的定位還是動畫什么的,都可以交給css去完成了。

 &.position-left{
     width: 50%;
     position: absolute;
     top: 0;
     left: -10px;
     transform:scale(0.82);
   }
   &.position-main{
     width: 50%;
     transform: translateX(50%);
     position: relative;
     z-index: 3;
   }
   &.position-right{
     transform: translateX(100%) scale(0.82);
     width: 50%;
     position: absolute;
     top: 0;
     left: 10px;
   }

最后就是點擊兩側圖片會切換

調用父組件的方法就ok了

   "調用父組件的方法"(){
          let [direction,index] = [this."我是決定位置的函數".slice(9,16),this.$parent.selectedIndex]
          if(direction==="main")return
           let move = {left:"back", right:"go"}
           this.$parent."我是父組件的方法"(index,move[direction])
     }

## 尚未完善的細節

其實我認為動畫還是有一點點瑕疵的,后面會在css上修改一下,順便簡單調整樣式和更換動態svg。最后,有待加強的地方希望大佬們指出來交流,要是覺得還行的話,給我的項目點個star就是最好的了。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102800.html

相關文章

  • 移動端橫向滑屏之輪播圖

    摘要:圖片描述移動端的輪播圖可以有很多方式實現,最常見的可以使用定位手指事件。四手指移入移出開關定時器 圖片描述 移動端的輪播圖可以有很多方式實現,最常見的可以使用定位 + 手指事件。但是我這里介紹的是 CSS3 中的 2d 變換和手指事件,因為變換屬性的代碼更加簡潔優雅 一. 移動端的準備工作 * { padding: 0; margin: 0; } img { d...

    Hydrogen 評論0 收藏0
  • Vue 過渡實現播圖

    摘要:過渡實現輪播圖過渡的過渡系統是內置的,在元素從中插入或移除時自動應用過渡效果。 Vue 過渡實現輪播圖 Vue 過渡 Vue 的過渡系統是內置的,在元素從 DOM 中插入或移除時自動應用過渡效果。 過渡的實現要在目標元素上使用 transition 屬性,具體實現參考Vue2 過渡 下面例子中我們用到列表過渡,可以先學習一下官方的例子 要同時渲染整個列表,比如使用 v-for,我們需要...

    zr_hebo 評論0 收藏0
  • [vue組件]無縫輪播圖

    摘要:實現原理無縫滾動預處理為了無縫滾動,在傳進來的數組首部增加末尾元素,在尾部追加首元素看圖數據綁定視圖為當前顯示的輪播圖索引,然后只需要對進行操作,監聽的變化,一旦到達了邊界就重置,顯示出對應的圖片。 該文章請對應源碼閱讀,github源碼地址,DEMO使用地址,線上DEOM展示。 做一個vue基礎組件系列,使用vue以最簡潔的方式實現常用組件,可用于快速二次定制化開發。 (??????...

    GHOST_349178 評論0 收藏0
  • [vue組件]無縫輪播圖

    摘要:實現原理無縫滾動預處理為了無縫滾動,在傳進來的數組首部增加末尾元素,在尾部追加首元素看圖數據綁定視圖為當前顯示的輪播圖索引,然后只需要對進行操作,監聽的變化,一旦到達了邊界就重置,顯示出對應的圖片。 該文章請對應源碼閱讀,github源碼地址,DEMO使用地址,線上DEOM展示。 做一個vue基礎組件系列,使用vue以最簡潔的方式實現常用組件,可用于快速二次定制化開發。 (??????...

    Clect 評論0 收藏0

發表評論

0條評論

xuweijian

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<