JS倒计时代码汇总

yizhihongxing

以下是详细的“JS倒计时代码汇总”的攻略。

概述

倒计时在Web开发中非常有用,比如用于处理限时优惠促销,或者用于展示一些即将到来的重要事件。本文将介绍JS倒计时的一些常用代码,帮助开发者轻松地实现倒计时功能。

普通倒计时

普通倒计时的代码非常简单,在代码中设定截止时间,然后不断更新展示倒计时的信息即可。

const deadline = new Date('2022-01-01');

function getTimeRemaining(endtime){
  const total = Date.parse(endtime) - Date.parse(new Date());
  const seconds = Math.floor( (total/1000) % 60 );
  const minutes = Math.floor( (total/1000/60) % 60 );
  const hours = Math.floor( (total/(1000*60*60)) % 24 );
  const days = Math.floor( total/(1000*60*60*24) );
  return {
    'total': total,
    'days': days,
    'hours': hours,
    'minutes': minutes,
    'seconds': seconds
  };
}

function initializeClock(id, endtime){
  const clock = document.getElementById(id);
  const daysSpan = clock.querySelector('.days');
  const hoursSpan = clock.querySelector('.hours');
  const minutesSpan = clock.querySelector('.minutes');
  const secondsSpan = clock.querySelector('.seconds');

  function updateClock(){
    const t = getTimeRemaining(endtime);

    daysSpan.innerHTML = t.days;
    hoursSpan.innerHTML = ('0' + t.hours).slice(-2);
    minutesSpan.innerHTML = ('0' + t.minutes).slice(-2);
    secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);

    if(t.total<=0){
      clearInterval(timeinterval);
    }
  }

  updateClock();
  const timeinterval = setInterval(updateClock,1000);
}

initializeClock('clockdiv', deadline);

以上的代码通过获取设定的截止时间和当前时间之间的时间差计算出剩余的天数、小时、分钟和秒数,然后在页面中显示出来。同时设置一个定时器,每秒更新一次倒计时的信息,直到剩余时间为零。

带动画效果的倒计时

除了简单的倒计时外,我们通常还需要带有一些动画效果的倒计时。例如可以设定一个圆圈的形状,每秒更新圆圈的进度。下面是一个例子:

const deadline = new Date('2022-01-01');

function getTimeRemaining(endtime){
  const total = Date.parse(endtime) - Date.parse(new Date());
  const seconds = Math.floor( (total/1000) % 60 );
  const minutes = Math.floor( (total/1000/60) % 60 );
  const hours = Math.floor( (total/(1000*60*60)) % 24 );
  const days = Math.floor( total/(1000*60*60*24) );
  return {
    total,
    days,
    hours,
    minutes,
    seconds
  };
}

(function() {

    const deadline = new Date('2022-01-01');

    const daysSpan = document.querySelector('.days');
    const hoursSpan = document.querySelector('.hours');
    const minutesSpan = document.querySelector('.minutes');
    const secondsSpan = document.querySelector('.seconds');

    const daysProgress = document.querySelector('.progress-day');
    const hoursProgress = document.querySelector('.progress-hour');
    const minutesProgress = document.querySelector('.progress-minute');
    const secondsProgress = document.querySelector('.progress-second');

    function calculatePercentage(total, value) {
        return Math.floor((total - value) / total * 100);
    }

    function initializeClock() {

        const totalSeconds = (getTimeRemaining(deadline)).total / 1000;

        const dayTotalSeconds = 24 * 60 * 60;
        const hourTotalSeconds = 60 * 60;
        const minuteTotalSeconds = 60;

        const dayInterval = setInterval(() => {

            if (days === 0) {
                clearInterval(dayInterval);
            }

            days--;

            const dayPercentage = calculatePercentage(dayTotalSeconds, dayTotalSeconds - (days * dayTotalSeconds));
            daysSpan.innerHTML = days < 10 ? `0${days}` : days;
            daysProgress.style.strokeDashoffset = `calc(440 - (440 * ${dayPercentage}) / 100)`;

        }, dayTotalSeconds * 1000 / totalSeconds);

        let hours = (getTimeRemaining(deadline)).hours;
        const hourInterval = setInterval(() => {

            if (hours === 0) {
                clearInterval(hourInterval);
            }

            hours--;

            const hourPercentage = calculatePercentage(hourTotalSeconds, hourTotalSeconds - (hours * hourTotalSeconds));
            hoursSpan.innerHTML = hours < 10 ? `0${hours}` : hours;
            hoursProgress.style.strokeDashoffset = `calc(440 - (440 * ${hourPercentage}) / 100)`;

        }, hourTotalSeconds * 1000 / totalSeconds);

        let minutes = (getTimeRemaining(deadline)).minutes;
        const minuteInterval = setInterval(() => {

            if (minutes === 0) {
                clearInterval(minuteInterval);
            }

            minutes--;

            const minutePercentage = calculatePercentage(minuteTotalSeconds, minuteTotalSeconds - (minutes * minuteTotalSeconds));
            minutesSpan.innerHTML = minutes < 10 ? `0${minutes}` : minutes;
            minutesProgress.style.strokeDashoffset = `calc(440 - (440 * ${minutePercentage}) / 100)`;

        }, minuteTotalSeconds * 1000 / totalSeconds);

        let seconds = (getTimeRemaining(deadline)).seconds;
        const secondInterval = setInterval(() => {

            if (seconds === 0) {
                clearInterval(secondInterval);
            }

            seconds--;

            const secondPercentage = calculatePercentage(60, 60 - seconds);
            secondsSpan.innerHTML = seconds < 10 ? `0${seconds}` : seconds;
            secondsProgress.style.strokeDashoffset = `calc(440 - (440 * ${secondPercentage}) / 100)`;

        }, 1000);

    }

    initializeClock();

})();

