Commit 2f1e718b777cdba5fed2181ddb636035e7dd680d

Authored by yvan.ni
1 parent e5519737

团购列表的定时器显示的优化

packageC/pages/group_list/group_list.js
... ... @@ -19,7 +19,8 @@ Page({
19 19 noMore: false, // 检测是否有更多数据,true为没有更多数据,false为还有数据
20 20 pageNum: 1, // 当前页数
21 21  
22   - time_arr:[]
  22 + time_arr:[],
  23 + timer: null,
23 24 },
24 25  
25 26 /**
... ... @@ -296,8 +297,6 @@ Page({
296 297 var th = this;
297 298 // 获取当前时间,同时得到活动结束时间数组
298 299 let newTime = ut.gettimestamp();
299   -
300   -
301 300 var time_arr=[];
302 301  
303 302 for (let j = 0; j < this.data.list.length; j++) {
... ... @@ -309,43 +308,66 @@ Page({
309 308 // 对结束时间进行处理渲染到页面
310 309 for (var i = 0; i < endTimeList.length; i++) {
311 310  
312   - var o = endTimeList[i];
313   - var endTime = this.data.type == 1 ? o.end_time : o.start_time;
  311 +
314 312 // if(th.data.type==0) endTime = o.start_time;
315   - let obj = null;
316   - // 如果活动未结束,对时间进行处理
317   - if (endTime - newTime > 0) {
318   - let time = (endTime - newTime);
319   - // 获取天、时、分、秒
320   - let day = parseInt(time / (60 * 60 * 24));
321   - let hou = parseInt(time % (60 * 60 * 24) / 3600);
322   - let min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
323   - let sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
324   - obj = {
325   - day: this.timeFormat(day),
326   - hou: this.timeFormat(hou),
327   - min: this.timeFormat(min),
328   - sec: this.timeFormat(sec),
329   - hide: 1
330   - }
331   - } else {
332   - //活动已结束,全部设置为'00'
333   - obj = {day: '00', hou: '00', min: '00', sec: '00'}
334   - }
335   - //var txt = "goodlist[" + i + "].djs";
336   - //th.setData({[txt]: obj});
337 313  
338   - var e={djs:obj};
339   - arr_new.push(e);
340 314  
  315 + // 创建查询对象
  316 + let query = wx.createSelectorQuery();
  317 + // 获取目标元素,并获取目标元素的信息
  318 + query.select("#l_item_"+j+"_"+i).boundingClientRect();
  319 + // 获取视口,并获取视口信息
  320 + query.selectViewport().boundingClientRect();
  321 + //-- 执行查询,元素要在显示中的才显示定时器 --
  322 + query.exec(([target, view]) => {
  323 +
  324 + if (!th.data.is_timer) return;
  325 + if (!target) return;
  326 + if (!target.id) return;
  327 +
  328 + let idx_str= target.id.replace('l_item_','');
  329 + idx_str=idx_str.split('_');
  330 +
  331 + var o = this.data.list[idx_str[0]][idx_str[1]];
  332 + var endTime = this.data.type == 1 ? o.end_time : o.start_time;
  333 +
  334 + // 条件1:当目标顶部距离视口顶部距离小于视口的高度时
  335 + // 条件2:当目标底部距离视口顶部距离大于0时
  336 + // 当以上两个条件同时成立时,目标元素在视口中
  337 + if (target.top < view.height && target.bottom > 0) {
  338 +
  339 + let obj = null;
  340 + // 如果活动未结束,对时间进行处理
  341 + if (endTime - newTime > 0) {
  342 + let time = (endTime - newTime);
  343 + // 获取天、时、分、秒
  344 + let day = parseInt(time / (60 * 60 * 24));
  345 + let hou = parseInt(time % (60 * 60 * 24) / 3600);
  346 + let min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
  347 + let sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
  348 + obj = {
  349 + day: this.timeFormat(day),
  350 + hou: this.timeFormat(hou),
  351 + min: this.timeFormat(min),
  352 + sec: this.timeFormat(sec),
  353 + hide: 1
  354 + }
  355 + } else {
  356 + //活动已结束,全部设置为'00'
  357 + obj = {day: '00', hou: '00', min: '00', sec: '00'}
  358 + }
  359 +
  360 + var txt = "time_arr[" + idx_str[0] + "][" + idx_str[1] + "].djs";
  361 + th.setData({[txt]: obj});
  362 + }
  363 + });
  364 + //var e={djs:obj};
  365 + //arr_new.push(e);
341 366 }
342 367  
343   - time_arr.push(arr_new);
344   -
345   -
  368 + //time_arr.push(arr_new);
346 369 }
347   -
348   - this.setData({time_arr:time_arr});
  370 + //this.setData({time_arr:time_arr});
349 371  
350 372 },
351 373  
... ...
packageC/pages/group_list/group_list.wxml
... ... @@ -4,7 +4,7 @@
4 4 <block wx:for="{{list}}" wx:for-item="p_item" wx:for-index="p_idx">
5 5  
6 6 <block wx:for="{{p_item}}">
7   - <view class="list-item" bindtap="goto" data-pidx="{{p_idx}}" data-index="{{index}}" >
  7 + <view id="l_item_{{p_idx}}_{{index}}" class="list-item" bindtap="goto" data-pidx="{{p_idx}}" data-index="{{index}}" >
8 8 <view class="img-container">
9 9 <image class="img-block" src="{{imghost + item.original_img}}" data-val="{{item.original_img}}"
10 10 data-errorimg="list[{{p_idx}}][{{index}}].original_img" binderror="bind_bnerr2" lazy-load="true"></image>
... ...
pages/activity/pind_list/pind_list.js
... ... @@ -97,7 +97,7 @@ Page({
97 97  
98 98 onHide: function () {
99 99 //--清理定时器--
100   - clearInterval(this.timer);
  100 + clearInterval(this.data.timer);
101 101 this.setData({
102 102 isshow: 0
103 103 });
... ... @@ -111,15 +111,15 @@ Page({
111 111 //----倒计时函数-----
112 112 countDown() {
113 113 if (!this.data.goodlist) return false;
  114 + if (!this.data.is_timer) return false;
  115 +
114 116 var th = this;
115 117 // 获取当前时间,同时得到活动结束时间数组
116 118 var newTime = ut.gettimestamp();
117 119 var endTimeList = this.data.goodlist;
118 120 // 对结束时间进行处理渲染到页面
119 121 for (var i = 0; i < endTimeList.length;i++){
120   - var o = endTimeList[i];
121   - var endTime = o.end_time;
122   - if(th.data.type==0) endTime = o.start_time;
  122 +
123 123  
124 124 // 创建查询对象
125 125 let query = wx.createSelectorQuery();
... ... @@ -134,6 +134,11 @@ Page({
134 134 if (!target) return;
135 135 if (!target.id) return;
136 136 let idx= target.id.replace('kill-item','');
  137 +
  138 + var o = endTimeList[idx];
  139 + var endTime = o.end_time;
  140 + if(th.data.type==0) endTime = o.start_time;
  141 +
137 142 // 条件1:当目标顶部距离视口顶部距离小于视口的高度时
138 143 // 条件2:当目标底部距离视口顶部距离大于0时
139 144 // 当以上两个条件同时成立时,目标元素在视口中
... ...
pages/activity/seckill_list/seckill_list.js
... ... @@ -115,6 +115,7 @@ Page({
115 115  
116 116 //----倒计时函数,优化定时器只显示在可视范围内的-----
117 117 countDown() {
  118 + if (!this.data.goodlist) return false;
118 119 if (!this.data.is_timer) return false;
119 120  
120 121 var th = this;
... ... @@ -124,14 +125,11 @@ Page({
124 125 if (endTimeList == null) return null
125 126 // 对结束时间进行处理渲染到页面
126 127 for (var i = 0; i < endTimeList.length; i++) {
  128 + var oo = endTimeList[i];
  129 + if(!oo) continue;
127 130  
128 131 if (!this.data.is_timer) break;
129 132  
130   - var o = endTimeList[i];
131   - if(!o) continue;
132   - var endTime = o.end_time;
133   - if (th.data.type == 0) endTime = o.start_time;
134   -
135 133 // 创建查询对象
136 134 let query = wx.createSelectorQuery();
137 135 // 获取目标元素,并获取目标元素的信息
... ... @@ -146,6 +144,11 @@ Page({
146 144 if (!target.id) return;
147 145  
148 146 let idx= target.id.replace('kill-item','');
  147 + var o=endTimeList[idx];
  148 + var endTime = o.end_time;
  149 + if (th.data.type == 0) endTime = o.start_time;
  150 +
  151 +
149 152 // 条件1:当目标顶部距离视口顶部距离小于视口的高度时
150 153 // 条件2:当目标底部距离视口顶部距离大于0时
151 154 // 当以上两个条件同时成立时,目标元素在视口中
... ... @@ -187,8 +190,6 @@ Page({
187 190 }
188 191 });
189 192  
190   -
191   -
192 193 }
193 194 },
194 195  
... ...