JS实现商城秒杀倒计时功能(动态设置秒杀时间)

这里给出一个详细讲解JS实现商城秒杀倒计时功能(动态设置秒杀时间)的完整攻略,包含以下几个步骤:

步骤一:HTML结构

首先,在HTML页面中设置一个用来显示秒杀倒计时的元素,比如一个id为countdown<div>,这个元素用来显示剩余的天、时、分、秒。同时,还需要设置一个用来存储当前秒杀的时间戳的隐藏<input>元素,比如一个id为timestamp的隐藏<input>

下面展示示例的HTML结构:

<div id="countdown">
  <span id="days">00</span>
  <span id="hours">00</span>
  <span id="minutes">00</span>
  <span id="seconds">00</span>
</div>
<input type="hidden" id="timestamp" value="1598323200">

步骤二:获取并设置秒杀时间戳

接下来,在JS代码中,我们需要获取并设置当前秒杀的时间戳。这个时间戳可以通过后端接口获取,也可以直接在前端设置一个默认的值,比如下面这个示例的时间戳为2020年8月25日00:00:00对应的时间戳,即1598323200

示例代码:

const timestamp = document.getElementById('timestamp').value;

步骤三:倒计时计算与显示

在获取当前秒杀时间戳之后,我们需要根据当前时间和秒杀时间戳计算出剩余的天、时、分、秒,用来显示在页面中。

具体的计算方法如下:

// 倒计时计算
function countDown() {
  const now = new Date().getTime(); // 当前时间戳
  const diff = timestamp * 1000 - now; // 相差的时间戳
  if (diff <= 0) { // 秒杀时间已经过期
    clearInterval(intervalId); // 清除倒计时定时器
    document.getElementById('countdown').innerHTML = '秒杀已结束'; // 显示秒杀已结束
    return;
  }
  const remaining = { // 剩余的天、时、分、秒
    days: Math.floor(diff / (1000 * 60 * 60 * 24)),
    hours: Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)),
    minutes: Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)),
    seconds: Math.floor((diff % (1000 * 60)) / 1000)
  };
  // 在页面中显示剩余的天、时、分、秒
  document.getElementById('days').innerHTML = remaining.days < 10 ? "0" + remaining.days : remaining.days;
  document.getElementById('hours').innerHTML = remaining.hours < 10 ? "0" + remaining.hours : remaining.hours;
  document.getElementById('minutes').innerHTML = remaining.minutes < 10 ? "0" + remaining.minutes : remaining.minutes;
  document.getElementById('seconds').innerHTML = remaining.seconds < 10 ? "0" + remaining.seconds : remaining.seconds;
}

在计算出剩余的天、时、分、秒之后,我们需要将其显示在页面中。这里需要设置一个定时器,每秒钟调用一次countDown()函数来更新显示的剩余时间。

示例代码:

const intervalId = setInterval(countDown, 1000); // 每秒调用一次countDown()函数

示例说明

示例一:直接设置时间戳

假设我们希望在2020年8月25日00:00:00进行秒杀,如果当前时间在这之前,那么倒计时显示剩余的天、时、分、秒,如果当前时间在这之后,那么倒计时显示秒杀已结束。

我们直接在前端设置秒杀时间戳为2020年8月25日00:00:00对应的时间戳1598323200,在页面中添加上述HTML结构,并在JS代码中添加上述计算倒计时和显示的代码即可。

<div id="countdown">
  <span id="days">00</span>
  <span id="hours">00</span>
  <span id="minutes">00</span>
  <span id="seconds">00</span>
</div>
<input type="hidden" id="timestamp" value="1598323200">
const timestamp = document.getElementById('timestamp').value;

// 倒计时计算
function countDown() {
  const now = new Date().getTime();
  const diff = timestamp * 1000 - now;
  if (diff <= 0) {
    clearInterval(intervalId);
    document.getElementById('countdown').innerHTML = '秒杀已结束';
    return;
  }
  const remaining = {
    days: Math.floor(diff / (1000 * 60 * 60 * 24)),
    hours: Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)),
    minutes: Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)),
    seconds: Math.floor((diff % (1000 * 60)) / 1000)
  };
  document.getElementById('days').innerHTML = remaining.days < 10 ? "0" + remaining.days : remaining.days;
  document.getElementById('hours').innerHTML = remaining.hours < 10 ? "0" + remaining.hours : remaining.hours;
  document.getElementById('minutes').innerHTML = remaining.minutes < 10 ? "0" + remaining.minutes : remaining.minutes;
  document.getElementById('seconds').innerHTML = remaining.seconds < 10 ? "0" + remaining.seconds : remaining.seconds;
}

const intervalId = setInterval(countDown, 1000);

示例二:通过后端接口获取时间戳

假设我们通过后端接口获取秒杀时间戳,即在页面加载时,向后端发送一个API请求获取秒杀时间戳。我们可以使用XMLHttpRequest或者fetch来发送请求,获取到后端返回的时间戳后,设置timestamp元素的值即可。

<div id="countdown">
  <span id="days">00</span>
  <span id="hours">00</span>
  <span id="minutes">00</span>
  <span id="seconds">00</span>
</div>
<input type="hidden" id="timestamp" value="">

