最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序?qū)崿F(xiàn)點餐小程序左側(cè)滑動菜單

 更新時間:2022年07月17日 11:47:13   作者:chihaihai  
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)點餐小程序左側(cè)滑動菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言

最近在幫親戚做一款微信的點餐小程序,以前從沒有接觸過小程序的我只能現(xiàn)做現(xiàn)賣。一邊看文檔一邊實踐嘗試,在進(jìn)行到點菜模塊左側(cè)滑動菜單時遇到了小小的阻礙。索性在查找一些資料和教程后主要功能實現(xiàn)了出來。特此記錄下,也希望能幫助到需要做同樣功能的同學(xué)。

效果圖:

一、初識scroll-view

想要實現(xiàn)上述功能我們必須要借助微信為我們提供的scroll-view組件,沒有了解過的同學(xué)需要先去簡單閱讀下API。從圖中我們可以看出整個布局主要是由左右兩個滾動界面構(gòu)成。但是它們彼此之間又有聯(lián)系,在點擊左側(cè)菜單類型跟滑動右側(cè)菜品的時候另外一個滾動窗口必須做出響應(yīng)。滾動條實現(xiàn)原理其實就是我們HTML中的錨點,右側(cè)整個菜單是一個完整界面它會將其按唯一id標(biāo)識拆分成不同模塊。比如我們整個界面的高度是2000rpx,其中人氣top10占400rpx。那么height:0-400就對應(yīng)人氣top10。而無肉不歡對應(yīng)模塊高度為300rpx那么,400-700區(qū)域就是無肉不歡。以此類推,下面代碼中我們使用id="{{ ‘right’ + item.id}}" 為每個分類模塊做了唯一標(biāo)識。

<view>
? <view class="menuMain">
? ? <scroll-view scroll-y="true" class="menuLeft">
? ? ? <view wx:for="{{menuArr}}" wx:key="*this" bindtap="leftMenuClick" data-current_index="{{index}}" class="{{leftView == index ? 'active' : ''}}">{{item.name}}

? ? ? </view>
? ? </scroll-view>
? ? <scroll-view scroll-y="true" scroll-with-animation="true" bindscroll="rightScroll" scroll-into-view="{{rightId}}"
? ? ?class="menuRight">
? ? ? <view ?wx:for="{{menuArr}}" wx:key="*this" id="{{ 'right' + item.id}}" class="goods">
? ? ? ? <view class="goodsType">
? ? ? ? ?--- ?{{item.name}} ---
? ? ? ? </view>
? ? ? ? <view wx:for="{{item.subArr}}" wx:key="*this" wx:for-item="goods" class="goodsContent">
? ? ? ? ? <view class="orderDishes">
? ? ? ? ? ? <image src="{{goods.imageUrl}}" ></image>
? ? ? ? ? ? <view class="goodsInfo">
? ? ? ? ? ? ? <view class="goodsInfo">{{goods.goodsName}}</view>
? ? ? ? ? ? ? <view class="goodsInfo">規(guī)格:{{goods.unit}}</view>
? ? ? ? ? ? ? <view class="goodsInfo goodsInfoPrice">¥{{goods.price}}</view>
? ? ? ? ? ? ? <view class="add">
? ? ? ? ? ? ? ? +
? ? ? ? ? ? ? </view>
? ? ? ? ? ? </view>
? ? ? ? ? </view>
? ? ? ? </view>
? ? ? </view>
? ? </scroll-view>
? </view>


</view>

二、左側(cè)導(dǎo)航

在小程序初始化生命周期函數(shù)onReady中我們需要提前獲取不同模塊的高度并存入數(shù)組中,來為我們后續(xù)跳轉(zhuǎn)提供高度信息。我們分段將所有的view對應(yīng)高度都放入到heightArr 數(shù)組中。首先實現(xiàn)左側(cè)點擊導(dǎo)航右側(cè)滑動到對應(yīng)高度需求,這里使用bindtap微信我們提供的綁定事件函數(shù)來控制右側(cè)的位置。這里我們?yōu)閒or循環(huán)參數(shù)index進(jìn)行了重命名,通過自定義屬性data-傳遞給函數(shù)調(diào)用者。這里需要注意一個屬性scroll-into-view。值應(yīng)為某子元素id(id不能以數(shù)字開頭)。設(shè)置哪個方向可滾動,則在哪個方向滾動到該元素 其對應(yīng)的view標(biāo)識id就是當(dāng)前右側(cè)滑動窗口要顯示的內(nèi)容,所以我們需要將左側(cè)屬性與右側(cè)視圖id對應(yīng)起來。在data中我們定義兩個字段leftView代表左側(cè)人氣top10,無肉不歡等分類導(dǎo)航。rightId對應(yīng)scroll-view標(biāo)簽下各個view的唯一id值。這里注意我們的id并不是直接對應(yīng),前面有right字段使用是需要進(jìn)行組合。點擊左側(cè)控制右側(cè)滑動的功能并不需要用到高度數(shù)組,只需要使其與view中的id對應(yīng)起來即可。詳細(xì)請看leftMenuClick函數(shù)。為了使動畫看起來比較流暢請加上scroll-with-animation屬性

