zoukankan      html  css  js  c++  java
  • 倒计时

    html部分

           <div class="count_down">
                <div class="z_time">
                    <div class="clock">
                        活动倒计时
                    </div>
                    <div class="time">
                        <span class="day1">0</span>
                        <span class="day2">0</span>
                        <i>天</i>
                        <span class="hour1">0</span>
                        <span class="hour2">0</span>
                        <i>时</i>
                        <span class="minute1">0</span>
                        <span class="minute2">0</span>
                        <i>分</i>
                        <span class="seconds1">0</span>
                        <span class="seconds2">0</span>
                        <i>秒</i>
                    </div>
                </div>
            </div>

    js部分

    var starttime = Date.parse(new Date('2020/7/16'));
            var timeArr;
            var timer = setInterval(function () {
                timeArr = [];
                var nowtime = Date.parse(new Date());
                var time = starttime - nowtime;
                if (time <= 0) {
                    clearInterval(timer);
                    $('.time').html('探店活动已结束');
                    return;
                }
                var day = parseInt(time / 1000 / 60 / 60 / 24);
                day = day >= 10 ? day : '0' + day;
                var hour = parseInt(time / 1000 / 60 / 60 % 24);
                hour = hour >= 10 ? hour : '0' + hour;
                var minute = parseInt(time / 1000 / 60 % 60);
                minute = minute >= 10 ? minute : '0' + minute;
                var seconds = parseInt(time / 1000 % 60);
                seconds = seconds >= 10 ? seconds : '0' + seconds;
                var str = day.toString() + hour.toString() + minute.toString() + seconds.toString();
                $('.day1').text(str[0]);
                $('.day2').text(str[1]);
                $('.hour1').text(str[2]);
                $('.hour2').text(str[3]);
                $('.minute1').text(str[4]);
                $('.minute2').text(str[5]);
                $('.seconds1').text(str[6]);
                $('.seconds2').text(str[7]);
            }, 1000);

    方法2

    var date1=new Date();  //开始时间,当前时间
    var date2=new Date(); //结束时间,需传入时间参数
    var date3=date2.getTime()-date1.getTime();  //时间差的毫秒数
    //计算出相差天数
    var days=Math.floor(date3/(24*3600*1000));
    //计算出小时数
    var leave1=date3%(24*3600*1000);    //计算天数后剩余的毫秒数
    var hours=Math.floor(leave1/(3600*1000));
    //计算相差分钟数
    var leave2=leave1%(3600*1000);        //计算小时数后剩余的毫秒数
    var minutes=Math.floor(leave2/(60*1000));
    //计算相差秒数
    var leave3=leave2%(60*1000);      //计算分钟数后剩余的毫秒数
    var seconds=Math.round(leave3/1000);
    console.log(" 相差 "+days+"天 "+hours+"小时 "+minutes+" 分钟"+seconds+" 秒");

    ...

    方法3  window.requestAnimationFrame  代替  setInterval()

    优点1:避免重复渲染隐藏元素

      2:一次集中DOM进行渲染 ,该回调函数会在浏览器下一次重绘之前执行

    var startTime = new Date('2020/10/13 10:25:10').getTime() //new Date().getTime();
    //  4 3600 * 4
    var continueTime = 100000;
    var T = null;
    //  获取页面元素
    var timeTag = document.getElementById('time'),
      descTag = document.getElementById('desc'),
      hourTag = document.getElementById('hour'),
      minuteTag = document.getElementById('minute'),
      secondTag = document.getElementById('second');
    
    
    //  用于返回距离活动开始或者结束的文案和时间
    function getTime(time, continueTime) {
      var result = {
        // times 22:00 场
        // desc 
        // hour
        // minute
        // second
      }
      var targetTime = new Date(time);
      var targetHour = targetTime.getHours();
      var targetMinute = targetTime.getMinutes();
      result.time = (targetHour < 10 ? '0' + targetHour : targetHour) + ':' + (targetMinute < 10 ? '0' + targetMinute : targetMinute) + "场";
    
    
      var nowTime = new Date().getTime();
      var chargeTime = null;
      if (nowTime < time) { // 当前时间小于活动开始时间
        chargeTime = (time - nowTime) / 1000;
        result.desc = "距离开始还有";
      } else if (nowTime < time + continueTime) { // 在活动区间内
        chargeTime = (time + continueTime - nowTime) / 1000;
        result.desc = "距离结束还有";
      } else { // 活动已经结束
        result.desc = "活动已经结束";
        result.hour = result.minute = result.second = 0;
        cancelAnimationFrame(T)
        // clearInterval(T);
        return result;
      }
      //   3599000 => h:m:s => 0 : 59 : 59
      result.hour = Math.floor(chargeTime / 3600);
      result.minute = Math.floor(chargeTime % 3600 / 60); // 不足一个小时(取余) 除以六十 向下取整
      result.second = Math.floor(chargeTime % 60);
      return result;
    }
    
    
    function formatTime(time) {
      if (time.hour < 10) {
        time.hour = '0' + time.hour;
      }
      if (time.minute < 10) {
        time.minute = '0' + time.minute;
      }
      if (time.second < 10) {
        time.second = '0' + time.second;
      }
    }
    
    
    function renderByTime() {
      var resultTime = getTime(startTime, continueTime);
      formatTime(resultTime);
      (timeTag.innerHTML != resultTime.time) && (timeTag.innerHTML = resultTime.time);
      (descTag.innerHTML != resultTime.desc) && (descTag.innerHTML = resultTime.desc);
      (hourTag.innerHTML != resultTime.hour) && (hourTag.innerHTML = resultTime.hour);
      (minuteTag.innerHTML != resultTime.minute) && (minuteTag.innerHTML = resultTime.minute);
      (secondTag.innerHTML != resultTime.second) && (secondTag.innerHTML = resultTime.second);
      window.requestAnimationFrame(renderByTime)
    }
    window.requestAnimationFrame(renderByTime)

     ...

  • 相关阅读:
    Spring、Spring Boot 和 Spring Cloud 的关系
    Spring Boot 如何设置支持跨域请求?
    什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?
    nginx配置域名,不要端口
    域名解析以及nginx服务器设置
    为什么使用nginx
    RabbitMQ下载与安装(window版)
    spring的@ComponentScan注解
    spring的@EnableScheduling注解
    日志切割: logrotate、python、shell实现
  • 原文地址:https://www.cnblogs.com/wxyblog/p/13187410.html
Copyright © 2011-2022 走看看