欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信小程序实现美团菜单

程序员文章站 2022-10-26 20:15:25
本文实例为大家分享了微信小程序实现美团菜单的具体代码,供大家参考,具体内容如下 1.功能仅是菜单功能一部分,仅供参考 2.需求描述:右侧菜品部分在滚动的时候,...

本文实例为大家分享了微信小程序实现美团菜单的具体代码,供大家参考,具体内容如下

微信小程序实现美团菜单

1.功能仅是菜单功能一部分,仅供参考

2.需求描述:右侧菜品部分在滚动的时候,左侧菜品选中分类与右侧第一行菜品所在分类对应。

我的实现方式:(每个菜品高度*该分类菜品数量)+菜品分类高度 = x, 每次滚动的时候判断当前scrolltop是否在x范围内?左侧选中该分类:左侧不做改变;
问题:我设置菜品高度的单位是rpx,而scrolltop的单位是px,这也就是说,上面我计算的x是个变量, 所以当改变测试机型,这个功能就失效了。。。请教各位有什么好的方法没?

onload(e) {
 let goodslist = this.data.goodslist;
 // 初始化每项菜品距离顶部的距离
 for (let i = 0; i < goodslist.length; i++) {
 if (i != 0)
 goodslist[i].scrolltop = parseint(goodslist[i - 1].scrolltop) + parseint((goodslist[i - 1].goods.length * 90) + 35)
 }
 this.data.goodslist = goodslist;
},
// 右侧滚动事件
ongoodsscroll: function (e) {
 let that = this;
 // 当前滚动部分距离页面顶部距离
 let scrolltop = parseint(e.detail.scrolltop);
 let goodslist = that.data.goodslist;
 for (let i = 0; i < goodslist.length; i++) {
 let currentscrolltop = goodslist[i].scrolltop;
 let nextscrolltop = 0;
 if ((i + 1) == goodslist.length)
 nextscrolltop = goodslist[i].scrolltop;
 else
 nextscrolltop = goodslist[i + 1].scrolltop;

 if (currentscrolltop < scrolltop && scrolltop < nextscrolltop) {
 that.setdata({
 classifyidleft: goodslist[i].id,
 classifyseleted: goodslist[i].id
 })
 }
 }
}

关于上面提到的问题2,解决方法如下,但是具体参数没搞明白怎么回事,而且定位也不是很准,请求各位有什么好方法。

// 右侧滚动事件
 ongoodsscroll: function (e) {
 let that = this;
 let scale = e.detail.scrollwidth / 600;
 let scrolltop = e.detail.scrolltop / scale;
 let h = 0;
 let classifyseleted;
 let len = that.data.goodslist.length;

 that.data.goodslist.foreach(function (classify, i) {
 var _h = 70 + classify.goods.length * 180;
 if (scrolltop >= h - 100 / scale) {
 classifyseleted = classify.id;
 }
 h += _h;
 });
 that.setdata({
 classifyseleted: classifyseleted,
 classifyidleft: classifyseleted,
 })
 },

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。