小程序外賣項目實踐之-左右菜單聯動


前言

本項目是公司之前一個app項目,一個餐廳自己的訂餐app,已經下線了,

老衲是閑時用來練手,最早是html+jq版本,准備放在公從號里的,后來先是用vue實現了它,最近研究下小程序,當然也是好的練手demo

vue有一個項目視頻教程叫實戰餓了么,它里面有講到菜單聯動的,換在小程序里面,思路也一樣,只不過細節不一樣

先上效果圖:

 

這里有2個功能點:

  • 點擊左側分類標簽的時候,右邊滾動到相應的錨點(html中,確實可以用錨點,而當時就是這么做的)
  • 右邊滾動的時候,以頂部為點,滾動到哪個分類,左邊激活(高亮效果)對應的標簽

基本思路

點左側右邊滾動到相應的位置

由於微信沒有錨點這東西,右邊商品列表使用的是scroll-view原生組件,只能設置它的scroll-top(滾動位置,和html一樣意思)

所以你可能已經想到辦法了,左邊有幾個分類標簽,右側就有幾個產品塊,例子中有3個分類,每個分類都有一個標題和若干個商品容器,我們把各分類商品的區間高度位置(標題高度 +商品容器高度*商品數量),放進一個數組,數組當然從0開始,因為初始滾動位置是0
當你點擊左側標簽的時候,得到索引值,根據索引值,帶進區間高度的數組,取得值,就是商品列表的scroll-top

右側滾動時,左側激活相應標簽

滾動時,得到即時的scroll-top,帶進區間高度數組,計算下在哪個位置,反回相應的索引值,用來判斷左側菜單標簽是第幾個需要高亮

根據上面的草圖,假設我們三個分類,每個分類2個產品,得到的高度數組就是[0,200,400,600]

假設我們滾動的時候,滾動到298像素的位置,根據比對高度數組,超過200,不超過400,應該返回數組的索引:1

1就是第二個位置,也就是我們左側菜單應該激活高亮的第2個標簽

 

相關代碼

根據上面的草圖的結果,本例中分類和商品容器為同級,且每個分類的商品容器為獨立容器,不再統一包裹在一個容器中

我們在onLoad事件中,加載商品數據,把商品數據賦值到data中的goods

注意此處:需要在在setData的回調中,調用計算商品區間高度的方法,因為setData之后,渲染視頻是異步的,所以必須在setData回調中調用

 

 

 

下面是獲取商品各分類區間高度的方法,至於獲取視圖容器的代碼直接搬來,不用解釋

下面是左側菜單的視圖代碼,根據計算出來的索引值,來實現高亮哪一個標簽
綁定一個點擊事件

 

 下面是點擊左側菜單標簽的時候,根據當點前擊的標簽的索引值,帶到區間高度數組,賦值到data中的listViewScrollTop值,並且在滾動容器中scroll-top參數,綁定到這個值,就會滾動到對應的高度

 

給商品滾動容器綁定一個滾動事件, 滾動的時候,可得到當前滾動高度,比較當前高度在已計算出來的區間高度數組中,是屬於哪個區間,返回對應索引值,賦值到data中的cateListActiveIndex

用於左側計算應該高亮哪個標簽

 

總結:思路上面已說明,貼代碼是例常

付上項目地址,有需要的自己拉:https://gitee.com/vbyzc/mz-wxmp

模擬數據是本地模擬,項目目錄下的mock目錄就是,看這里:為小程序開發創建本地mock數據服務器


免責聲明!

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



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