JavaScript 시간 정렬 알고리즘은 이벤트 플래시 카운트다운 effect_javascript 기술을 구현합니다.

WBOY
풀어 주다: 2016-05-16 15:11:19
원래의
1062명이 탐색했습니다.

이벤트 페이지 플래시 판매 목록 페이지를 만들려면 오랜 시간 동안 고민하고 다양한 알고리즘을 시도했지만 나중에 다음 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+"'>")
    }
   } 

   
  }
로그인 후 복사
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!