详解微信小程序用定时器实现倒计时效果

yizhihongxing

下面是详解微信小程序用定时器实现倒计时效果的完整攻略。

步骤一:引入moment.js库

我们需要使用moment.js库来处理日期和时间。在小程序的App.js文件中引入moment.js库,代码如下:

// 引入moment.js库
const moment = require('./libs/moment.min.js');

// 将moment.js注册到全局变量
App({
  globalData: {
    moment: moment
  }
});

步骤二:获取倒计时时间

在Page的onLoad生命周期函数中,我们可以获取倒计时结束时间,代码如下:

onLoad: function () {
  // 倒计时结束时间
  const end_time = '2021-12-31 23:59:59';

  // 将倒计时结束时间转为时间戳
  const end_timestamp = this.getTimestamp(end_time);
}

其中,getTimestamp函数用来将日期字符串转为时间戳:

// 将日期字符串转为时间戳
getTimestamp: function (datetime) {
  const moment = getApp().globalData.moment;
  return moment(datetime).valueOf() / 1000;
}

步骤三:更新倒计时时间

我们可以在Page的onShow生命周期函数中使用定时器来更新倒计时时间,代码如下:

onShow: function () {
  // 更新倒计时时间
  this.updateCountdown();
},

// 更新倒计时时间
updateCountdown: function () {
  const end_time = '2021-12-31 23:59:59';
  const end_timestamp = this.getTimestamp(end_time);

  this.countdown_timer = setInterval(() => {
    const current_timestamp = Math.floor(new Date().getTime() / 1000);
    const diff_timestamp = end_timestamp - current_timestamp;
    const countdown = this.formatCountdown(diff_timestamp);

    this.setData({
      countdown: countdown
    });

    if (diff_timestamp <= 0) {
      clearInterval(this.countdown_timer);
    }
  }, 1000);
}

其中,formatCountdown函数用来格式化倒计时时间:

// 格式化倒计时时间
formatCountdown: function (diff_timestamp) {
  const moment = getApp().globalData.moment;

  const days = Math.floor(diff_timestamp / 86400);
  const hours = Math.floor((diff_timestamp % 86400) / 3600);
  const minutes = Math.floor((diff_timestamp % 3600) / 60);
  const seconds = diff_timestamp % 60;

  return moment.utc().hour(hours).minute(minutes).second(seconds).format('HH:mm:ss');
}

示例说明一:一个简单的倒计时效果

下面是一个简单的倒计时效果的示例代码,代码中的倒计时时间为10秒:

// 倒计时时间
const countdown_time = 10;

// 更新倒计时时间
this.updateCountdown();

// 更新倒计时时间
updateCountdown: function () {
  let countdown = countdown_time;

  this.countdown_timer = setInterval(() => {
    countdown--;

    this.setData({
      countdown: countdown
    });

    if (countdown <= 0) {
      clearInterval(this.countdown_timer);
    }
  }, 1000);
}

示例说明二:一个带有时分秒的倒计时效果

下面是一个带有时分秒格式的倒计时效果的示例代码,代码中的倒计时时间为3天10小时20分30秒:

// 倒计时结束时间
const end_time = '2021-12-31 23:59:59';

// 更新倒计时时间
this.updateCountdown();

// 更新倒计时时间
updateCountdown: function () {
  const end_timestamp = this.getTimestamp(end_time);

  this.countdown_timer = setInterval(() => {
    const current_timestamp = Math.floor(new Date().getTime() / 1000);
    const diff_timestamp = end_timestamp - current_timestamp;
    const countdown = this.formatCountdown(diff_timestamp);

    this.setData({
      countdown: countdown
    });

    if (diff_timestamp <= 0) {
      clearInterval(this.countdown_timer);
    }
  }, 1000);
}

整体的代码可以参考如下链接:

微信小程序倒计时示例代码

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解微信小程序用定时器实现倒计时效果 - Python技术站

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