<script>
  // 向后端发送API请求,获取秒杀时间戳
  const xhr = new XMLHttpRequest();
  xhr.open('GET', '/api/seckill/timestamp');
  xhr.onreadystatechange = function () {
    if (xhr.readyState === XMLHttpRequest.DONE) {
      if (xhr.status === 200) {
        const timestamp = JSON.parse(xhr.responseText).timestamp;
        document.getElementById('timestamp').value = timestamp;
        const intervalId = setInterval(countDown, 1000);
      } else {
        console.error('API请求失败');
      }
    }
  };
  xhr.send();

  // 倒计时计算
  function countDown() {
    const now = new Date().getTime();
    const diff = timestamp * 1000 - now;
    if (diff <= 0) {
      clearInterval(intervalId);
      document.getElementById('countdown').innerHTML = '秒杀已结束';
      return;
    }
    const remaining = {
      days: Math.floor(diff / (1000 * 60 * 60 * 24)),
      hours: Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)),
      minutes: Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)),
      seconds: Math.floor((diff % (1000 * 60)) / 1000)
    };
    document.getElementById('days').innerHTML = remaining.days < 10 ? "0" + remaining.days : remaining.days;
    document.getElementById('hours').innerHTML = remaining.hours < 10 ? "0" + remaining.hours : remaining.hours;
    document.getElementById('minutes').innerHTML = remaining.minutes < 10 ? "0" + remaining.minutes : remaining.minutes;
    document.getElementById('seconds').innerHTML = remaining.seconds < 10 ? "0" + remaining.seconds : remaining.seconds;
  }
</script>

以上就是JS实现商城秒杀倒计时功能(动态设置秒杀时间)的完整攻略,希望能够帮助到大家。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现商城秒杀倒计时功能(动态设置秒杀时间) - Python技术站

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

相关文章

  • JavaScript Date 知识浅析

    JavaScript Date 知识浅析 什么是 JavaScript Date? JavaScript Date 是 JavaScript 提供的内置对象之一,用于处理日期和时间的相关操作。它允许您创建和格式化日期、获取和设置不同的日期和时间值,以及执行其他日期和时间操作。 如何创建 Date 对象? 要创建一个新的 Date 对象,可以使用以下语法: n…

    JavaScript 2023年5月27日
    00
  • js canvas实现擦除动画

    接下来我将详细讲解“js canvas实现擦除动画”的完整攻略。擦除动画是一种非常有趣和独特的动画效果,使用canvas API可以很容易地实现。下面是实现擦除动画的步骤: 步骤一:准备工作 首先,我们需要在HTML文件中创建一个canvas元素,以便我们能够在其上绘制任何内容。可以使用以下代码创建一个canvas元素: <canvas id=&quo…

    JavaScript 2023年6月10日
    00
  • JS中定时器的使用及页面切换时定时器无法清除问题的解决办法

    JS中定时器的使用及页面切换时定时器无法清除问题的解决办法 在开发中,定时器是经常使用的工具,可以让我们在某个时间间隔内执行一段代码。JS中常用的定时器有setTimeout和setInterval两种。 使用setTimeout setTimeout是在指定的一段时间后执行一段代码,且只会执行一次。可以使用clearTimeout取消定时器,代码示例如下:…

    JavaScript 2023年6月11日
    00
  • 自己动手封装的 ajax

    请允许我为您详细讲解一下如何自己动手封装的 Ajax。 概述 Ajax 是一种使用异步技术实现网页无需刷新就能与服务器进行数据交互的技术。在开发实际项目中,我们可能会频繁使用到 Ajax 技术。而现成的库和框架往往过于笨重,我们可以自己动手封装一个轻量级的 Ajax。 原理 封装 Ajax 的原理也很简单,实际上就是利用原生的 XMLHttpRequest …

    JavaScript 2023年6月11日
    00
  • 详解JavaScript中|单竖杠运算符的使用方法

    下面是对“详解JavaScript中|单竖杠运算符的使用方法”的完整攻略。 什么是“|”单竖杠运算符 在JavaScript中,“|”单竖杠运算符属于按位运算符之一。该运算符可将两个操作数转换成32位整数,并执行按位或操作。按位或操作返回一个32位的二进制数,每一位上的值都是将两个操作数的对应位进行或运算的结果。 单竖杠运算符在JavaScript中的应用 …

    JavaScript 2023年5月28日
    00
  • JS简单实现String转Date的方法

    以下是JS简单实现String转Date的方法的攻略。 1. 解析字符串为Date对象 首先要做的是将字符串解析为Date对象,可以使用内置函数 Date.parse 或 new Date。推荐使用 new Date 的方式。 // 方法一:使用Date.parse let dateString = ‘2021-08-12’; let date = new …

    JavaScript 2023年6月10日
    00
  • 页面间固定参数,通过cookie传值的实现方法

    实现页面间固定参数的传递,可以借助Cookie来实现。Cookie是一种在客户端保存数据的机制。在使用Cookie的过程中,客户端与服务器之间都会传输Cookie的值,这就使得在页面加载完成之后,Cookie中的值可以通过JavaScript等方式进行读取。 以下是实现方法: 1.页面A设置Cookie储存需要传递的参数 // 设置Cookie docume…

    JavaScript 2023年6月11日
    00
  • js前端实现word excel pdf ppt mp4图片文本等文件预览

    实现Word、Excel、PDF、PPT、MP4、图片等文件预览,可以通过前端技术结合第三方库来实现。 使用第三方库Viewer.js实现文件预览 Viewer.js是一个基于JavaScript的图像和文档查看器,它可以让你轻松地查看各种文件类型,包括图片、PDF、SVG、Microsoft Word、Microsoft Excel、Microsoft P…

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