本文实例为大家分享了微信小程序实现购物页面左右联动的具体代码,供大家参考,具体内容如下
效果图:
wxml
<view class="pro-container"> <scroll-view class="left-menu" scroll-y scroll-with-animation="true" scroll-top="{{leftMenuTop}}"> <view class="menu-item {{index===currentActiveIndex" wx:for="{{item}}" wx:key="{{item.index}}" id="{{index}}" catchtap='changeMenu' >{{item.typename}}</view> </scroll-view> <scroll-view v-if="item!=''" class="right-pro" bindscroll = "scroll" scroll-y scroll-with-animation="true" scroll-top="{{rightProTop}}"> <view class="pro-item" wx:for="{{item}}"> <view class="item-header">{{item.typename}}</view> <view class="pro-item-container"> <view wx:for="{{item.shop_goods}}" wx:key="{{index}}" class="pro-item-item"> <image lazy-load="true" src="/UploadFiles/2021-04-02/{{item}}">wxss
.left-menu{ position: absolute; top: 0; left: 0; bottom: 0; right: 0; width: 180rpx; background-color: #f8f8f8; font-size: 32rpx; } ::-webkit-scrollbar{ width: 0; height: 0; color: transparent; } .left-menu .menu-item{ width: calc(100% - 16rpx); height: 80rpx; padding:0 8rpx; line-height: 80rpx; text-align: center; } .left-menu .menu-item.menu-active{ border-left:8rpx solid red; padding-left: 0; background-color: #fff; } /* 右边商品区域 */ .right-pro{ position: absolute; left: 180rpx; top:0; bottom: 0; width:calc(100% - 180rpx); background-color: #fff; display: flex; overflow: hidden; } .right-pro .pro-item{ padding:20rpx; } .right-pro .item-header{ display: inline-block; font-size: 30rpx; line-height: 40rpx; color: #fff; background-color: red; padding:0rpx 30rpx; margin: 10rpx auto; } .right-pro .pro-item-container{ font-size: 28rpx; } .pro-item-item{ width: calc((100% - 180rpx) / 2 ); display:inline-block; } .right-pro .pro-item-container image{ width: 100rpx; height: 100rpx; display: block; margin: 0 auto; } .right-pro .pro-item-container text{ display: block; text-align: center; }wxjs
let proListToTop = [], menuToTop = [], MENU = 0, windowHeight,timeoutId; // MENU ==> 是否为点击左侧进行滚动的,如果是,则不需要再次设置左侧的激活状态 Page({ data: { proList: [], item: [], item2:[ { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, { "typename": "服饰", }, ], currentActiveIndex: 0 }, onLoad: function (options) { // ---------------------------ajax---------------------- var utilMd5 = require('../../utils/md5.js'); var md5 = utilMd5.hexMD5; var timestamp = new Date().getTime(); var that = this; var jsonStr = JSON.stringify({ "shopid": "34" }); var token = md5(jsonStr + timestamp) + timestamp; wx.request({ url: "https://api.jvjiewang.com/Home/Shop/goods", data: { jsonStr: jsonStr, token: token }, method: 'POST', header: { "Content-Type": "application/x-www-form-urlencoded" }, success: function (res) { console.log(res.data.respond); var items = res.data.respond; that.setData({ item: items }) } }) //----------------------------ajax---------------------- // 确保页面数据已经刷新完毕~ setTimeout(() => { this.getAllRects() }, 200) }, changeMenu(e) { // 改变左侧tab栏操作 if (Number(e.target.id) === this.data.currentActiveIndex) return MENU = 1 this.setData({ currentActiveIndex: Number(e.target.id), rightProTop: proListToTop[Number(e.target.id)] }) this.setMenuAnimation(Number(e.target.id)) }, scroll(e) { for (let i = 0; i < proListToTop.length; i++) { if (e.detail.scrollTop < proListToTop[i] && i !== 0 && e.detail.scrollTop > proListToTop[i - 1]) { return this.setDis(i) } } // 找不到匹配项,默认显示第一个数据 if (!MENU) { this.setData({ currentActiveIndex: 0 }) } MENU = 0 }, setDis(i) { // 设置左侧menu栏的选中状态 if (i !== this.data.currentActiveIndex + 1 && !MENU) { this.setData({ currentActiveIndex: i - 1 }) } MENU = 0 this.setMenuAnimation(i) }, setMenuAnimation(i){ // 设置动画,使menu滚动到指定位置。 let self = this if (menuToTop[i]) { console.log(11111) // 节流操作 if(timeoutId){ clearTimeout(timeoutId) } timeoutId = setTimeout(()=>{ console.log(12138) self.setData({ leftMenuTop: (menuToTop[i].top - windowHeight) }) },50) } else { if (this.data.leftMenuTop === 0) return this.setData({ leftMenuTop: 0 }) } }, getActiveReacts(){ wx.createSelectorQuery().selectAll('.menu-active').boundingClientRect(function (rects) { return rects[0].top }).exec() }, getAllRects() { // 获取商品数组的位置信息 wx.createSelectorQuery().selectAll('.pro-item').boundingClientRect(function (rects) { rects.forEach(function (rect) { proListToTop.push(rect.top) }) }).exec() // 获取menu数组的位置信息 wx.createSelectorQuery().selectAll('.menu-item').boundingClientRect(function (rects) { wx.getSystemInfo({ success: function (res) { windowHeight = res.windowHeight / 2 rects.forEach(function (rect) { menuToTop.push({ top: rect.top, // animate:rect.top > windowHeight }) }) } }) }).exec() }, // 获取系统的高度信息 getSystemInfo() { let self = this wx.getSystemInfo({ success: function (res) { windowHeight = res.windowHeight / 2 } }) } })以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月16日
2024年11月16日
- 2019明达发烧碟MasterSuperiorAudiophile[WAV+CUE]
- 蔡幸娟.1993-相爱容易相处难【飞碟】【WAV+CUE】
- 陆虎.2024-是否愿意成为我的全世界【Hikoon】【FLAC分轨】
- 关淑怡.2009-ERA【星娱乐】【WAV+CUE】
- 林忆莲《关于她的爱情故事》2022新世纪MQA 24K金碟限量版[WAV+CUE]
- 张雨生1993《一天到晚游泳的鱼》台湾G字首版[WAV+CUE][1G]
- 群星《试音五大女声》[WAV+CUE][1G]
- 魔兽世界wlk武器战一键输出宏是什么 wlk武器战一键输出宏介绍
- 魔兽世界wlk狂暴战一键输出宏是什么 wlk狂暴战一键输出宏介绍
- 魔兽世界wlk恶魔术士一键输出宏是什么 wlk恶魔术士一键输出宏介绍
- 医学爱好者狂喜:UP主把医学史做成了格斗游戏!
- PS5 Pro评分解禁!准备升级入手吗?
- 我们盘点了近期火热的国产单机游戏!《琉隐神渡》等 你期待哪款?
- 2019年第12届广州影音展双碟纪念版ADMS2CD[MP3/WAV]
- 黄安《救姻缘》台首版[WAV+CUE]