let heightArr = [0] ?// 存放高度累加數(shù)組
data: {
? ? rightId: 'right0',
? ? leftView: 0
? },
/**
? ?* 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
? ?*/
? onReady: function () {
? ? const query = wx.createSelectorQuery()
? ? query.selectAll('.goods').boundingClientRect()
? ? query.selectViewport().scrollOffset()
? ? query.exec(function (res) {
? ? ? res[0].top // #the-id節(jié)點的上邊界坐標(biāo)
? ? ? res[1].scrollTop // 顯示區(qū)域的豎直滾動位置
? ? ? res[0].map( val => {
? ? ? ? let result = val.height ?+ heightArr[heightArr.length - 1]
? ? ? ? console.log(result)
? ? ? ? // 拿后一個view盒子的高度加上前面的高度
? ? ? ? heightArr.push(result)?
? ? ? })
? ? ? console.log(heightArr)
? ? })
??
? },
/**
? ?* 左側(cè)菜單點擊事件,事件對象e傳輸index
? ?*/
? leftMenuClick(e){
? ? console.log(e.currentTarget.dataset.current_index)
? ? this.setData({
? ? ? leftView: e.currentTarget.dataset.current_index,
? ? ? rightId: 'right' + e.currentTarget.dataset.current_index
? ? })
? },

? /**
? ?* 右側(cè)滾動事件
? ?*/
? rightScroll(e) {
? ? let st = e.detail.scrollTop
? ? console.log('st' + e.detail.scrollTop)
? ? for(let i = 0; i < heightArr.length; i++){
? ? ? if(st >= heightArr[i] && st <= heightArr[i+1] - 5){
? ? ? ? this.setData({
? ? ? ? ? leftView: i,
? ? ? ? })
? ? ? ? console.log(this.data.leftView)
? ? ? ? return
? ? ? }
? ? }
? }

三、右側(cè)滑動

右側(cè)滑動控制左側(cè)菜單自動選擇就需要用到我們前面說到的滑動高度了,上面我們獲取到了每個view對應(yīng)的高度分別存儲到了heightArr 數(shù)組中。數(shù)組中存放的每個數(shù)值對應(yīng)的是我們view所在高度。e.detail.scrollTop獲取到的是頂部界面所屬高度,假設(shè)當(dāng)前頂部高度為500我們知道400-700是屬于無肉不歡對應(yīng)的界面。此時只需要判斷后將leftView修改為所對應(yīng)的2即可。具體實現(xiàn)看rightScroll函數(shù),我們遍歷循環(huán)heightArr中的高度數(shù)值判斷當(dāng)前st屬于哪個階層,找到后將左側(cè)標(biāo)識字段設(shè)置為對應(yīng)值即可。其中我們 -5是為了使用戶體驗更友好避免出現(xiàn)分類標(biāo)題已經(jīng)劃過去了,左側(cè)導(dǎo)航還沒變更的情況。大體邏輯就是這樣,樣式根據(jù)自己需求來就可以。下面給出我實現(xiàn)界面對應(yīng)的代碼,其中很多樣式都是偽代碼大家到時自信更改。

/* pages/order/order.wxss */

.link {
? height: 30px;
}

.mainMenu {
? width: 180rpx;
}

.menuMain {
? height: 100vh;
? display: flex;
? flex-direction: row;
? justify-content: space-around;
}

/* 左側(cè)菜單導(dǎo)航欄 */
.menuLeft {
? width: 20%;
}

.menuLeft view {
? font-size: 26rpx;
? text-align: center;
? height: 100rpx;
? line-height: 100rpx;
? background-color: rgb(238, 241, 241);
? position: relative;
}
.menuLeft view.active{
? background-color: rgb(255, 255, 255);
}

.menuLeft view::before {
? content: '';
? width: 6rpx;
? height: 100%;
? position: absolute;
? left: 0;
? top: 0;
? background-color:transparent;
? border-left: none;
}

.menuLeft view.active::before {
? background-color: rgb(245, 229, 6);
}


.menuRight {
? height: 100vh;
? width: 75%;
}

.menuRight .goods{
? padding: 10rpx;
}

.menuRight .goodsType{
? text-align: center;
? height: 60rpx;
? line-height: 60rpx;
? font-weight: 600;
? color: rgb(0, 0, 0);
}

.menuRight .goods .goodsContent .orderDishes image{
? width: 320rpx;
? height: 260rpx;
}


.menuRight .goods .goodsContent text{
? overflow: hidden;
? text-overflow: ellipsis;
? white-space: nowrap;
}

.orderDishes{
? padding-top: 20rpx;
? display: flex;
? flex-direction: row;
}

.add{
? margin-left: 40rpx;
? margin-top: 10rpx;
? width: 120rpx;
? font-size: 40rpx;
? font-weight: 600;
? height: 40rpx;
? line-height: 40rpx;
? text-align: center;
? background-color: rgb(219, 80, 55);
? border-radius: 20rpx;
? color: rgb(255, 255, 255);
}

