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 相关文章推荐
在Javascript中定义对象类别
Dec 22 Javascript
一个用js实现的页内搜索代码
May 23 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
Mar 09 Javascript
JQuery对id中含有特殊字符的转义处理示例
Sep 06 Javascript
table对象中的insertRow与deleteRow使用示例
Jan 26 Javascript
jquery修改网页背景颜色通过css方法实现
Jun 06 Javascript
JavaScript程序中实现继承特性的方式总结
Jun 24 Javascript
关于angularJs指令的Scope(作用域)介绍
Oct 25 Javascript
JavaScript基础之流程控制语句的用法
Aug 31 Javascript
jQuery实现的页面弹幕效果【测试可用】
Aug 17 jQuery
解决vue.js this.$router.push无效的问题
Sep 03 Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 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
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
表格 隔行换色升级版
2009/11/07 Javascript
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
如何用javascript计算文本框还能输入多少个字符
2015/07/29 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
python中import reload __import__的区别详解
2017/10/16 Python
Python遍历pandas数据方法总结
2018/02/09 Python
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
python程序封装为win32服务的方法
2021/03/07 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
高三毕业生自我鉴定
2013/12/20 职场文书
英语演讲稿范文
2014/01/03 职场文书
大学生毕业鉴定
2014/01/31 职场文书
家长学校实施方案
2014/03/15 职场文书
党的群众路线学习材料
2014/05/16 职场文书
终止劳动合同协议书
2014/10/05 职场文书
个人贷款授权委托书样本
2014/10/07 职场文书
博士生专家推荐信
2015/03/25 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
教师节联欢会主持词
2015/07/04 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL