微信页面倒计时代码(解决safari不兼容date的问题)

yizhihongxing

接下来我将为您详细讲解如何在微信页面中使用倒计时代码,并解决 Safari 不兼容 Date 的问题。

标准的倒计时代码

首先,我们先来看一下在常规网页中使用的倒计时代码:

function countDown(second, callback) {
  let timer = setInterval(() => {
    callback(second--)
    if (second < 0) {
      clearInterval(timer)
    }
  }, 1000)
}

以上代码定义了一个 countDown 函数,传入倒计时秒数和回调函数,并使用 setInterval 以每秒 1000 毫秒的频率执行回调函数并倒计时,直到时间为 0。

在微信浏览器中常常会遇到 Safari 不兼容 Date 的问题,为了解决这个问题,我们需要使用正则表达式来将日期字符串转化为时间戳:

解决 Safari 不兼容 Date 的问题

function countDownSafari(second, callback) {
  let startTime = Date.parse(new Date()) / 1000
  let timer = setInterval(() => {
    let now = new Date()
    let endTime = Date.parse(now) / 1000
    let lag = endTime - startTime
    let timestamp = second - lag
    if (timestamp < 0) {
      clearInterval(timer)
      return
    }
    callback(timestamp)
  }, 1000)
}

以上代码首先获取当前时间戳并记录,借助 setInterval 获取某个时间点的时间戳并计算时间差,在 Safari 中也能够正常倒计时。在倒计时函数的回调中,我们将倒计时的秒数传入回调函数,可以根据需求将其展示在页面上。

接下来,我们来看两个具体的使用场景示例。

示例 1:倒计时兑换

假如我们需要实现一个倒计时兑换功能,当用户购买某个商品后,需要在 5 分钟之内进行兑换,否则兑换的机会就会失去。那么我们可以这么实现:

let exchangeTime = 5 * 60  // 兑换时间 5 分钟
let canExchange = true  // 是否可以进行兑换

// 点击兑换按钮的事件处理函数
function onClickExchange() {
  if (canExchange) {
    canExchange = false  // 设置不可再次兑换
    countDownSafari(exchangeTime, (timestamp) => {
      if (timestamp === 0) {
        canExchange = true  // 重新设置可用性
      }
      updateCountDownWithSecond(timestamp)
    })
  }
}

// 更新页面倒计时的函数
function updateCountDownWithSecond(second) {
  const minute = Math.floor(second / 60)
  const sec = second % 60
  const minuteStr = appendPrefixNumber(minute)
  const secStr = appendPrefixNumber(sec)
  const timeStr = `${minuteStr}:${secStr}`
  const countDownText = document.querySelector('.count-down-text')
  countDownText.innerText = timeStr
}

// 补全数字前缀
function appendPrefixNumber(num) {
  return num < 10 ? `0${num}` : num
}

以上代码中,点击兑换按钮时会首先判断是否可进行兑换,如果是,则调用倒计时函数开始倒计时,如果在倒计时过程中时间到了,就会重新设置兑换为可用状态,否则在页面上调用 updateCountDownWithSecond 函数来更新倒计时,而 appendPrefixNumber 函数则是为了保证倒计时数字占两位数,避免出现 1:3 这种丑陋的显示。

示例 2:倒计时抽奖

接下来假设我们需要实现一个倒计时抽奖功能,每隔一定时间就会随机抽取一名中奖用户,但是需要在页面上显示明确的倒计时。这个功能同样可以用我们上面提到的倒计时代码实现:

let drawInterval = 10  // 抽奖间隔 10 秒

// 点击开始抽奖按钮的事件处理函数
function onClickStartDraw() {
  setDrawInterval()
}

// 设置随机抽奖的间隔函数
function setDrawInterval() {
  countDownSafari(drawInterval, (timestamp) => {
    if (timestamp === 0) {
      doDraw()
      setDrawInterval()
    }
    updateCountDownWithSecond(timestamp)
  })
}

// 进行随机抽奖的函数
function doDraw() {
  const userList = ['user1', 'user2', 'user3', 'user4', 'user5']
  const luckyIndex = Math.floor(Math.random() * userList.length)
  const luckyUser = userList[luckyIndex]
  console.log(`恭喜 ${luckyUser} 中奖!`)
}

