javascript时间排序算法实现活动秒杀倒计时效果

yizhihongxing

让我详细讲解一下“javascript时间排序算法实现活动秒杀倒计时效果”的完整攻略。

1. 确定倒计时的结束时间

在开始编写代码之前,我们需要确定倒计时的结束时间。可以通过获取服务器时间来确保倒计时的准确性。

// 获取服务器时间,假设服务器返回的时间为 "2022-01-01 00:00:00" (UTC+8)
let serverTime = new Date('2022-01-01T00:00:00+08:00');

// 计算结束时间,假设活动持续时间为10分钟
let endTime = new Date(serverTime.getTime() + 10 * 60 * 1000);

2. 定时更新倒计时显示

获取倒计时的天、小时、分钟和秒数,可以通过以下代码实现:

let nowTime = new Date(); // 当前时间
let leftTime = endTime.getTime() - nowTime.getTime(); // 剩余时间
let leftDays = Math.floor(leftTime / (1000 * 60 * 60 * 24)); // 剩余天数
let leftHours = Math.floor((leftTime / (1000 * 60 * 60)) % 24); // 剩余小时数
let leftMinutes = Math.floor((leftTime / (1000 * 60)) % 60); // 剩余分钟数
let leftSeconds = Math.floor((leftTime / 1000) % 60); // 剩余秒数

有了倒计时的时间信息,可以使用模板字符串将其显示到页面上。

const countdownWrapper = document.querySelector('#countdown-wrapper');
countdownWrapper.innerHTML = `
  <div class="countdown-item">
    <div class="countdown-item-value">${leftDays}</div>
    <div class="countdown-item-label">天</div>
  </div>
  <div class="countdown-item">
    <div class="countdown-item-value">${leftHours}</div>
    <div class="countdown-item-label">小时</div>
  </div>
  <div class="countdown-item">
    <div class="countdown-item-value">${leftMinutes}</div>
    <div class="countdown-item-label">分钟</div>
  </div>
  <div class="countdown-item">
    <div class="countdown-item-value">${leftSeconds}</div>
    <div class="countdown-item-label">秒</div>
  </div>
`;

3. 时间排序算法实现

如果多个活动的倒计时需要同时显示,需要按照时间顺序对活动进行排序,可以使用排序算法来实现。

以下是一个简单的冒泡排序算法的实现。假设有一个包含多个活动结束时间的数组 dates,需要按照时间从早到晚的顺序排序。

function bubbleSort(dates) {
  let len = dates.length;
  for (let i = 0; i < len - 1; i++) {
    for (let j = 0; j < len - 1 - i; j++) {
      if (dates[j].getTime() > dates[j + 1].getTime()) {
        [dates[j], dates[j + 1]] = [dates[j + 1], dates[j]];
      }
    }
  }
  return dates;
}

// 示例:对三个活动的结束时间进行排序
let activity1 = new Date('2022-01-02T00:00:00');
let activity2 = new Date('2022-01-03T00:00:00');
let activity3 = new Date('2022-01-01T00:00:00');
let activityDates = [activity1, activity2, activity3];
activityDates = bubbleSort(activityDates); // 排序
console.log(activityDates); // [activity3, activity1, activity2]

4. 示例说明

以下是两个示例,说明如何使用以上攻略实现活动秒杀倒计时效果。

示例1:单个活动倒计时

假设只有一个活动需要倒计时,可以使用以下代码实现。

<div id="countdown-wrapper"></div>

