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 相关文章推荐
escape、encodeURI、encodeURIComponent等方法的区别比较
Dec 27 Javascript
JQuery 学习笔记 选择器之五
Jul 23 Javascript
JavaScript 函数式编程的原理
Oct 16 Javascript
JQuery入门——事件切换之hover()方法应用介绍
Feb 05 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
Jun 12 Javascript
jQuery实现下拉框选择图片功能实例
Aug 08 Javascript
如何实现JavaScript动态加载CSS和JS文件
Dec 28 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
Sep 21 Javascript
原生Javascript插件开发实践
Jan 09 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
Apr 13 Javascript
浅谈使用React.setState需要注意的三点
Dec 18 Javascript
vue组件间的参数传递实例详解
Apr 26 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 中文处理函数集合
2008/08/27 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
PyQt5打开文件对话框QFileDialog实例代码
2018/02/07 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
护理自我鉴定范文
2013/10/06 职场文书
公司委托书怎么写
2014/08/02 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
北京导游词
2015/02/12 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL