Commit 2f1e718b777cdba5fed2181ddb636035e7dd680d
1 parent
e5519737
团购列表的定时器显示的优化
Showing
4 changed files
with
74 additions
and
46 deletions
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 | ... | ... |