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日

相关文章

  • JS脚本实现网页自动秒杀点击

    让我对“JS脚本实现网页自动秒杀点击”的攻略给出一个完整的讲解吧。整个过程分为以下几个步骤: 第一步:分析网页结构和页面元素 在使用JS脚本实现自动秒杀之前,首先需要分析待秒杀页面的HTML结构和页面元素,确定需要点击的按钮(或链接)的CSS选择器,才能在JS中进行操作。 例如,假设要开发一个自动抢购京东上某一个商品的脚本,我们需要进入该商品页面,打开浏览器…

    JavaScript 2023年6月11日
    00
  • IE与FireFox的JavaScript兼容问题解决办法

    IE与FireFox的JavaScript兼容问题解决办法攻略 1. 兼容性问题简介 在开发Web前端应用程序时,我们常常需要使用JavaScript脚本语言完成交互功能、表单校验、动态效果等。然而,由于浏览器的种类繁多,不同浏览器对JavaScript的支持情况也存在差异,这可能会导致不同浏览器之间的兼容性问题。 特别是在IE浏览器和FireFox浏览器中…

    JavaScript 2023年6月10日
    00
  • javascript json字符串到json对象转义问题

    接下来我将为您详细讲解“JavaScript JSON字符串到JSON对象转义问题”的完整攻略。 背景 在JavaScript开发中,我们通常需要对JSON字符串进行解析,将其转换为JavaScript对象。JSON字符串是一种轻量级的数据格式,在不同的场景中被广泛使用。但是在实际开发中,我们可能会遇到JSON字符串中的特殊字符不能够被正确解析的情况,这时候…

    JavaScript 2023年5月27日
    00
  • SVG动画vivus.js库使用小结(实例代码)

    下面是一份详细的攻略,包含vivus.js库的使用方法及实例代码: 介绍 Vivus.js库是一个轻量级的javascript库,可以创建美观的SVG描边动画效果。它支持很多动态效果,例如从头开始显示、流线显示、延迟显示等等。 安装 首先,在你的html文档中引入vivus.js文件: <script src="vivus.js"&…

    JavaScript 2023年6月11日
    00
  • JS判断数组那点事

    JS判断数组那点事:完整攻略 在JavaScript中,我们可以使用各种方式来判断一个变量是否为数组。本攻略将介绍一些常用的方法以及它们的优缺点。 1. 使用typeof运算符 我们可以使用typeof运算符来获取变量的数据类型。对于数组而言,typeof将返回”object”。因此可以使用typeof判断传入的参数是否为”object”,如果是则继续判断是…

    JavaScript 2023年5月27日
    00
  • JS统计Flash被网友点击过的代码

    要统计Flash被网友点击过的次数,需要使用JavaScript监听Flash的点击事件并发送统计数据。以下是完整攻略: 步骤一:检测Flash是否存在 在HTML页面中,使用 object 或 embed 标签嵌入Flash对象,需要先判断Flash是否存在。 <div id="flashContainer"> <ob…

    JavaScript 2023年6月11日
    00
  • Web打印解决方案之普通报表打印功能

    现在我来详细讲解“Web打印解决方案之普通报表打印功能”的完整攻略。 一、概述 普通报表打印是指在Web页面中,将页面中显示的内容按照固定的格式进行排版,然后生成PDF文件,实现打印功能的需求。普通报表相对于复杂报表而言,通常指打印内容相对简单、排版结构较为固定的报表。 实现普通报表打印通常需要以下步骤: 根据需要打印的内容,设计报表模板; 将数据填充到报表…

    JavaScript 2023年5月28日
    00
  • JavaScript中String对象的使用方法以及实例

    String对象介绍JavaScript中String对象代表字符串类型,它是JavaScript中最常用的对象之一,而且由于字符串在JavaScript中非常常用,因此String对象中的方法也是非常丰富。 String对象的使用方法 常用方法: charAt(index):返回指定下标的字符。 concat(str1,str2):连接两个或多个字符串,返…

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