餓了么首頁實現左右兩欄聯動。


實現目的兩個:

1   手指點擊左邊菜單欄,右邊食物欄會聯動到菜單欄下面的內容。

2   手指滑動右邊食物欄,左邊菜單欄會隨着右側的滾動而相應出現active樣式。

我自己用原生寫了好幾個,問題很多,有的卡頓,有的每次都從頭開始走,很煩人。知道我引用了插件才算順暢。

插件是better-scroll  npm一下,import一下開始操作。

先實現目的1;

目的1  很簡單

          (1)在左側目標li綁定click事件。觸發函數move

          (2)初始化兩個better-scorll對象,一個food(右邊的),一個menu(左邊的),別忘記給他們設置click:true。

 

 

 

                   在move函數里執行 food.scrollToElement(le,time)    這個方法簡直逆天:能food里的目標元素el在time毫秒內滾動到最頂部。el可以通過move(index)來獲取;

                    此時點擊右側,左側就可以聯動了。

    

 

實現目的2  比實現目的1較復雜:

      (1)定義一個數組,記錄每個food中list的高度

             (如果沒有border情況下,clientHeight或者offsetHeight都可以,有border請用offsetHeight,但是style.height不可以,因為只有行間樣式style才能點到)

                 真實的寬度在data里肯定獲取不到,因為涉及到dom創建,所以在created鈎子里的nextTick()回調函數里獲取;(大家都知道created鈎子執行時DOM 其實並未進行任何渲染,獲取不到                                    offsetHeight)   

                 mounted回調里是無法直接通過this.$refs獲取到用ref命名的子組件的,只有nextTick才能訪問到,我也嘗試過在mounted里獲取offsetHeight,沒有獲取到。()

scroll事件實時監聽滾動位置,並且將位置賦給scrollY,scrollY發生變化引起了函數再次執行並返回index。

接下來就簡單了,新index的變化引起綁定class屬性的變化添加active類名的變化。

 

 

 

 

          

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM