Commit 2f1e718b777cdba5fed2181ddb636035e7dd680d

Authored by yvan.ni
1 parent e5519737

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

packageC/pages/group_list/group_list.js
@@ -19,7 +19,8 @@ Page({ @@ -19,7 +19,8 @@ Page({
19 noMore: false, // 检测是否有更多数据,true为没有更多数据,false为还有数据 19 noMore: false, // 检测是否有更多数据,true为没有更多数据,false为还有数据
20 pageNum: 1, // 当前页数 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,8 +297,6 @@ Page({
296 var th = this; 297 var th = this;
297 // 获取当前时间,同时得到活动结束时间数组 298 // 获取当前时间,同时得到活动结束时间数组
298 let newTime = ut.gettimestamp(); 299 let newTime = ut.gettimestamp();
299 -  
300 -  
301 var time_arr=[]; 300 var time_arr=[];
302 301
303 for (let j = 0; j < this.data.list.length; j++) { 302 for (let j = 0; j < this.data.list.length; j++) {
@@ -309,43 +308,66 @@ Page({ @@ -309,43 +308,66 @@ Page({
309 // 对结束时间进行处理渲染到页面 308 // 对结束时间进行处理渲染到页面
310 for (var i = 0; i < endTimeList.length; i++) { 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 // if(th.data.type==0) endTime = o.start_time; 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,7 +4,7 @@
4 <block wx:for="{{list}}" wx:for-item="p_item" wx:for-index="p_idx"> 4 <block wx:for="{{list}}" wx:for-item="p_item" wx:for-index="p_idx">
5 5
6 <block wx:for="{{p_item}}"> 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 <view class="img-container"> 8 <view class="img-container">
9 <image class="img-block" src="{{imghost + item.original_img}}" data-val="{{item.original_img}}" 9 <image class="img-block" src="{{imghost + item.original_img}}" data-val="{{item.original_img}}"
10 data-errorimg="list[{{p_idx}}][{{index}}].original_img" binderror="bind_bnerr2" lazy-load="true"></image> 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,7 +97,7 @@ Page({
97 97
98 onHide: function () { 98 onHide: function () {
99 //--清理定时器-- 99 //--清理定时器--
100 - clearInterval(this.timer); 100 + clearInterval(this.data.timer);
101 this.setData({ 101 this.setData({
102 isshow: 0 102 isshow: 0
103 }); 103 });
@@ -111,15 +111,15 @@ Page({ @@ -111,15 +111,15 @@ Page({
111 //----倒计时函数----- 111 //----倒计时函数-----
112 countDown() { 112 countDown() {
113 if (!this.data.goodlist) return false; 113 if (!this.data.goodlist) return false;
  114 + if (!this.data.is_timer) return false;
  115 +
114 var th = this; 116 var th = this;
115 // 获取当前时间,同时得到活动结束时间数组 117 // 获取当前时间,同时得到活动结束时间数组
116 var newTime = ut.gettimestamp(); 118 var newTime = ut.gettimestamp();
117 var endTimeList = this.data.goodlist; 119 var endTimeList = this.data.goodlist;
118 // 对结束时间进行处理渲染到页面 120 // 对结束时间进行处理渲染到页面
119 for (var i = 0; i < endTimeList.length;i++){ 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 let query = wx.createSelectorQuery(); 125 let query = wx.createSelectorQuery();
@@ -134,6 +134,11 @@ Page({ @@ -134,6 +134,11 @@ Page({
134 if (!target) return; 134 if (!target) return;
135 if (!target.id) return; 135 if (!target.id) return;
136 let idx= target.id.replace('kill-item',''); 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 // 条件1:当目标顶部距离视口顶部距离小于视口的高度时 142 // 条件1:当目标顶部距离视口顶部距离小于视口的高度时
138 // 条件2:当目标底部距离视口顶部距离大于0时 143 // 条件2:当目标底部距离视口顶部距离大于0时
139 // 当以上两个条件同时成立时,目标元素在视口中 144 // 当以上两个条件同时成立时,目标元素在视口中
pages/activity/seckill_list/seckill_list.js
@@ -115,6 +115,7 @@ Page({ @@ -115,6 +115,7 @@ Page({
115 115
116 //----倒计时函数,优化定时器只显示在可视范围内的----- 116 //----倒计时函数,优化定时器只显示在可视范围内的-----
117 countDown() { 117 countDown() {
  118 + if (!this.data.goodlist) return false;
118 if (!this.data.is_timer) return false; 119 if (!this.data.is_timer) return false;
119 120
120 var th = this; 121 var th = this;
@@ -124,14 +125,11 @@ Page({ @@ -124,14 +125,11 @@ Page({
124 if (endTimeList == null) return null 125 if (endTimeList == null) return null
125 // 对结束时间进行处理渲染到页面 126 // 对结束时间进行处理渲染到页面
126 for (var i = 0; i < endTimeList.length; i++) { 127 for (var i = 0; i < endTimeList.length; i++) {
  128 + var oo = endTimeList[i];
  129 + if(!oo) continue;
127 130
128 if (!this.data.is_timer) break; 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 let query = wx.createSelectorQuery(); 134 let query = wx.createSelectorQuery();
137 // 获取目标元素,并获取目标元素的信息 135 // 获取目标元素,并获取目标元素的信息
@@ -146,6 +144,11 @@ Page({ @@ -146,6 +144,11 @@ Page({
146 if (!target.id) return; 144 if (!target.id) return;
147 145
148 let idx= target.id.replace('kill-item',''); 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 // 条件1:当目标顶部距离视口顶部距离小于视口的高度时 152 // 条件1:当目标顶部距离视口顶部距离小于视口的高度时
150 // 条件2:当目标底部距离视口顶部距离大于0时 153 // 条件2:当目标底部距离视口顶部距离大于0时
151 // 当以上两个条件同时成立时,目标元素在视口中 154 // 当以上两个条件同时成立时,目标元素在视口中
@@ -187,8 +190,6 @@ Page({ @@ -187,8 +190,6 @@ Page({
187 } 190 }
188 }); 191 });
189 192
190 -  
191 -  
192 } 193 }
193 }, 194 },
194 195