javascript时间排序算法实现活动秒杀倒计时效果


Posted in Javascript onJanuary 28, 2021

制做一个活动页面 秒杀列表页 需要一个时间的算法排序 自己琢磨了半天想了各种算法也没搞出来,后来问了下一个后台的php同学 他写了个算法给我看了下 ,刚开始看的时候觉得这就是个纯算法,不能转化成页面的dom效果,可是再看了两遍发现可以, 于是我就改了改,实现了,先分享给大家。

页面需求是:从11点到20点 每隔一个小时一场秒杀 如果是当前时间就显示正在秒杀 之前的商品就往最后排 以此类推

类似最开始的11点顺序是 11,12,13,14,15,16,17,18,19,20(点);
到12点的顺序是 12,13,14,15,16,17,18,19,20,11(点)
到13点的顺序是 13,14,15,16,17,18,19,20,12,11(点)
。。。。。
最后的顺序是 20,19,18,17,16,15,13,12,11(点)

这是后台同学的那个纯算法

function show_test(hour)
 {
 p = ['13 dian','14 dian','15 dian ','16 dian','17 dian','18 dian','19 dian','20 dian'];
 console.log('原顺序是');
 console.log(p);
 date = new Date();
 curHour = date.getHours();
 pos = curHour - 13;
 //pos = hour;
 s = '活动'+ p[pos]+"正在进行";
 console.log(s);
 desc = '当前的顺序应该是';
 p.reverse();
 console.log(pos);
 
 tmp = []
 for(i = 0 ; i<pos; i++){
 tmp.push(p.pop());
 }
 p.reverse();
 p = p.concat(tmp.reverse());
 console.log(desc);
 console.log(p);
 console.log("\n\n");
 }

调用

var curHour=new Date().getHours();
show_test(curHour);

这个算法完美的实现所需要的那种需求所表述的样子 可是问题来了 怎么真正的转换为页面,于是琢磨之后我将它完美实现;

//首先定义一个包含了每个秒杀的商品的id和图片的数组 img1是商品图片 img2是秒杀时间 img3是商品描述

var data=[
 { id:1,
 time:11,
 img1:"1.jpg",
 img2:"11.jpg",
 img3:"111.jpg"
 
 },
 { id:2,
 time:12,
 img1:"2.jpg",
 img2:"22.jpg",
 img3:"222.jpg"
 
 },
 { id:3,
 time:13,
 img1:"3.jpg",
 img2:"33.jpg",
 img3:"333.jpg"
 
 },
 { id:4,
 time:14,
 img1:"4.jpg",
 img2:"44.jpg",
 img3:"444.jpg"
 },
 { id:5,
 time:15,
 img1:"5.jpg",
 img2:"55.jpg",
 img3:"555.jpg"
 },
 { id:6,
 time:16,
 img1:"6.jpg",
 img2:"66.jpg",
 img3:"666.jpg"
 },
 { id:7,
 time:17,
 img1:"7.jpg",
 img2:"77.jpg",
 img3:"777.jpg"
 },
 { id:8,
 time:18,
 img1:"8.jpg",
 img2:"88.jpg",
 img3:"888.jpg"
 },
 { id:9,
 time:19,
 img1:"9.jpg",
 img2:"99.jpg",
 img3:"999.jpg"
 },
 { id:10,
 time:20,
 img1:"10.jpg",
 img2:"101.jpg",
 img3:"1010.jpg"
 }

 ];

//对象数组排序 
function compare(propertyName) { 
 return function (object1, object2) { 
 var value1 = object1[propertyName]; 
 var value2 = object2[propertyName]; 
 if (value2 < value1) { 
 return -1; 
 }else if (value2 > value1) { 
 return 1; 
 }else { 
 return 0; 
 } 
 } 
} 
//因为现在的数组已经变成了一个复杂的数组 所以排序要用到根据对象的某个属性排序这歌方法
//这个方法在javascript高级程序设计里面有提到过 

 function itemShow(hour)
 {
 p=data;
 //当前时间
 curHour = hour; 
 //对应时间的数组下标

 pos = curHour - 11;
 if(pos<=0){ //如果没到11点就显示最开始的顺序
 pos=0;
 }else if(pos>=9){//如果超过20点 就完全倒序
 pos=9
 }
 s = '活动'+ p[pos]+"正在进行";
 console.log(s);
 //根据数组里的 时间这个属性反向排序
 p.reverse(compare("time"));
 console.log(pos);
 console.log(p);
 //定义一个临时数组存放过时的商品项
 tmp = []
 for(i = 0 ; i<pos; i++){
 tmp.push(p.pop());
 }
 //将剩余的再反相排序
 p.reverse(compare("time"));
 //将未到秒杀时间的商品项目与已经过期的数组链接
 p = p.concat(tmp.reverse(compare("time"))); //
 console.log(desc);
 console.log(p);

 for(var i=0;i<data.length;i++){
 if(i==0){//正在秒杀 
 $(".item").eq(0).append("<img src='"+p[i].img1+"' id="+p[i].id+">")
 $(".item").eq(0).append("<img src='"+"killsecond_now.jpg"+"'>")
 $(".item").eq(0).append("<img src='"+p[i].img3+"'>")
 }else{
 $(".item").eq(i).append("<img src='"+p[i].img1+"' id="+p[i].id+">")
 $(".item").eq(i).append("<img src='"+p[i].img2+"'>")
 $(".item").eq(i).append("<img src='"+p[i].img3+"'>")
 }
 } 

 
 }

这样就把算法实现成页面展示了,希望大家可以有所收获,理解javascript时间排序算法。

Javascript 相关文章推荐
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
Nov 24 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
Jul 01 Javascript
Spring MVC中Ajax实现二级联动的简单实例
Jul 06 Javascript
js实现随机抽选效果、随机抽选红色球效果
Jan 13 Javascript
JS中如何实现Laravel的route函数详解
Feb 12 Javascript
自定义事件解决重复请求BUG的问题
Jul 11 Javascript
Angular 1.x个人使用的经验小结
Jul 19 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
Aug 15 Javascript
vue 中Virtual Dom被创建的方法
Apr 15 Javascript
js实现双人五子棋小游戏
May 28 Javascript
react antd表格中渲染一张或多张图片的实例
Oct 28 Javascript
idea编译器vue缩进报错问题场景分析
Jul 04 Vue.js
javascript获取wx.config内部字段解决微信分享
Mar 09 #Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 #Javascript
jquery实现文本框textarea自适应高度
Mar 09 #Javascript
分享12个实用的jQuery代码片段
Mar 09 #Javascript
详解JavaScript正则表达式之分组匹配及反向引用
Mar 09 #Javascript
javascript html5移动端轻松实现文件上传
Mar 27 #Javascript
javascript事件绑定学习要点
Mar 09 #Javascript
You might like
php无限极分类递归排序实现方法
2014/11/11 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
CCPry JS类库 代码
2009/10/30 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
python处理cookie详解
2014/02/07 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
python属于解释语言吗
2020/06/11 Python
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
毕业设计计划书
2014/01/09 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
合作意向书范本
2014/03/31 职场文书
小学三年级学生评语
2014/04/22 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
教师节感谢信
2015/01/22 职场文书
收银员岗位职责范本
2015/04/07 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
Python中glob库实现文件名的匹配
2021/06/18 Python