js实现一个页面多个倒计时的3种方法

yizhihongxing

JS实现一个页面多个倒计时的3种方法

在一个网站中,可能会涉及到多个倒计时的展示,比如商品秒杀、优惠活动等。这时候,就需要实现一个页面中多个倒计时的效果。下面我们来介绍三种方式来实现这个功能。

方法一:使用setInterval()方法

setInterval()方法可以在指定的时间间隔(repeatTime)内,反复执行某个函数(fn)。我们可以利用setInterval()方法来实现多个倒计时。以下是一个示例代码:

// HTML
<div id="timer1"></div>
<div id="timer2"></div>

// JS
var targetTime1 = new Date("2022-01-01").getTime();
var targetTime2 = new Date("2022-02-01").getTime();

setInterval(function() {
    var nowTime = new Date().getTime();
    var diffTime1 = targetTime1 - nowTime;
    var minutes1 = Math.floor(diffTime1 / (1000 * 60));
    var seconds1 = Math.floor((diffTime1 % (1000 * 60)) / 1000);
    document.getElementById("timer1").innerHTML = minutes1 + ":" + seconds1;

    var diffTime2 = targetTime2 - nowTime;
    var minutes2 = Math.floor(diffTime2 / (1000 * 60));
    var seconds2 = Math.floor((diffTime2 % (1000 * 60)) / 1000);
    document.getElementById("timer2").innerHTML = minutes2 + ":" + seconds2;
}, 1000);

上面的代码中,我们根据两个倒计时的目标时间(targetTime1和targetTime2),计算出与当前时间的差值(diffTime1和diffTime2),并将秒数和分钟数分别展示在不同的div上。

方法二:使用setTimeout()方法

setTimeout()方法可以在指定的时间(delayTime)后,执行某个函数(fn)。通过不断地递归setTimeout()方法,我们可以实现一个类似于setInterval()的效果。以下是一个示例代码:

// HTML
<div id="timer1"></div>
<div id="timer2"></div>

// JS
var targetTime1 = new Date("2022-01-01").getTime();
var targetTime2 = new Date("2022-02-01").getTime();

function countdown1() {
    var nowTime = new Date().getTime();
    var diffTime = targetTime1 - nowTime;
    var minutes = Math.floor(diffTime / (1000 * 60));
    var seconds = Math.floor((diffTime % (1000 * 60)) / 1000);
    document.getElementById("timer1").innerHTML = minutes + ":" + seconds;

    if (diffTime < 0) {
        document.getElementById("timer1").innerHTML = "倒计时结束";
    } else {
        setTimeout(countdown1, 1000);
    }
}

function countdown2() {
    var nowTime = new Date().getTime();
    var diffTime = targetTime2 - nowTime;
    var minutes = Math.floor(diffTime / (1000 * 60));
    var seconds = Math.floor((diffTime % (1000 * 60)) / 1000);
    document.getElementById("timer2").innerHTML = minutes + ":" + seconds;

    if (diffTime < 0) {
        document.getElementById("timer2").innerHTML = "倒计时结束";
    } else {
        setTimeout(countdown2, 1000);
    }
}

countdown1();
countdown2();

上面的代码中,我们分别实现了两个倒计时函数(countdown1和countdown2),并通过递归setTimeout()方法,不断地调用这两个函数来实现倒计时效果。

方法三:封装倒计时组件

为了让代码更加整洁、简单,我们可以将倒计时的功能封装成一个组件。以下是一个示例代码:

// HTML
<div id="timer1"></div>
<div id="timer2"></div>

// JS
function Countdown(targetTime, element) {
    var self = this;
    this.targetTime = targetTime;
    this.element = element;

    this.timer = setInterval(function() {
        var nowTime = new Date().getTime();
        var diffTime = self.targetTime - nowTime;
        var minutes = Math.floor(diffTime / (1000 * 60));
        var seconds = Math.floor((diffTime % (1000 * 60)) / 1000);
        self.element.innerHTML = minutes + ":" + seconds;

        if (diffTime < 0) {
            self.element.innerHTML = "倒计时结束";
            clearInterval(self.timer);
        }
    }, 1000);
}