以上代码中,通过一个SVG圆圈来实现带有进度显示的倒计时。根据截止时间和当前时间差,计算出剩余的天数、小时、分钟和秒数。然后分别为它们设定不同的定时器,每秒钟更新一次进度条的信息,直到计时结束。同时,还需要在定时器中为展示在页面中的剩余时间更新文字信息。

总结

以上是两种处理JS倒计时的常用代码。开发者可以根据具体需求选择其中一种或多种进行组合使用,实现自己想要的倒计时效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS倒计时代码汇总 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 程序开发中的几个请不要相信

    下面我将详细讲解“程序开发中的几个请不要相信”。 什么是“程序开发中的几个请不要相信”? 在程序开发领域,有一些观念被广泛传播和认可,但实际上它们并不一定正确。这些观念可能会导致代码质量下降、项目延期、甚至是项目失败。因此,在程序开发中我们需要警惕这些“请不要相信”的说法。 几个不可信的观念 以下是几个在程序开发中常见但不可信的观念: 1. “这个代码之前能…

    JavaScript 2023年6月11日
    00
  • JavaScript获取用户所在城市及地理位置

    JavaScript获取用户所在城市及地理位置可以通过浏览器的Geolocation API或第三方API实现。以下为详细攻略: 1. 使用浏览器的Geolocation API 1.1 获取经纬度 使用Geolocation API可以获取用户的经纬度信息,从而进一步获取用户所在城市等位置信息。 if (navigator.geolocation) { n…

    JavaScript 2023年6月11日
    00
  • JavaScript代码因逗号不规范导致IE不兼容的问题

    对于JavaScript代码而言,逗号的使用是非常普遍的,用于分割数组中的项、对象中的属性等等,在这些情况下逗号一般不会产生什么问题,但如果逗号使用不规范,就可能会导致IE浏览器无法解析JavaScript代码,从而出现兼容性问题。这种兼容性问题的解决方法比较简单,只需要遵守一些规范就可以了。 下面是解决这个兼容性问题的完整攻略: 1. 避免将逗号作为语句的…

    JavaScript 2023年5月18日
    00
  • 深入探究JS中的异步编程和事件循环机制

    深入探究JS中的异步编程和事件循环机制 在JavaScript中,异步编程是必不可少的。它可以使我们的程序变得更加高效,同时也可以避免一些由于阻塞线程而导致的问题,比如用户界面的卡顿等。异步编程的核心机制就是事件循环,下面将详细探究JavaScript中的异步编程和事件循环机制。 异步编程 JavaScript是单线程的语言,这意味着它只有一个主线程来处理执…

    JavaScript 2023年5月28日
    00
  • 可视化埋点平台元素曝光采集intersectionObserver思路实践

    下面是“可视化埋点平台元素曝光采集intersectionObserver思路实践”的完整攻略: 1. 背景介绍 在网站开发中,我们需要对用户行为进行数据采集和分析,从而改善用户体验并优化网站内容。埋点采集是一种常见的数据采集方式,其主要通过在网站代码中插入特定的埋点代码,捕获用户在网站中的各种操作行为。其中,元素的曝光采集是一个非常有意义的场景,可以记录某…

    JavaScript 2023年6月11日
    00
  • 一个简单横向javascript日期控件

    下面我将详细讲解如何创建一个简单横向JavaScript日期控件的攻略。这个控件可以轻松地让用户选择日期并显示在网页上。 步骤一:HTML结构 首先,在HTML文件中创建一个div容器,用来包含控件: <div id="datePicker"></div> 步骤二:CSS样式 为了让控件在页面上显示得好看,我们需要…

    JavaScript 2023年5月27日
    00
  • ES6新增的math,Number方法

    下面是ES6新增的math和Number方法的详细讲解: Math对象 Math.trunc() Math.trunc(x) 方法用于去除一个数的小数部分,返回整数部分。实现原理为直接舍去所有小数位。 示例代码: Math.trunc(4.9); //4 Math.trunc(-4.9); //-4 Math.sign() Math.sign(x)方法用来判…

    JavaScript 2023年6月10日
    00
  • 15个非常实用的JavaScript代码片段

    当涉及到在网站上添加或改善交互时,JavaScript 是一个非常有价值的语言。但是,编写大量代码段时,有时候容易感到身体力行的疲惫。 在这里我分享了 15 个实用的 JavaScript 代码段,这些代码段可以帮助你加快开发速度,并优化你的代码。下面我将逐一讲解这些片段的攻略。 1. 将数字转换成货币格式 在金融领域的网站中,通常需要将某个数字转换成货币格…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部