JS倒计时代码汇总

以下是详细的“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日

相关文章

  • Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统

    Bootstrap栅格系统是Bootstrap框架的一个重要组成部分,它可以帮助我们实现页面的自适应效果,让同一份代码在不同尺寸的设备上都能够呈现出良好的显示效果。下面是Bootstrap栅格系统的完整攻略: 什么是Bootstrap栅格系统 Bootstrap栅格系统由一系列的栅格列组成,每个栅格列的宽度是固定的,可以根据设备的屏幕尺寸进行自动调整。Boo…

    JavaScript 2023年6月1日
    00
  • JS获取并处理php数组的方法实例分析

    作为网站的作者,我来为大家详细讲解一下 “JS获取并处理php数组的方法实例分析” 的攻略。 1. 什么是PHP数组? 在PHP中,数组(array)是一种保存一个或多个值的数据结构。它可以在一个单独的变量中存储多个值,并且这些值可以是不同的类型。 PHP数组是一个关联数组,它可以使用数字或字符串作为键来访问元素。 下面是一个简单的PHP数组示例,其中元素使…

    JavaScript 2023年5月19日
    00
  • 推荐一个javascript的加密工具

    当我们需要在前端对一些敏感信息进行加密时,常常会使用JavaScript的加密工具。这里推荐两个常用的JavaScript加密工具。 1. CryptoJS CryptoJS是一个JavaScript加密器,它提供了多种加密算法,如AES、DES、Rabbit、MD5、SHA、HMAC等等。下面我们以AES加密为例,讲解使用CryptoJS进行加密的步骤。 …

    JavaScript 2023年5月19日
    00
  • 犀利的js 函数集合

    犀利的JS函数集合 介绍 犀利的JS函数集合是一些实用的JavaScript函数合集,可以帮助开发人员更高效地编写JavaScript代码。 安装 本函数集合可以直接在浏览器中使用,在HTML中引入js文件即可开始使用。 <script src="sharpjs.js"></script> 使用 类型判断: sha…

    JavaScript 2023年5月27日
    00
  • Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解

    下面是对“Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解”的完整攻略: BootstrapValidator简介 BootstrapValidator是一款基于jQuery和Bootstrap的强大表单验证插件。它能够快速、简单地实现表单验证功能,并且拥有丰富的配置选项,支持多种类型的表单验证规则。 Bootstra…

    JavaScript 2023年6月10日
    00
  • bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能

    下面将为您详细讲解关于“Bootstrap Validator模态框、JSP、表单验证和Ajax提交功能”的攻略。 什么是Bootstrap Validator? Bootstrap Validator是一种 jQuery 插件,可用于验证表单。它具有与Bootstrap框架相同的外观和感觉,并且可以轻松地用于您的Bootstrap项目。 Bootstrap…

    JavaScript 2023年6月10日
    00
  • javascript中类的定义方式详解(四种方式)

    下面是“JavaScript中类的定义方式详解(四种方式)”的完整攻略。 1. ES6中的class关键字 在ES6中添加了class关键字,使得JavaScript也具有了面向对象编程的能力。 使用class定义一个类,实例化一个类用关键字new来实现。 class Person { constructor(name, age) { this.name =…

    JavaScript 2023年5月27日
    00
  • 总结JavaScript中BigIn函数常见的属性

    下面是讲解总结JavaScript中BigIn函数常见属性的完整攻略。 1. BigInt函数的介绍 BigInt是JavaScript中的一个新特性,是一种全新的数字类型。BigInt类型可以表示任意大的整数,而不是限制在Number类型的最大安全整数范围内。BigInt类型使用类似整数的语法来表示,但需要在数字末尾添加一个n后缀。 2. BigInt函数…

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