var timer1 = new Countdown(new Date("2022-01-01").getTime(), document.getElementById("timer1"));
var timer2 = new Countdown(new Date("2022-02-01").getTime(), document.getElementById("timer2"));

上面的代码中,我们封装了一个名为Countdown的组件,该组件可以接受目标时间(targetTime)和展示倒计时的元素(element)作为参数。通过封装组件,我们可以更加方便地实现多个倒计时的效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现一个页面多个倒计时的3种方法 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JS获取几种URL地址的方法小结

    关于 “JS获取几种URL地址的方法小结”,我准备了如下的攻略: 1. 前言 在前端开发中,获取URL地址的能力是非常常见也非常重要的技能。 获取URL地址的方法也是多种多样的。 在本篇攻略中,我们会讲解JavaScript中获取URL地址的几个常用方法。 2. JavaScript获取URL地址的几种方法的小结 2.1. 通过window.location…

    JavaScript 2023年6月11日
    00
  • 分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]

    题目描述 给定 $n$ 条不平行的直线,它们组成的平面最多可以分成多少个部分? 前置知识 在掌握本题解之前,请确保对组合数学有一定的基础。对于初学者,推荐学习集合排列组合等基础知识。 解题思路 首先,可以从一个空间开始,再逐渐添加直线,最终求出能够分割出的区域总数。 假设空间中没有直线,那么初始情况下只有1个区域。每添加一条直线,都会增加一部分区域。添加第 …

    JavaScript 2023年5月28日
    00
  • 彻底弄懂 JavaScript 执行机制

    彻底弄懂 JavaScript 执行机制 JavaScript 的执行环境 JavaScript 代码的执行必须依赖一个执行环境,该执行环境可以是浏览器、 Node.js 服务器或其它解释器等等,而这些执行环境会为 JavaScript 提供几乎相同的对象和方法,但是在细节上或许会略有不同。 JavaScript 的执行过程 JavaScript 的执行过程…

    JavaScript 2023年5月28日
    00
  • Javascript 判断是否存在函数的方法

    判断函数是否存在是 JavaScript 编程中非常常见的问题,可以使用以下方法来完成: 1. 使用 typeof 来判断 JavaScript 中,当函数存在时,其类型为 “function”,可以利用这一点来判断函数是否存在。 if (typeof myFunction === "function") { // myFunction …

    JavaScript 2023年5月27日
    00
  • JS正则表达式验证数字代码

    下面我将详细讲解 JS 正则表达式验证数字代码的完整攻略。 步骤 1. 构建正则表达式 首先需要构建一个用于验证数字的正则表达式。一般来说,数字可以包含整数和小数,还可能有正负号。 验证整数和小数的正则表达式如下: /^-?\d+(\.\d+)?$/ 其中: ^ 表示字符串开始 -? 表示可以有一个可选的负号 \d+ 表示至少一个数字 (\.\d+)? 表示…

    JavaScript 2023年6月10日
    00
  • JS document对象简单用法完整示例

    让我们来详细讲解“JS document对象简单用法完整示例”的攻略。文本将被分为几个部分:介绍什么是document对象、document对象的一些属性和方法、示例说明。 什么是document对象? document 对象是指代整个文档的根节点,所有的HTML元素都是文档的后代,可以通过该对象来操作 HTML 页面。 document对象的属性和方法 d…

    JavaScript 2023年5月27日
    00
  • Vue中如何把hash模式改为history模式

    Vue中可以通过修改路由模式的方式,从默认的hash模式改为history模式。下面是具体的操作步骤: 1. 修改路由模式 在Vue项目中找到router文件夹,打开index.js文件,找到路由实例的创建代码部分(通常代码会类似如下): import Vue from ‘vue’ import Router from ‘vue-router’ import…

    JavaScript 2023年6月11日
    00
  • 图解JavaScript作用域链底层原理

    下面就为大家讲解一下“图解JavaScript作用域链底层原理”的完整攻略。 什么是作用域链? 作用域链指的是在 JavaScript 中,用于查找变量的一种机制。在 JavaScript 中,每个函数都有一个作用域链,它是由多个执行上下文(Execution Context)(如全局上下文、函数上下文等)的变量环境引用组成的链式结构。在查找变量时,Java…

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