小程序实现计时器功能

下面是“小程序实现计时器功能”的完整攻略:

1. 准备工作

在开始编写计时器功能之前,需要先创建一个小程序项目,并在页面中引入 wx.createInnerAudioContext() 实现计时结束后的声音提示。

2. 计时器实现

2.1 变量定义和初始值设置

首先,需要在 data 中定义计时器相关的变量,例如当前计时器的状态、计时器显示的时间等:

data: {
  status: 0, // 0:未开始,1:进行中,2:已结束
  timer: null, // 计时器对象
  time: 60 // 初始时间
}

2.2 计时器开始和暂停操作

接着,在页面中需要添加开始和暂停计时器的按钮,并在对应的事件函数中编写计时器的逻辑。

开始计时器:

startTimer() {
  let that = this;
  // 如果当前计时器未开始或已结束,开始计时
  if (that.data.status === 0 || that.data.status === 2) {
    that.setData({
      status: 1
    });
    that.data.timer = setInterval(() => {
      that.setData({
        time: that.data.time - 1
      });
      // 当计时结束时,清除计时器并播放结束提示音
      if (that.data.time === 0) {
        clearInterval(that.data.timer);
        that.setData({
          status: 2
        });
        wx.createInnerAudioContext().src = '/audio/end.mp3';
        wx.createInnerAudioContext().play();
      }
    }, 1000)
  }
}

暂停计时器:

pauseTimer() {
  let that = this;
  if (that.data.status === 1) { // 如果当前计时器正在进行中,暂停计时器
    clearInterval(that.data.timer);
    that.setData({
      status: 0
    });
  }
}

2.3 计时器重置操作

最后,添加一个重置计时器的按钮,并在对应的事件函数中实现对计时器相关变量的重置:

resetTimer() {
  let that = this;
  clearInterval(that.data.timer);
  that.setData({
    status: 0,
    timer: null,
    time: 60
  });
}

3. 示例说明

示例一

在一个游戏小程序中,需要添加一个计时器功能,用于限制玩家每次游戏的时间。用户点击“开始游戏”按钮后,计时器开始计时,当计时结束时,游戏结束并跳转到游戏结果页面。

Page({
  data: {
    status: 0,
    timer: null,
    time: 60
  },
  startGame() {
    let that = this;
    if (that.data.status === 0 || that.data.status === 2) {
      that.setData({
        status: 1
      });
      that.data.timer = setInterval(() => {
        that.setData({
          time: that.data.time - 1
        });
        if (that.data.time === 0) {
          clearInterval(that.data.timer);
          that.setData({
            status: 2
          });
          wx.navigateTo({
            url: '/pages/result/result'
          })
        }
      }, 1000)
    }
  },
  pauseGame() {
    let that = this;
    if (that.data.status === 1) {
      clearInterval(that.data.timer);
      that.setData({
        status: 0
      });
    }
  },
  resetGame() {
    let that = this;
    clearInterval(that.data.timer);
    that.setData({
      status: 0,
      timer: null,
      time: 60
    });
  }
})

示例二

在一个健身小程序中,需要添加一个计时器功能,用于记录每个动作持续的时间。用户点击“开始训练”按钮后,计时器开始计时,并显示当前动作名称和剩余时间,当计时结束时,自动开始下一个动作,直到所有动作结束。

Page({
  data: {
    status: 0,
    timer: null,
    time: 30,
    actions: [ // 所有动作列表
      {
        name: '半蹲',
        time: 30
      },
      {
        name: '俯卧撑',
        time: 30
      },
      {
        name: '仰卧起坐',
        time: 30
      }
    ],
    currentAction: {
      name: '',
      time: 0
    }
  },
  startTraining() {
    let that = this;
    if (that.data.status === 0 || that.data.status === 2) {
      that.setData({
        status: 1
      });
      // 设置当前动作
      that.setData({
        currentAction: that.data.actions[0]
      });
      that.data.timer = setInterval(() => {
        that.setData({
          time: that.data.time - 1
        });
        if (that.data.time === 0) {
          clearInterval(that.data.timer);
          that.setData({
            status: 0,
            time: 30,
          });
          // 计时结束后,显示下一个动作
          let index = that.data.actions.indexOf(that.data.currentAction);
          if (index < that.data.actions.length - 1) {
            that.setData({
              currentAction: that.data.actions[index + 1],
              status: 1
            });
          } else {
            wx.showToast({
              title: '训练结束'
            });
          }
        }
      }, 1000)
    }
  },
  pauseTraining() {
    let that = this;
    if (that.data.status === 1) {
      clearInterval(that.data.timer);
      that.setData({
        status: 0
      });
    }
  },
  resetTraining() {
    let that = this;
    clearInterval(that.data.timer);
    that.setData({
      status: 0,
      timer: null,
      time: 30,
      currentAction: {
        name: '',
        time: 0
      }
    });
  }
})

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:小程序实现计时器功能 - Python技术站

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