<script>
  let serverTime = new Date('2022-01-01T00:00:00+08:00');
  let endTime = new Date(serverTime.getTime() + 10 * 60 * 1000);

  setInterval(() => {
    let nowTime = new Date(); // 当前时间
    let leftTime = endTime.getTime() - nowTime.getTime(); // 剩余时间
    let leftDays = Math.floor(leftTime / (1000 * 60 * 60 * 24)); // 剩余天数
    let leftHours = Math.floor((leftTime / (1000 * 60 * 60)) % 24); // 剩余小时数
    let leftMinutes = Math.floor((leftTime / (1000 * 60)) % 60); // 剩余分钟数
    let leftSeconds = Math.floor((leftTime / 1000) % 60); // 剩余秒数

    const countdownWrapper = document.querySelector('#countdown-wrapper');
    countdownWrapper.innerHTML = `
      <div class="countdown-item">
        <div class="countdown-item-value">${leftDays}</div>
        <div class="countdown-item-label">天</div>
      </div>
      <div class="countdown-item">
        <div class="countdown-item-value">${leftHours}</div>
        <div class="countdown-item-label">小时</div>
      </div>
      <div class="countdown-item">
        <div class="countdown-item-value">${leftMinutes}</div>
        <div class="countdown-item-label">分钟</div>
      </div>
      <div class="countdown-item">
        <div class="countdown-item-value">${leftSeconds}</div>
        <div class="countdown-item-label">秒</div>
      </div>
    `;
  }, 1000);
</script>

示例2:多个活动倒计时

假设要同时显示多个活动的倒计时,在页面上需要渲染多个倒计时组件,并且按照结束时间从早到晚的顺序进行排序。

<div id="countdowns-wrapper"></div>

<script>
  function bubbleSort(dates) {
    let len = dates.length;
    for (let i = 0; i < len - 1; i++) {
      for (let j = 0; j < len - 1 - i; j++) {
        if (dates[j].getTime() > dates[j + 1].getTime()) {
          [dates[j], dates[j + 1]] = [dates[j + 1], dates[j]];
        }
      }
    }
    return dates;
  }

  let serverTime = new Date('2022-01-01T00:00:00+08:00');
  let endTime1 = new Date(serverTime.getTime() + 5 * 60 * 1000); // 活动1结束时间
  let endTime2 = new Date(serverTime.getTime() + 10 * 60 * 1000); // 活动2结束时间
  let endTime3 = new Date(serverTime.getTime() + 15 * 60 * 1000); // 活动3结束时间
  let activityDates = [endTime1, endTime2, endTime3];
  activityDates = bubbleSort(activityDates); // 排序

  const countdownsWrapper = document.querySelector('#countdowns-wrapper');
  activityDates.forEach((endTime, index) => {
    const countdownWrapper = document.createElement('div');
    countdownWrapper.classList.add('countdown-wrapper');
    countdownWrapper.innerHTML = `
      <h2>活动${index + 1}倒计时</h2>
      <div class="countdown-items-wrapper">
        <div class="countdown-item">
          <div class="countdown-item-value left-days"></div>
          <div class="countdown-item-label">天</div>
        </div>
        <div class="countdown-item">
          <div class="countdown-item-value left-hours"></div>
          <div class="countdown-item-label">小时</div>
        </div>
        <div class="countdown-item">
          <div class="countdown-item-value left-minutes"></div>
          <div class="countdown-item-label">分钟</div>
        </div>
        <div class="countdown-item">
          <div class="countdown-item-value left-seconds"></div>
          <div class="countdown-item-label">秒</div>
        </div>
      </div>
    `;
    countdownsWrapper.appendChild(countdownWrapper);

    setInterval(() => {
      let nowTime = new Date(); // 当前时间
      let leftTime = endTime.getTime() - nowTime.getTime(); // 剩余时间
      let leftDays = Math.floor(leftTime / (1000 * 60 * 60 * 24)); // 剩余天数
      let leftHours = Math.floor((leftTime / (1000 * 60 * 60)) % 24); // 剩余小时数
      let leftMinutes = Math.floor((leftTime / (1000 * 60)) % 60); // 剩余分钟数
      let leftSeconds = Math.floor((leftTime / 1000) % 60); // 剩余秒数

      const leftDaysEl = countdownWrapper.querySelector('.left-days');
      const leftHoursEl = countdownWrapper.querySelector('.left-hours');
      const leftMinutesEl = countdownWrapper.querySelector('.left-minutes');
      const leftSecondsEl = countdownWrapper.querySelector('.left-seconds');

      leftDaysEl.innerHTML = leftDays;
      leftHoursEl.innerHTML = leftHours;
      leftMinutesEl.innerHTML = leftMinutes;
      leftSecondsEl.innerHTML = leftSeconds;
    }, 1000);
  });