以上代码中,在点击开始抽奖按钮的事件处理函数中,我们首先调用了setDrawInterval,这个函数是借助倒计时函数实现的,每隔 10 秒就会调用一次 doDraw 函数完成随机抽奖的功能,如果在 10 秒的倒计时过程中用户又再次点击了“开始抽奖”按钮,就需要取消之前的倒计时,重新进行倒计时,这个可以通过 setTimeoutclearTimeout 来实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信页面倒计时代码(解决safari不兼容date的问题) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 详解JavaScript中return的用法

    让我们来详细讲解一下 “详解JavaScript中return的用法”: 什么是return? return 是 JavaScript 中的一个关键字,用于将函数的返回值返回给函数的调用者。 return 语句用于终止函数的执行,并返回函数的结果。 在函数中使用 return 在一个函数中,只要遇到 return 语句,函数的执行就会被中断,并将 retur…

    JavaScript 2023年5月27日
    00
  • 微信小程序实现数字滚动动画

    实现数字滚动动画需要用到小程序中的 animation 和 setData 方法,具体步骤如下: 1. 页面结构 在 wxml 文件中,需要准备一个数字占位符,以及一个用于显示数字的文本框。 <view class="number-placeholder">{{ number }}</view> <view …

    JavaScript 2023年6月11日
    00
  • javascript学习笔记(七)Ajax和Http状态码

    首先,需要明确Ajax和HTTP状态码的含义,Ajax是指通过异步请求从服务器端获取数据的技术手段,而HTTP状态码则是Web浏览器与Web服务器间通信的状态指示器,根据这些状态码可以判断请求是否成功,或者请求发生了什么问题。 Ajax和Http状态码完整攻略 Ajax Ajax(Asynchronous JavaScript and XML)是“异步 Ja…

    JavaScript 2023年5月28日
    00
  • JS与jQuery实现子窗口获取父窗口元素值的方法

    下面是我为您准备的详细攻略: JS与jQuery实现子窗口获取父窗口元素值的方法 在Web开发中,有时需要在子窗口中获取父窗口中的某个元素的值,常规情况下使用JS和jQuery可以实现此功能。下面将简单介绍两种实现方式。 1. 使用window.opener对象 window.opener对象是一个已经打开的窗口的引用,我们可以通过它在子窗口中访问父窗口的元…

    JavaScript 2023年5月28日
    00
  • 浅谈JavaScript数据类型

    浅谈JavaScript数据类型 JavaScript 是一种动态类型语言,对于不同类型的数据,需要进行不同的操作。因此,理解 JavaScript 的数据类型非常重要。本文将简单介绍 JavaScript 中的基本数据类型和对象类型。 基本数据类型 JavaScript 有 6 种基本数据类型,包括: 1. 数值(number) 数值类型是表示整数和浮点数…

    JavaScript 2023年5月18日
    00
  • js判断所有表单项不为空则提交表单的实现方法

    下面是实现方法的完整攻略: 一、获取表单元素 在提交表单前,我们首先需要获取表单里的所有输入元素的值,然后进行判断。可以使用以下方法获取表单元素: const input_elements = document.querySelectorAll(‘input[required]’); 上面的代码调用了 querySelectorAll()方法,选择了所有带有…

    JavaScript 2023年6月10日
    00
  • javascript中取前n天日期的两种方法分享

    当我们需要获取前n天的日期时,可以利用JavaScript的Date对象和数组的方法来完成,以下是两种实现方法: 方法一:使用Date对象 /** * 根据当前日期计算前n天的日期 * @param {Number} n 前n天的日期 */ function getNDaysBefore(n) { var now = new Date(); var last…

    JavaScript 2023年5月27日
    00
  • jQuery 开发者应该注意的9个错误

    jQuery 开发者应该注意的9个错误 引入jQuery的方式错误 错误的方式如下: <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> 在上述代码的例子中,我们通过引入了互联网上的jquery库来使用它。这种方式是错误的,因为该方…

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