相关文章

  • 详解堆的javascript实现方法

    详解堆的javascript实现方法 堆的定义 堆是一种特殊的树形数据结构,其每一个节点都有一个值,通常所表达的语义是“子节点的值都不小于(或都不大于)父节点的值”。堆可以用数组或者树形表示。堆的某个节点与其子节点之间还有一定的大小关系,因此堆又分为最大堆和最小堆。 堆的属性 最大堆:对于所有节点i的值均不小于它的子节点的值,根节点为最大值; 最小堆:对于所…

    JavaScript 2023年6月10日
    00
  • 详解js 创建对象的几种方法

    详解JS创建对象的几种方法 在JS中,我们经常需要创建各种各样的对象,如何更好地创建对象呢?下面让我们来一步步详解几种JS创建对象的方法。 1. 对象字面量 对象字面量是JS最简单的创建对象的方法。 let obj = { name: "Tom", age: 18, sayHi: function() { console.log(&quo…

    JavaScript 2023年5月27日
    00
  • JavaScript严格模式不支持八进制的问题讲解

    JavaScript 严格模式是一种在 JavaScript 中启用更严格语法的模式,目的是为了避免一些潜在的错误和不安全的行为。在严格模式下,一些语法和行为会有所限制和修改,其中就包括不支持八进制数字字面量。下面将对此问题进行详细讲解。 什么是八进制数字字面量? 在 JavaScript 中,我们可以用不同的进制来表示数字。除了默认的十进制以外,还支持八进…

    JavaScript 2023年6月10日
    00
  • JavaScript arguments.callee作用及替换方案详解

    JavaScript arguments.callee作用及替换方案详解 引言 在 JavaScript 中,我们经常会用到函数的 arguments 对象。使用 arguments 可以获取函数调用时传入的所有参数,而 arguments.callee 是 arguments 对象的一个属性,它引用当前函数本身。 在 ES5 中,arguments.cal…

    JavaScript 2023年6月10日
    00
  • js插件方式打开pdf文件(浏览器pdf插件分享)

    下面是关于“js插件方式打开pdf文件(浏览器pdf插件分享)”的完整攻略: 1. 准备工作 在实现该功能前,需要将需要打开的pdf文件上传到服务器,并记住该文件的访问地址。 2. 确认浏览器是否支持pdf插件 首先,需要确认当前浏览器是否提供了自带的pdf插件或者是否安装了第三方的pdf插件。 可以让用户打开一个测试页面,例如: <!DOCTYPE …

    JavaScript 2023年5月27日
    00
  • 5种 JavaScript 方式实现数组扁平化

    下面是我准备的详细的 “5种 JavaScript 方式实现数组扁平化” 的攻略: 概述 在实际的开发中,数组扁平化是一个经常用到的操作,其中数组扁平化就是将嵌套的多层数组转换成一层数组。本文将会介绍5种 JavaScript 方式实现数组扁平化的具体步骤。 1. 使用 reduce() 方法 该方式使用reduce方法将嵌套的多层数组转换成一层数组。具体步…

    JavaScript 2023年5月27日
    00
  • JS根据key值获取URL中的参数值及把URL的参数转换成json对象

    获取URL参数值 定义一个函数getUrlParam:利用正则表达式获取url参数的值 javascript function getUrlParam(name) { var reg = new RegExp(“(^|&)” + name + “=([^&]*)(&|$)”); var r = window.location.sear…

    JavaScript 2023年5月27日
    00
  • js用闭包遍历树状数组的方法

    JS用闭包遍历树状数组的方法,主要是为了实现对树形结构数据的深度遍历,下面是具体步骤: 1.构建树状结构数据 首先我们需要构建一棵树状结构数据,可以手动构建,也可通过API请求获取,以下是手动构建的代码示例: const treeData = [ { id: 1, title: ‘Node 1’, children: [ { id: 2, title: ‘N…

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