</script>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript时间排序算法实现活动秒杀倒计时效果 - Python技术站

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

相关文章

  • JavaScript创建防篡改对象的方法分析

    JavaScript创建防篡改对象的方法分析 概述 在 JavaScript 中,对象的属性是可以被动态的添加和删除的,这也就为代码注入与篡改的攻击提供了空间。因此,我们需要一些手段来保护对象不受任意修改,这就是防篡改对象。 防篡改对象即不能被修改的对象,其中包含两种类型的属性: 可写属性:这类属性可以被修改。 不可写(读)属性:这类属性不能被修改。 在本篇…

    JavaScript 2023年5月28日
    00
  • js将json格式的对象拼接成复杂的url参数方法

    当我们需要向服务器发送一个API请求时,通常会将参数拼接在URL的末尾,这些参数可能来自于用户输入、配置文件、API返回的数据等。而如果参数很多或者有多层嵌套结构,手动拼接URL会变得非常麻烦。这时候,可以使用JavaScript将JSON格式的对象拼接成复杂的URL参数字符串。 方法一:手写递归函数 以下是手写递归函数的示例代码: function bui…

    JavaScript 2023年5月27日
    00
  • js中继承的几种用法总结(apply,call,prototype)

    JS中继承的几种用法总结(apply, call, prototype) 在JavaScript中,继承是一种通过一个对象获取另一个对象属性和方法的方式。在JavaScript的原始版本中,没有标准的面向对象编程方式,但是通过使用JavaScript中的一些基本原则和技巧,我们可以轻松地实现继承。 在JavaScript中,我们可以使用apply,call以…

    JavaScript 2023年5月27日
    00
  • JavaScript学习笔记之数组的增、删、改、查

    JavaScript学习笔记之数组的增、删、改、查 数组是JavaScript中最常用的数据结构之一,它可以存储一组数据,这组数据可以是相同类型或不同类型的值。本篇笔记将详细讲解JavaScript中数组的增、删、改、查操作。 数组的创建 在JavaScript中,可以通过以下几种方式来创建数组: 使用数组字面量语法 javascript const arr…

    JavaScript 2023年5月27日
    00
  • Javascript基础知识中关于内置对象的知识

    Javascript基础知识中关于内置对象的知识 Javascript中内置对象是指在语言中定义好的一些对象,可以直接使用,不需要进行任何的定义或引入。常见的内置对象有:String、Number、Boolean、Object、Array、Function、RegExp、Date等。 String对象 String对象表示文本字符串。它可以通过字面量、变量等…

    JavaScript 2023年6月10日
    00
  • JavaScript 映射器 array.flatMap()

    JavaScript的映射器array.flatMap()方法可以将一个数组的每个元素映射到另一个数组中,然后将所有的映射结果压缩成一个新数组。这个方法适用于一些场景,例如需要从一个二维数组中提取子数组元素,或者想要将多个数组合并成一个新的数组。下面是详细的攻略: 1. 语法 array.flatMap(callback(currentValue[, ind…

    JavaScript 2023年5月27日
    00
  • JavaScript requestAnimationFrame动画详解

    下面是详细讲解“JavaScript requestAnimationFrame动画详解”的完整攻略。 一、什么是requestAnimationFrame requestAnimationFrame是一个用于浏览器动画渲染的API,它可以被用来优化动画循环的性能。相较于使用setTimeout或setInterval方法,使用requestAnimatio…

    JavaScript 2023年6月10日
    00
  • javascript电商网站抢购倒计时效果实现

    让我来详细讲解一下“JavaScript电商网站抢购倒计时效果实现”的完整攻略。 一、了解倒计时的基本原理 在实现电商网站的抢购倒计时效果之前,我们需要先了解倒计时的基本原理,以便于后续的代码实现。 倒计时的基本原理是利用 JavaScript 中的定时器(setTimeout 或 setInterval)来不断地更新倒计时显示的时间,实现倒计时效果。 具体…

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