微信小程序scroll-view實(shí)現(xiàn)滾動(dòng)到錨點(diǎn)左側(cè)導(dǎo)航欄點(diǎn)餐功能(點(diǎn)擊種類,滾動(dòng)到錨點(diǎn))
1.wxml代碼:
<view class="page"> <import src="../../components/catering-item/catering-item.wxml" /> <!-- 左側(cè)滾動(dòng)欄 --> <view class='under_line'></view> <view class="body"> <view style='float: left' class='left'> <scroll-view scroll-y scroll-with-animation scroll-left="{{scrollLength}}" class='scrollY' style='height: {{winHeight}}px'> <view class='all clear'> <block wx:key="tabs" wx:for="{{tabs}}"> <view bindtap='jumpIndex' data-menuindex='{{index}}'data-anchor='{{item.anchor}}'> <view class="text-style {{indexId==index?' activeView':''}}"> <text class="{{indexId==index?'active1':''}}">{{item.title}}</text> </view> </view> </block> </view> </scroll-view> </view> <view class="right" style='height: {{winHeight}}px'> <scroll-view scroll-y scroll-with-animation scroll-left="{{scrollLength}}" bindscroll="scrollToLeft" scroll-into-view="{{toTitle}}" class='scrollRight' style='height: {{winHeight}}px'> <block wx:key="tabs" wx:for="{{tabs}}"> <view id="view-{{item.anchor}}"> <view class="title" id="title-{{item.anchor}}">{{item.title}}</view> <view class="orders" wx:for="{{tabsList[item.anchor]}}"> <template is="cateringItem" data="{{...item}}" /> </view> </view> </block> </scroll-view> </view> </view> </view>
2.wxss代碼:
@import "../../components/catering-item/catering-item.wxss"; /* pages/catering.wxss */ .page { display: flex; flex-direction: column; width: 100%; /* background: #F7F4F8; */ background-image: linear-gradient(90deg, #FCFCFC 0%, #FCFCFC 99%); /* padding-top: 16px; */ } .under_line{ width: 100%; border-top: 1rpx solid #efefef; } ::-webkit-scrollbar{ width: 0; height: 0; color: transparent; } .body{ display: flex; width: 100%; } .scrollY { width: 200rpx; /* position: fixed; left: 0; top: 0; */ background: #F5F5F5; /* border-right: 1rpx solid #efefef; */ } /* scrollRight{ flex: 1; } */ .right{ flex: 1; /* height: 200rpx; */ /* background: #00FF00; */ } .left { border-top: 1rpx solid #efefef; border-right: 1rpx solid #efefef; } .text-style { width: 200rpx; height: 100rpx; line-height: 100rpx; text-align: center; font-size: 28rpx; font-family: PingFangSC-Semibold; color: rgba(51, 51, 51, 1); } .active1 { color: #E5D1A9; /* background: #FFF; */ } .activeView{ background: #FFF; } .active { display: block; width: 50rpx; height: 6rpx; background: #E5D1A9; position: relative; left: 75rpx; bottom: 30rpx; } .title{ margin-left: 32rpx; padding-top: 16rpx; font-size: 28rpx; /* padding-bottom: 16rpx; */ }
3.js代碼
// pages/catering.js Page({ /** * 頁(yè)面的初始數(shù)據(jù) */ data: { tabs: [ { title: '特惠', anchor: 'a', }, { title: '必點(diǎn)', anchor: 'b', }, { title: '營(yíng)養(yǎng)湯', anchor: 'c', }, { title: '主食', anchor: 'd', }, { title: '套餐', anchor: 'e', }, { title: '飲料', anchor: 'f', }, ], tabsList: { a: [{ price: 10.1, anchor: "a", index: 0, num: 0 }, { price: 10.2, anchor: "a", index: 1, num: 0 }, { price: 10.3, anchor: "a", index: 2, num: 0 },], b: [{ price: 10.4, anchor: "b", index: 0, num: 0 }, { price: 10.5, anchor: "b", index: 1, num: 0 }, { price: 10.6, anchor: "b", index: 2, num: 0 },], c: [{ price: 10.7, anchor: "c", index: 0, num: 0 }, { price: 10.8, anchor: "c", index: 1, num: 0 }, { price: 10.9, anchor: "c", index: 2, num: 0 },], d: [{ price: 11.0, anchor: "d", index: 0, num: 0 }, { price: 11.1, anchor: "d", index: 1, num: 0 }, { price: 11.2, anchor: "d", index: 2, num: 0 },], e: [{ price: 11.3, anchor: "e", index: 0, num: 0 }, { price: 11.4, anchor: "e", index: 1, num: 0 }, { price: 11.5, anchor: "e", index: 2, num: 0 },], f: [{ price: 11.6, anchor: "f", index: 0, num: 0 }, { price: 11.7, anchor: "f", index: 1, num: 0 }, { price: 11.8, anchor: "f", index: 2, num: 0 },] }, indexId: 0, toTitle:"title-c", scrollTop:0, top:[], }, // 左側(cè)點(diǎn)擊事件 jumpIndex(e) { let index = e.currentTarget.dataset.menuindex; let anchor = e.currentTarget.dataset.anchor; let that = this that.setData({ indexId: index, toTitle: "title-" + anchor }); //可以設(shè)置定位事件 }, scrollToLeft(res){ console.log("scrollToLeft-res:" + JSON.stringify(res) + JSON.stringify(this.data.top)); // let top=res.detail.scrollTop; this.setData({ scrollTop: res.detail.scrollTop }) var length = this.data.top.length; for(var i=0;i<this.data.top.length;i++){ if (this.data.top[i] - this.data.top[0] <= this.data.scrollTop && (i < length - 1 && this.data.top[i + 1] - this.data.top[0] > this.data.scrollTop)){ if(this.data.indexId!=i){ this.setData({ indexId: i, }); } } } // console.log("top:"+top); }, /** * 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載 */ onLoad: function (options) { var that = this wx.getSystemInfo({ success: function (res) { that.setData({ winHeight: res.windowHeight }); var top2=new Array(); for(var i=0;i<that.data.tabs.length;i++){ wx.createSelectorQuery().select('#view-' + that.data.tabs[i].anchor).boundingClientRect(function (rect) { var isTop=Number(rect.top); top2.push(isTop); console.log("view-c:" + JSON.stringify(rect)); }).exec(); } that.setData({ top: top2 }); } }); }, })
說(shuō)明:
wxml中的template是菜品的item,可根據(jù)自己的需求進(jìn)行定義。
使用到scroll-view的scroll-into-view屬性用于對(duì)左側(cè)菜單種類點(diǎn)擊定位到右側(cè)菜單的具體位置,js中的jumpIndex為用戶點(diǎn)擊左側(cè)菜單,對(duì)應(yīng)選中位置改變,和對(duì)右側(cè)菜單進(jìn)行定位。
js中scrollToLeft用于實(shí)現(xiàn)用戶滾動(dòng)右側(cè)菜單,對(duì)左側(cè)菜單分類進(jìn)行定位操作,主要思想是將右側(cè)菜單中的種類標(biāo)簽的top位置記錄下來(lái),當(dāng)右側(cè)scroll-view滑動(dòng)的位置小于等于某一個(gè)top,而大于下一個(gè)top時(shí),則更換左側(cè)種類菜單到指定位置。
總結(jié)
到此這篇關(guān)于微信小程序scroll-view實(shí)現(xiàn)滾動(dòng)到錨點(diǎn)左側(cè)導(dǎo)航欄點(diǎn)餐功能(點(diǎn)擊種類,滾動(dòng)到錨點(diǎn))的文章就介紹到這了,更多相關(guān)微信小程序 scroll-view實(shí)現(xiàn)滾動(dòng)到錨點(diǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 微信小程序?qū)崿F(xiàn)錨點(diǎn)定位功能的方法實(shí)例
- 微信小程序?qū)崿F(xiàn)錨點(diǎn)跳轉(zhuǎn)
- 微信小程序 scroll-view 實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn)功能
- 微信小程序scroll-view錨點(diǎn)鏈接滾動(dòng)跳轉(zhuǎn)功能
- 微信小程序?qū)崿F(xiàn)錨點(diǎn)功能
- 小程序?qū)崿F(xiàn)錨點(diǎn)滑動(dòng)效果
- 微信小程序 scroll-view實(shí)現(xiàn)錨點(diǎn)滑動(dòng)的示例
- 微信小程序?qū)崿F(xiàn)錨點(diǎn)定位樓層跳躍的實(shí)例
- 微信小程序商城分類滾動(dòng)列表錨點(diǎn)的項(xiàng)目實(shí)踐
相關(guān)文章
JavaScript 隨機(jī)驗(yàn)證碼的生成實(shí)例代碼
這篇文章主要介紹了JavaScript 隨機(jī)驗(yàn)證碼的生成實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-09-09學(xué)習(xí)JavaScript設(shè)計(jì)模式之單例模式
這篇文章主要為大家介紹了JavaScript設(shè)計(jì)模式中的單例模式,對(duì)JavaScript設(shè)計(jì)模式感興趣的小伙伴們可以參考一下2016-01-01JS+CSS制作DIV層可(最小化/拖拽/排序)功能實(shí)現(xiàn)代碼
DIV層最小化和隨意拖拽排序,很多的愛(ài)好者都想實(shí)現(xiàn)這個(gè)功能,小編整理搜集了一下,希望本文的知識(shí)點(diǎn)可以幫助到你2013-02-025秒后跳轉(zhuǎn)效果(setInterval/SetTimeOut)
實(shí)現(xiàn)5秒后自動(dòng)跳轉(zhuǎn)效果有兩種方式setInterval與SetTimeOut,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下2013-05-05JavaScript設(shè)計(jì)模式組合設(shè)計(jì)模式案例
這篇文章主要介紹了JavaScript設(shè)計(jì)模式組合設(shè)計(jì)模式案例,組合設(shè)計(jì)模式是用于將多個(gè)部分通過(guò)組合的方式行成一個(gè)整體,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-06-06JS實(shí)現(xiàn)點(diǎn)擊Radio動(dòng)態(tài)更新table數(shù)據(jù)
這篇文章主要介紹了JS實(shí)現(xiàn)點(diǎn)擊Radio動(dòng)態(tài)更新table數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2017-07-07