微信小程序——订单列表显示全部和收起功能

查遍百度, 没有发现我要的,没办法只能自己写个:

一、首先wxml页面中每个订单要有独立的 【显示全部】和【收起】两个view;

正确的做法:

<view class="margin-sm padding-sm solid-top solids-bottom text-center" wx:if="{{item.goods.length>2}}" bindtap="listToggle" data-lstid="{{list_index}}">
	<button class="cu-btn round sm bg-grey" style="width:180rpx;" data-sm="{{showMore[list_index]}}" wx:if="{{!showMore[list_index]}}">显示全部</button>
	<button class="cu-btn round sm bg-grey" style="width:180rpx;" wx:if="{{showMore[list_index]}}">收起</button>
</view>

(1)、如果goods数量大于2,那么才去显示【显示全部】或【收起】两个按钮。

(2)、【显示全部】或【收起】的展示是根据当前 page 中  data 设置的 showMore[list_index] 对应的 true 或 false 来决定的。当然首次进来设置  showMore[list_index] 为 false, 这样 根据此条件 wx:if="{{!showMore[list_index]}}" 就能显示【显示全部】了。

(3)、点击事件listToggle来改变 showMore[list_index] 对应的值,如果为false, 【显示全部】显示; 如果为true, 【收起】显示。

错误的做法:

在js中page->data,设置 showmoremessage:"显示全部",点击时切换为"收起", 这样的做法没有考虑到订单是独立的,如果这样,你点击一个,其他订单对应的按钮也会跟着变。

二、showMore如何来定义

page-》data 中定义:

showMore: {}, //每个订单中显示全部的详细情况

然后在你获取订单列表处来给 showMore 赋值

//循环 list 用来给 showMore 赋值
t.data.list.forEach((item, index) => {
	if(item.goods.length>2){
		showMoreRes[index] = !1;
	}else{
		showMoreRes[index] = !0;
	}
}),
t.setData({
	showMore: showMoreRes
}),
console.log(t.data.showMore)

这样 showMore 就能控制每个订单的【显示全部】或【收起】的展示了。

三、【显示全部】或【收起】的点击事件 listToggle

/**显示全部及收起的点击事件**/
listToggle: function(e){
	let that = this, lstid= e.currentTarget.dataset.lstid, m = that.data.showMore;
	//m[lstid] 为 false, 说明还没有展开,显示【显示全部】, 设置为true,展开,显示【收起】 
	if(!m[lstid]){
		//展开
		m[lstid] = !0;
	}else{
		//收起
		m[lstid] = !1;
		let query = wx.createSelectorQuery().in(that);
		query.selectViewport().scrollOffset();
		//#comm 跳转到指定id位置
		query.select("#list"+lstid).boundingClientRect();
		query.exec(function(res){
			console.log(res);
			var miss = res[0].scrollTop + res[1].top - 50;
			wx.pageScrollTo({
				scrollTop: miss,
				duration: 300
			});
		});
	}
	that.setData({
		showMore: m,
	});
},

else 中的 代码目的是为了【收起】之后能回到该订单的初始位置, 也就是所谓的锚点(点击按钮跳转到指定view锚点)。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值