相关文章

  • javascript去掉代码里面的注释

    下面是“JavaScript去掉代码里面的注释”的完整攻略: 步骤一:复制代码 首先,需要将所要去除注释的JavaScript代码复制到一个新的文本文件中。可以使用文本编辑器完成该步骤。 步骤二:使用正则表达式去除注释 在新的文本文件中,我们可以使用正则表达式(Regular Expression)去除代码里面的注释。以下是基于正则表达式的两个示例: 示例一…

    JavaScript 2023年6月11日
    00
  • js data日期初始化的5种方法

    接下来我将详细讲解“js data日期初始化的5种方法”。 1. 使用 Date() 方法初始化日期 Date() 是 JavaScript 内置的方法。如果没有传入参数,它将返回当前日期和时间。使用 Date() 可以通过不同方式传递参数,初始化日期。以下是5种使用 Date() 方法初始化日期的方法: 1.1 不带参数 let now = new Dat…

    JavaScript 2023年5月27日
    00
  • 记录-对象有哪些继承方式

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 原型链 温故而知新: 构造函数、原型和实例的关系:  每个构造函数都有一个原型对象,原型有一个属性指回构造函数,实例有一个内部指针指向原型。 思考:如果原型是另一个类型的实例呢?  那就意味着这个原型本身有一个内部指针指向另一个原型,相应的另一个原型也有一个指针指向另一个构造函数。这样就在实…

    JavaScript 2023年5月4日
    00
  • javascript设计模式 封装和信息隐藏(上)

    JavaScript设计模式:封装和信息隐藏(上) 在 JavaScript 中封装和信息隐藏是非常重要的概念,可帮助我们有效地组织代码并提高代码的可维护性。下面将详细讲解封装和信息隐藏的概念、实现和示例。 什么是封装和信息隐藏? 封装是指将变量、函数等有关联的内容放在一起,形成一个可供外部调用的实体。封装的目的是隐藏内部细节,实现对外部的保护和对内部的隔离…

    JavaScript 2023年6月10日
    00
  • javascript 取小数点后几位几种方法总结

    关于JavaScript取小数点后几位的方法,可以结合下面的代码和说明来进行总结: 一、使用toFixed方法 JavaScript内置的toFixed方法可以将一个数字四舍五入为指定小数位的数字字符串,具体语法如下: numObj.toFixed([digits]) 参数digits是可选的,表示需要保留的小数位数,如果不传入该参数则默认保留0位小数。调用…

    JavaScript 2023年6月11日
    00
  • js常用节点操作实例总结

    “js常用节点操作实例总结”是一篇介绍JavaScript常见DOM操作的文章,用于指导开发者在前端页面开发中操作DOM元素,实现网页动态交互的效果。以下是完整的攻略: 1. 获取DOM节点 在JavaScript中,首先需要获取目标节点才能对它进行操作。常见的获取DOM节点的方法包括: 1.1 getElementById document.getElem…

    JavaScript 2023年6月10日
    00
  • 同步异步动态引入js文件的几种方法总结

    同步、异步、动态引入js文件的几种方法总结 在Web开发中,为了更好地优化页面性能,我们需要对js文件的引入做些优化处理。其中包括同步引入、异步引入和动态引入js文件。下面将介绍这几种引入js文件的方法以及他们的使用场景。 同步引入 同步引入指的是在HTML文件中,直接使用<script>标签引入js文件。使用同步引入的时候,浏览器会在下载js文…

    JavaScript 2023年5月27日
    00
  • pdf.js 使用

    pdf文件能够比较好的保留源格式,传输也比较方便,现PC端浏览器基本都可直接查看pdf文件,只是界面风格不怎么统一,但是手机端查看pdf文件就不能很好的只“预览”,往往都是自动下载到本地再查看,今天分享pdf.js,主要用于在线pdf预览,平时我使用比较多的场景就是培训手册。 我用的是1.1.159,版本比较旧,解压后文件只有3.66 MB。     使用方…

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