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

让我详细讲解一下“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日

相关文章

  • js数组实现权重概率分配

    下面是我对“js数组实现权重概率分配”的完整攻略: 概述 在编写JS代码时,经常会需要进行权重概率分配,即根据给定的权重,随机分配某个值。例如,我们可能需要根据一组商品的销量,按照销量大小进行分配,让销量高的商品出现的概率更大一些,从而提高展示效果。 JS中的数组提供了一种方便的实现方法。我们可以根据权重创建一个数组,数组的每个元素代表对应权重下的值,然后随…

    JavaScript 2023年5月27日
    00
  • 防止浏览器记住用户名及密码的简单实用方法

    请看下面的解释: 防止浏览器记住用户名及密码的简单实用方法 如果你担心你保存在浏览器中的用户名和密码被盗取或者暴露,那么最好的防范措施是不允许浏览器记住这些信息。虽然浏览器自带的自动填充功能可以为用户省去不少麻烦,但也有可能被利用导致泄露用户隐私,甚至容易导致经济损失。这里提供几种简单而实用的方法来防止浏览器记住你的用户名和密码。 方法一:添加autocom…

    JavaScript 2023年6月11日
    00
  • JavaScript setTimeout()基本用法有哪些

    JavaScript setTimeout()基本用法 setTimeout()是JavaScript中的一个内置函数,它可以在指定的时间间隔后执行一段代码。在JavaScript中,setTimeout()函数的用法非常广泛,常用于网页中的动画效果、延迟执行代码等。 setTimeout()函数的语法 setTimeout()函数的语法如下: setTim…

    JavaScript 2023年6月11日
    00
  • JFinal使用ajaxfileupload实现图片上传及预览

    以下是使用 JFinal 和 ajaxfileupload 实现图片上传及预览的完整攻略。 准备工作 首先,你需要在你的项目中引入 JFinal 和 ajaxfileupload,具体引入方式可以参考官方文档。 接着,你需要准备一个接口用于接收上传的图片,并返回图片的路径或其他信息,可以在你的 JFinal Controller 中编写一个如下的示例方法: …

    JavaScript 2023年6月11日
    00
  • JS/jQuery判断DOM节点是否存在的简单方法

    当我们使用 JavaScript 或者 jQuery 操作 DOM 节点时,有时候需要判断一个元素是否存在于页面中。以下是几种简单的方法来判断 DOM 节点是否存在。 方法一:使用 jQuery 长度属性 我们可以使用 jQuery 长度属性 .length() 来判断元素是否存在。如果元素不存在,它的长度为 0,反之则大于 0。 // 判断元素存在 if …

    JavaScript 2023年6月10日
    00
  • JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)

    JavaScript字符串对象 toLowerCase() 方法入门实例 toLowerCase() 方法简介 JavaScript 中的字符串对象有一个 toLowerCase() 方法,用于把字符串中的字母都转换成小写字母。该方法是字符串类型的实例方法,意味着只能通过字符串对象调用该方法。 toLowerCase() 方法语法 string.toLowe…

    JavaScript 2023年5月28日
    00
  • 简单实现ajax获取跨域数据

    实现ajax跨域获取数据在Web开发中非常常见,由于浏览器的同源策略,直接在页面中通过ajax获取跨域数据是不允许的,但是我们可以通过JSONP和CORS两种方式来实现跨域数据获取。 JSONP JSONP(JSON with Padding)是一种基于JSON的数据交互方式,它允许我们通过在页面上动态创建标签的方式来实现跨域数据获取。JSONP的原理是利用…

    JavaScript 2023年6月11日
    00
  • 聊一聊JavaScript作用域和作用域链

    下面是详细讲解“聊一聊JavaScript作用域和作用域链”的完整攻略。 JavaScript中的作用域 JavaScript中的作用域是指变量的适用范围,也就是变量能够被访问的区域。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。 全局作用域 全局作用域是指在所有函数外部定义的变量,它的作用域范围是整个JavaScript程序。在全局作…

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