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 最近浏览过的商品的功能实现代码
May 14 Javascript
js下判断 iframe 是否加载完成的完美方法
Oct 26 Javascript
基于jquery的关于动态创建DOM元素的问题
Dec 24 Javascript
最新的10款jQuery内容滑块插件分享
Sep 18 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
Apr 14 Javascript
JS实现将人民币金额转换为大写的示例代码
Feb 13 Javascript
JavaScript实现继承的4种方法总结
Oct 16 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
Dec 10 Javascript
Vue异步组件使用详解
Apr 08 Javascript
前端构建工具之gulp的语法教程
Jun 12 Javascript
微信小程序基于picker实现级联菜单
Feb 15 Javascript
基于vue hash模式微信分享#号的解决
Sep 07 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 变量定义方法
2009/06/14 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
Symfony2学习笔记之插件格式分析
2016/03/17 PHP
php批量修改表结构实例
2017/05/24 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
javascript 面向对象编程基础 多态
2009/08/21 Javascript
动态加载js和css(外部文件)
2013/04/17 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
对Js OOP编程 创建对象的一些全面理解
2016/07/26 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python求导数的方法
2015/05/09 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
会计电算化毕业生自荐信
2014/03/03 职场文书
学生会主席竞聘书
2014/03/31 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
民间借贷被告代理词
2015/05/23 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python