Créer une page de liste de vente flash sur une page d'événement nécessite beaucoup de temps de tri algorithmique. J'y ai réfléchi pendant longtemps et j'ai essayé divers algorithmes, mais je n'ai pas pu le comprendre. Plus tard, j'ai demandé au prochain camarade de classe PHP en arrière-plan et. il a écrit un algorithme et me l'a montré, quand je l'ai regardé pour la première fois, j'ai senti que c'était un pur algorithme et qu'il ne pouvait pas être converti en effet DOM de la page. Mais après l'avoir lu deux fois, j'ai découvert qu'il pouvait. être fait, alors je l'ai modifié, mis en œuvre et partagé avec tout le monde en premier.
Les exigences de la page sont : de 11h à 20h, il y aura une vente flash toutes les heures. Si c'est l'heure actuelle, elle sera affichée comme une vente flash, et les produits précédents le seront. déplacé vers la dernière ligne, et ainsi de suite
Une séquence similaire des 11 premiers points est 11,12,13,14,15,16,17,18,19,20 (points) ;
L'ordre à 12 heures est 12,13,14,15,16,17,18,19,20, 11 (point)
L'ordre à 13 heures est
13,14,15,16,17,18,19,20,12,11 (points)
. . . . .
L'ordre final est 20, 19, 18, 17, 16, 15, 13, 12, 11 (points)
C'est le pur algorithme des camarades de classe en arrière-plan
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+"'>") } } }