小程序实现计时器功能

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

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日

相关文章

  • 浅谈jQuery异步对象(XMLHttpRequest)

    浅谈jQuery异步对象(XMLHttpRequest) 异步对象简介 XMLHttpRequest对象是JavaScript中进行HTTP通信的核心技术之一。它使得web应用程序可以通过JavaScript进行异步HTTP通信,从而在页面不刷新的情况下实现动态更新。jQuery在此基础上封装了自己的异步对象,使得开发者可以更加便捷地使用它来进行AJAX操作…

    JavaScript 2023年6月11日
    00
  • javascript函数的节流[throttle]与防抖[debounce]

    JavaScript函数的节流与防抖 在javascript开发中,有时候我们需要在频繁触发某些事件时,进行性能优化,防止事件处理函数被频繁调用而导致页面出现性能问题,这时,javascript的节流和防抖技术就能派上用场了。 什么是节流 节流(throttle)是一种控制事件触发频率的技术,它会将一定时间内发生的多次事件,限制成只触发一次事件。 具体来说,…

    JavaScript 2023年6月11日
    00
  • js冒泡法和数组转换成字符串示例代码

    让我来为大家详细讲解一下 “js冒泡法和数组转换成字符串示例代码” 的攻略。 js冒泡法 1. 什么是冒泡法? 冒泡法是一种基础的排序算法。它会重复地遍历数组,每次比较相邻两个元素的大小,并根据大小进行交换,直到数组顺序正确位置。 2. 冒泡法的具体实现 下面是冒泡法的详细代码: function bubbleSort(arr) { var len = ar…

    JavaScript 2023年5月28日
    00
  • javascript 三种编解码方式

    当我们编写JavaScript代码时,有时需要进行数据编解码,以确保信息传递正确,其中最常见的数据编解码方式包括:JSON、Base64、URL编解码。 JSON编解码 JSON是一种轻量级的数据交换格式,具有格式简单、易于阅读、易于编写、易于解析的特点。在JavaScript中,可以使用JSON对象的parse()方法将JSON字符串转换为JavaScri…

    JavaScript 2023年5月18日
    00
  • asp.net+js实现批量编码与解码的方法

    以下是“asp.net+js实现批量编码与解码的方法”的完整攻略。 一、背景 在一些网站开发中,可能会遇到需要对一些数据进行批量编码或者批量解码的需求。例如,对于一些包含特殊字符的字符串进行URL编码,或者将经过base64编码的数据进行解码等等。本篇攻略将介绍如何通过asp.net和javascript实现这些功能。 二、URL编码与解码 URL编码 在a…

    JavaScript 2023年5月19日
    00
  • JS超出精度数字问题的解决方法

    以下是关于JS超出精度数字问题的解决方法的完整攻略。 1. 问题背景 在使用JS进行数值运算时,可能会遇到精度丢失的问题,出现类似于以下的情况。 0.1 + 0.2 = 0.30000000000000004 这是因为JS采用64位双精度浮点数来存储数字,而二进制小数无法精确表示一些十进制小数,导致计算精度出现偏差。 2. 解决方法 为了解决这个问题,我们可…

    JavaScript 2023年5月28日
    00
  • javascript创建函数的20种方式汇总

    首先,我们需要明确“JavaScript创建函数的20种方式”是指通过不同的方法来创建JavaScript函数。下面将介绍其中的20种方式。 1.使用函数声明方式 函数声明方式就是使用function关键字来声明和定义函数。例如: function myFunction() { //函数体 } 2.使用函数表达式方式 函数表达式方式是使用函数字面量来创建函数…

    JavaScript 2023年5月27日
    00
  • Javascript立即执行函数(IIFE)实例详解

    Javascript立即执行函数(IIFE)实例详解 在Javascript中,立即执行函数指的是定义完函数后立即自动调用该函数,避免了函数命名污染全局变量的问题,同时可以更好地保护函数内部的变量隐私和封装性。下面就是关于Javascript立即执行函数的详细攻略。 什么是Javascript立即执行函数 Javascript立即执行函数的定义格式如下: (…

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