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,mootools,dojo)使用适合自己的编程别名命名
Sep 14 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
Aug 14 Javascript
用js实现控件的隐藏及style.visibility的使用
Jun 14 Javascript
js获取微信版本号的方法
May 12 Javascript
为什么JavaScript没有块级作用域
May 22 Javascript
js中toString()和String()区别详解
Mar 23 Javascript
JavaScript使用ZeroClipboard操作剪切板
May 10 Javascript
详解基于node的前端项目编译时内存溢出问题
Aug 01 Javascript
原生js封装添加class,删除class的实例
Nov 06 Javascript
原生JavaScript实现滑动拖动验证的示例代码
Dec 06 Javascript
jQuery实现简单聊天室
Feb 08 jQuery
小程序实现上传视频功能
Aug 18 Javascript
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自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
JS继承--原型链继承和类式继承
2013/04/08 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
Python简单计算文件夹大小的方法
2015/07/14 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
Python range、enumerate和zip函数用法详解
2019/09/11 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
利用Python的folium包绘制城市道路图的实现示例
2020/08/24 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
《手指教学》反思
2014/02/14 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
推荐信模板
2014/05/09 职场文书
2014年仓库工作总结
2014/11/20 职场文书
求职自我评价怎么写
2015/03/09 职场文书
mysql中between的边界,范围说明
2021/06/08 MySQL