vue2.0 better-scroll 實現移動端滑動的範例程式碼,

來源:互聯網
上載者:User

vue2.0 better-scroll 實現移動端滑動的範例程式碼,

寫在前面的話:

上一篇文章實現了滑動效果,這部分來試試左右聯動效果的實現方法吧

效果:滑動右側時,左側也能有相應的變化;點擊左側時,右側也能自動定位到相應的位置。

如所示介面,左側為分欄,右側為分欄詳情。

滑動右邊使左邊聯動的大概的思路:

1)要知道右側的列表中,每一個分欄所佔的高度,存進一個數組中。

2)實現左邊聯動,則必須要監控 “scroll”事件,擷取其高度

3)將scroll 的高度與右側分欄的高度進行比較,獲得其 index 值

4)左側的分類中,使與 index 相應的分欄高亮即可~

餘留的問題:額,左側怎麼跟著一起滾動?應該還需要判斷一下當前左側欄中的scroll的位置,然後使之跟隨變化,但是不同尺寸的手機,高度不一,怎麼解決???我不知道……

點擊左邊時,右邊實現自動定位的大概思路:

1)首先要使點擊有效,因為 better-scroll將預設事件都阻止了

2)為左側的分欄綁定點擊事件,並擷取 index ,然後使右邊的相應 index 分類滾動就行了~so easy ....but!!!

怎麼下手?!!

1. 先實現滑動右邊觸發左邊的功能:

做法:

(1)定義變數先~ 在data中加入一個 listHight: [] 數組;一個變數scrollY : 0,用來裝目前的scroll的y位置座標

(2)在methods 中定義一個Function Compute高度,此處還要用到一個知識點(如何擷取 分類列表dom元素?)還記得上一篇中使用到的this.$refs 嗎?

我們先給要擷取高度的那個元素取個類名,名字叫:“food-list-hook”:

let foodList =this.$refs.foodsWrapper.getElementsByClassName('food-list-hook') 這樣就擷取了所有分類列表啦,計算方法定義如下:

_calculateHeight () {    // console.log(this)    let foodList = this.$refs.foodsWrapper.getElementsByClassName('food-list-hook')    let height = 0    this.listHight.push(height)    for (let i = 0; i < foodList.length; i++) {     let item = foodList[i]     height += item.clientHeight     this.listHight.push(height)    }}

(3)然後在計算屬性computed 中,來比較數組中的高度值與當前的 scroll 的y座標值,返回的是當前所在高度的index值:

在執行這一步時,scrollY的值,要怎麼得到?(通過better-scroll 檢測“scroll”事件得到,此時,需要給其加上相應的參數,做法如中畫紅線處所示)

currentIndex () {    for (let i = 0; i < this.listHight.length; i++) {     let height1 = this.listHight[i]     let height2 = this.listHight[i + 1]     if (!height2 || (this.scrollY >= height1 && this.scrollY < height2)) {      return i     }    }    return 0   } }  

(4)在 template 中,將此index 值綁定到index 值相等的左側的列表分欄中,並指定一個類名,叫 current,如中的 畫紅線的部分:

 

(5)在style中,將相應的current 類加上相應的樣式即可:

2. 再來實現點擊左邊,右邊聯動的效果

(1)使 左側邊欄 點擊有效,如紅線標註所示:

    

(2)為左側欄 添加相應的點擊事件:

(3)在methods 中編寫點擊觸發的事件 selectMenu()方法,利用 擷取的 $index 使右邊進行相應的滾動,其中 300ms是加上了一個過渡效果:

試試吧~

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.