.goodsInfo{
? margin-left: 16rpx;
? height: 65rpx;
? font-size: 28rpx;
? font-weight: 800;
? color: rgb(0, 0, 0);
}


.goodsInfoPrice{
? color: rgb(247, 36, 36);
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript中一些數(shù)組常用的API總結(jié)

    javascript中一些數(shù)組常用的API總結(jié)

    Js中數(shù)組是一個重要的數(shù)據(jù)結(jié)構(gòu),它相比于字符串有更多的方法,本篇文章總結(jié)了一些數(shù)組中常用的API,我們把它們分成兩類,一類是會改變原始數(shù)組,一類是不會改變原始數(shù)組,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-09-09
  • 在JavaScript中獲取請求的URL參數(shù)

    在JavaScript中獲取請求的URL參數(shù)

    在ASP.NET后臺代碼中,對于這樣的URL請求地址:http://www.abc.com?id=001,我們可以通過Request.QueryString["id"]的方法很容易的獲取到URL中請求的參數(shù)的值,但是要在前臺js代碼中獲取請求的參數(shù)的值,應(yīng)該怎么做呢?
    2010-12-12
  • 談?wù)凧avaScript類型系統(tǒng)之Math

    談?wù)凧avaScript類型系統(tǒng)之Math

    Math 對象并不像 Date 和 String 那樣是對象的類,因此沒有構(gòu)造函數(shù) Math(),像 Math.sin() 這樣的函數(shù)只是函數(shù),不是某個對象的方法。您無需創(chuàng)建它,通過把 Math 作為對象使用就可以調(diào)用其所有屬性和方法
    2016-01-01
  • IE下通過a實現(xiàn)location.href 獲取referer的值

    IE下通過a實現(xiàn)location.href 獲取referer的值

    IE下采用window.location.href方式跳轉(zhuǎn)的話,referer值為空在標(biāo)簽a里面的跳轉(zhuǎn)的話referer就不會空,下面是具體的實現(xiàn)代碼
    2014-09-09
  • 理解Javascript_15_作用域分配與變量訪問規(guī)則,再送個閉包

    理解Javascript_15_作用域分配與變量訪問規(guī)則,再送個閉包

    在閱讀本博文之前,請先閱讀《理解Javascript_13_執(zhí)行模型詳解》 在'執(zhí)行模型詳解'中講到了關(guān)于作用域分配的問題,這一篇博文將詳細(xì)的說明函數(shù)對象、作用域鏈與執(zhí)行上下文的關(guān)系。
    2010-10-10
  • JavaScript 實現(xiàn)下雪特效的示例代碼

    JavaScript 實現(xiàn)下雪特效的示例代碼

    這篇文章主要介紹了JavaScript 實現(xiàn)下雪特效的示例代碼,幫助大家利用JavaScript制作特效,感興趣的朋友可以了解下
    2020-09-09
  • javascript getElementById 使用方法及用法

    javascript getElementById 使用方法及用法

    顧明思義,get-Element-By-Id,就是通過ID來設(shè)置/返回HTML標(biāo)簽的屬性及調(diào)用其事件與方法。用這個方法基本上可以控制頁面所有標(biāo)簽,條件很簡單就是給每個標(biāo)簽分配一個ID號
    2008-11-11
  • 在一般處理程序(ashx)中彈出js提示語

    在一般處理程序(ashx)中彈出js提示語

    這篇文章主要介紹了在一般處理程序(ashx)中彈出js提示語的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • 跟我學(xué)習(xí)JScript的Bug與內(nèi)存管理

    跟我學(xué)習(xí)JScript的Bug與內(nèi)存管理

    跟我學(xué)習(xí)JScript的Bug與內(nèi)存管理,小編對JScript的Bug與內(nèi)存管理也不甚了解,所以整理了本篇文章,希望可以解決大家學(xué)習(xí)時的困擾。
    2015-11-11
  • JS實現(xiàn)數(shù)組去重的常用方法

    JS實現(xiàn)數(shù)組去重的常用方法

    在JavaScript開發(fā)中,數(shù)組操作是不可或缺的一部分,數(shù)組去重作為數(shù)據(jù)處理的一個常見需求,旨在從一個可能包含重復(fù)元素的數(shù)組中移除重復(fù)項,只保留唯一值,本文將詳細(xì)介紹幾種常見的數(shù)組去重方法,并結(jié)合實際應(yīng)用場景進(jìn)行探討,需要的朋友可以參考下
    2024-12-12

最新評論

和龙市| 忻城县| 洛川县| 阳城县| 阜康市| 虎林市| 石门县| 阿瓦提县| 夏邑县| 敖汉旗| 繁昌县| 岐山县| 乐清市| 乐都县| 运城市| 马山县| 得荣县| 兴义市| 乃东县| 班玛县| 改则县| 宁陕县| 杂多县| 宁蒗| 久治县| 赣州市| 乐清市| 巫溪县| 神农架林区| 全椒县| 丹阳市| 论坛| 嘉义市| 九寨沟县| 西华县| 甘南县| 页游| 金门县| 黔南| 平陆县| 抚顺县|