>  기사  >  웹 프론트엔드  >  JS는 사용자 입력 분을 기준으로 카운트다운 기능을 구현합니다.

JS는 사용자 입력 분을 기준으로 카운트다운 기능을 구현합니다.

高洛峰
高洛峰원래의
2016-12-07 09:23:391594검색

더 이상 쓸데없는 소리는 하지 마세요. 그냥 코드를 게시하겠습니다. 구체적인 코드는 다음과 같습니다.

사실 이 카운트다운은 예전에도 많이 접했는데, 그냥 다른 분들의 소스코드를 그대로 활용했습니다.
프로젝트의 요구에 부응하여 마침내 진지하게 받아들이고 겉보기에 간단해 보이는 문제를 해결하는 데 일주일이 걸렸습니다.
소스코드는 직접 복사해서 붙여넣기 가능합니다.

중복 버전 + 단순화 버전.

<!DOCTYPE html> 
<html> 
  <head> 
    <meta charset="utf-8"> 
  <title></title> 
 </head> <body> 
  <script type="text/javascript"> 
    var createTime = &#39;2016-11-14 10:20:00&#39;;//开始时间 
    var limitTimes = 10;//时间长度 
    // 倒计时 入口 
    countdowns = window.setInterval(function(){ 
      var arr = cutDoowns(limitTimes,createTime); 
      document.write(formatDate(arr[0])+&#39;:&#39;+formatDate(arr[1])+&#39;:&#39;+formatDate(arr[2])+&#39;</br>&#39;); 
      if(arr[2]){ 
        document.write(&#39;时间到!&#39;); 
      } 
    },1000); 
  
    /* 
      s,10分钟后的具体日期: 
      date,开始时间 
      然后转化成毫秒比较,所得的差值化成分秒,就是倒计时的分秒。 
     */
    function cutDoowns(s,date){ 
      console.log(&#39;&#39;); 
      var flag = false; 
      var arr = [];//arr[0]:分,arr[1]:秒,arr[2]:返回boolean 
      var now = new Date();//当前时间 
      var now1 = new Date(date);//开始时间 
      console.log(&#39;开始时间 now1: &#39;+now1); 
      now1.setMinutes(now1.getMinutes()+s);//10分钟后的时间 
      console.log(&#39;当前时间 now :&#39;+now); 
      console.log(&#39;10分钟时 now1:&#39;+now1); 
  
      // 转化成年月日 时分秒 格式 
      var n = now.getFullYear()+&#39;/&#39;+(now.getMonth()+1)+&#39;/&#39;+now.getDay()+&#39; &#39;+now.getHours()+&#39;:&#39;+now.getMinutes()+&#39;:&#39;+now.getSeconds(); 
      var n1 = now1.getFullYear()+&#39;/&#39;+(now1.getMonth()+1)+&#39;/&#39;+now1.getDay()+&#39; &#39;+now1.getHours()+&#39;:&#39;+now1.getMinutes()+&#39;:&#39;+now1.getSeconds(); 
      // 日期转化成毫秒 
      var time1 = (new Date(n)).getTime(); 
      var time2 = (new Date(n1)).getTime(); 
      // 毫秒转日期格式 
      var time11 = new Date(time1); 
      var time21 = new Date(time2); 
      console.log(&#39;当前时间:&#39;+n+&#39;,转化成毫秒:&#39;+time1+&#39;,time11:&#39;+time11); 
      console.log(&#39;10分钟时:&#39;+n1+&#39;,转化成毫秒:&#39;+time2+&#39;,time21:&#39;+time21); 
  
      var surplusSec = time2-time1;//距离解锁剩余毫秒 
  
      if(surplusSec<=0){ 
        clearInterval(countdowns); 
        flag = true; 
        return arr = [00,00,flag]; 
      } 
  
      var minute = Math.floor(surplusSec/1000/60);//分钟 
      var second = Math.floor((surplusSec-minute*60*1000)/1000);//剩余秒数 
      console.log(&#39;剩余时间,minute: &#39;+minute+&#39;,second: &#39;+second+&#39;,surplusSec:&#39;+surplusSec); 
      // var second = Math.round(surplusTimes);//秒数 
      console.log(&#39;剩余时间,minute: &#39;+minute+&#39;,second: &#39;+second+&#39;,surplusSec:&#39;+surplusSec); 
  
      arr = [minute,second,flag]; 
      return arr; 
    } 
  
    //格式化日期:把单字符转成双字符 
    function formatDate(n){ 
      n = n.toString(); 
      // console.log(n); 
      if(n.length<=1){ 
        n = &#39;0&#39;+n; 
      } 
      // console.log(n); 
      return n; 
    } 
  </script> 
  </body> 
</html>

단순 버전:

<!DOCTYPE html> 
<html> 
  <head> 
    <meta charset="utf-8"> 
    <title>打开调试工具,看效果!</title> 
  </head> 
  <body> 
  
  <script type="text/javascript"> 
    /* 
      打开调试工具,看效果! 
      思路: 
      1.设置一个倒计时的时间长度; 
      2.设置开始时间和当前时间; 
      3.结束时间是 开始时间+倒计时间; 
      4.结束毫秒-开始毫秒=剩余倒计时间。 
     */
      
    // 准备 
    var countdownMinute = 10;//10分钟倒计时 
    var startTimes = new Date(&#39;2016-11-16 15:55&#39;);//开始时间 new Date(&#39;2016-11-16 15:21&#39;); 
    var endTimes = new Date(startTimes.setMinutes(startTimes.getMinutes()+countdownMinute));//结束时间 
    var curTimes = new Date();//当前时间 
    var surplusTimes = endTimes.getTime()/1000 - curTimes.getTime()/1000;//结束毫秒-开始毫秒=剩余倒计时间 
      
    // 进入倒计时 
    countdowns = window.setInterval(function(){ 
      surplusTimes--; 
      var minu = Math.floor(surplusTimes/60); 
      var secd = Math.round(surplusTimes%60); 
      console.log(minu+&#39;:&#39;+secd); 
      if(surplusTimes<=0){ 
        console.log(&#39;时间到!&#39;); 
        clearInterval(countdowns); 
      } 
    },1000); 
  
  
  </script> 
  </body> 
</html>


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.