赞
踩
Sham最近因为在做一个食堂订餐功能,因为订单中内容比较多,又不想初始状态全部展示,希望类似文字过长显示省略号那样,在最后显示一个“more”按钮。
实现方法和代码如下,记录备忘
- data: {
- showmorebtn:{}
- //这里初始化,用户后面往这个对象中添加对应id的判断用数据
- },
- //主要用于循环并赋值
- checkheight(that){
- var that = this;
- var items = that.data.mealorders;
- //获取mealorder数据数组,循环执行是否超高并显示more按钮
- for(var i=0; i<items.length;i++){
- that.checkoverflow(that,i);
- }
- },
-
- //超高时显示more按钮
- checkoverflow(that,id){
- var query = wx.createSelectorQuery();
- //创建节点查询器
- //获取父对象id的位置信息,生成后会是在res数组的第一个
- query.select('#f'+id).boundingClientRect();
- //获取子对象id的位置信息,res数组第二个数据
- query.select('#c'+id).boundingClientRect();
- //如果上面再继续加,则会依次为res数组的第三……个数据
- //生成位置信息数组
- query.exec(function(res) {
- //res就是 所有标签为对应id的元素的信息 的数组
- //console.log(res);
- //这里的showmorebtn在js的初始data里设置 showmorebtn :{}
- var showmorebtn = that.data.showmorebtn;
- if(res[1].height > res[0].height+10){
- //当子对象高度超过父对象高度时,表示内容太多了,需要显示more按钮,渲染数据用于前端判断
- showmorebtn[id] = true;
- that.setData({
- showmorebtn:showmorebtn
- })
- }
- })
- },
- <!--这里的用index+1是因为发现直接用index的话,如果index为0时,会被判断为false-->
- <view class="details {{showdetail == index+1 ? '' : 'h55'}}" id="f{{index}}">
- <view id="c{{index}}">
- <view class="foods" wx:for="{{item.orderdetail}}" wx:key="index" wx:for-item="foods">
- {{index}}:{{foods.number}}份
- </view>
- </view>
- </view>
- <view class="showdetail white" id="{{index+1}}" bindtap="showdetail" wx:if="{{showmorebtn[index]}}">
- <view class="bgblue center"><text>more</text></view>
- </view>
-
- .h55{
- height:55rpx;
- overflow: hidden;
- transition: all 0.4s ease-out 0s;
- -webkit-transition: all .4s ease-out;
- -moz-transition: all .4s ease-out;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。