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 Math tan() 方法

    JavaScript中的Math.SQRT2属性是一个常数,表示2的平方根。以下是关于Math.SQRT2属性的完整攻略,含两个示例。 JavaScript Math对象的SQRT2属性 JavaScript的SQRT2属性是一个常数,表示2的平方根。下面是SQRT2属性的语法: Math.SQRT2 下面是一个SQRT2属性的示例: console.log…

    JavaScript 2023年5月11日
    00
  • javascript 冒号 使用说明

    下面是关于 JavaScript 冒号的使用说明: 什么是冒号 在 JavaScript 中,冒号(:)在对象字面量中用来分隔属性名和属性值,在 ES6 中则有更多的使用方式。下面我们来逐一讲解。 对象字面量 在对象字面量中,冒号用来分隔属性名和属性值。举个例子: const person = { name: ‘Tom’, age: 18 } 在这个例子中,…

    JavaScript 2023年6月11日
    00
  • JSON 客户端和服务器端的格式转换

    JSON(JavaScript 对象表示法)是一种轻量级数据交换格式,通常用于客户端与服务器端进行数据传输。在客户端和服务器端之间进行数据传输时,常常需要进行 JSON 格式的转换。接下来,我将为您提供一份详细的 JSON 客户端和服务器端的格式转换攻略。 JSON 格式转换 在进行 JSON 格式转换之前,我们首先需要了解两种形式的数据表示方法: JSON…

    JavaScript 2023年5月27日
    00
  • 5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例

    5个数组Array方法:indexOf、filter、forEach、map、reduce使用实例 一、介绍 数组是JavaScript中最常用的数据类型之一。使用数组的时候,我们经常需要使用到一些方法对数组进行操作,比如获取某个元素的下标、筛选元素、遍历元素、处理元素等等。本篇攻略将详细讲解五个数组Array方法:indexOf、filter、forEac…

    JavaScript 2023年5月27日
    00
  • JS课堂笔记(4.17-4.21)

    一、循环  1.在程序中,一组被重复执行的语句被称为循环体,能否继续重复执行,取决于循环的终止条件。由循环体及循环的终止条件组成的语句,被称为循环语句。 2.循环执行的过程是①第一次循环:第一次赋值,然后条件判断,执行循环体,最后执行累计。 ②非第一次循环:条件判断,执行循环体,最后执行累计。 3.continue,跳过本次进入下一次循环,从continue…

    JavaScript 2023年4月24日
    00
  • 仿3721首页模块拖曳移动效果js代码[可拖曳层移动层]

    “仿3721首页模块拖曳移动效果js代码[可拖曳层移动层]”是一种常见的网页可交互功能,下面我将详细讲解如何实现该功能的完整攻略: 1. 准备工作 在实现拖曳移动效果前,我们需要准备一些基础的工作: 1.在 HTML 文件中添加需要被拖曳的标签 2.使用 CSS 设置被拖曳标签的默认样式 3.导入拖曳移动所需的 JavaScript 库 2. 实现拖曳移动效…

    JavaScript 2023年6月11日
    00
  • javascript 拖动_cookie_ajax等

    JavaScript 是一门非常强大的编程语言,可以支持前端页面的实时交互。其中,拖动、cookie 和 Ajax 是 JavaScript 最为常用的功能之一。下面将详细讲解这些内容的完整攻略。 JavaScript 拖动 通过 JavaScript,可以实现网页元素的拖动效果。具体实现方式如下: 首先,通过 JavaScript 获取需要拖动的元素。 l…

    JavaScript 2023年6月10日
    00
  • js实现列表自动滚动循环播放

    实现列表自动滚动循环播放,可以通过JS的定时器+无缝滚动来实现。 以下是步骤: 1、创建HTML结构 首先我们要有一个HTML结构来存放我们要用JS来动态生成的滚动列表,例如: <ul id="scrollList"> <li>第1行内容</li> <li>第2行内容</li> …

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