小程序实现计时器功能

yizhihongxing

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

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日

相关文章

  • JS函数本身的作用域实例分析

    JS函数本身的作用域实例分析 在JS中,函数拥有自身的作用域,也可以使用父级作用域中的变量。函数本身的作用域指的是在其内部可以访问的变量和函数。本文将详细讲解JS函数本身的作用域,以及两个具体的实例分析。 1. 函数内部作用域 函数内部可以访问的变量有两种,分别是自有变量和父级变量。 1.1 自有变量 自有变量指的是函数内部定义的变量,只能在函数内部访问。例…

    JavaScript 2023年6月10日
    00
  • 常用的javascript设计模式

    常用的JavaScript设计模式 设计模式是在经验总结的基础上,提炼出的一些经典模板化的软件设计经验。在JavaScript中,同样存在一些常用的设计模式,这些设计模式可以帮助开发者快速、高效地完成开发任务。下面是常用的JavaScript设计模式: 1. 单例模式 单例模式是指一个类只能被实例化一次,并且提供了访问该实例的全局访问点。它在JavaScri…

    JavaScript 2023年5月18日
    00
  • 你未必知道的JavaScript和CSS交互的5种方法

    当涉及到JavaScript和CSS之间的交互时,有许多技术和方法可以使用。这里介绍了5种你可能不知道的JavaScript和CSS交互的方法。 方法1:使用计算CSS属性 通过计算CSS属性并将其应用于元素,我们可以通过JavaScript动态更改样式。在下面的例子中,我们使用计算CSS属性的方法更改“box”的背景颜色: <div id=&quot…

    JavaScript 2023年5月27日
    00
  • js传值后台中文出现乱码的解决方法

    下面是详细讲解“js传值后台中文出现乱码的解决方法”的完整攻略: 问题描述 在前端页面使用 JavaScript 传递参数给后台时,中文参数会出现乱码! 根本原因 乱码的出现是因为前端传递参数时,使用了不同的字符集编码。而后台在解析字符时使用的编码集与前端传递的不同,就导致中文字符的解析出现了不一致的问题。 解决方法 下面介绍两条解决办法: 方法一:转码传递…

    JavaScript 2023年5月19日
    00
  • 学习LayUI时自研的表单参数校验框架案例分析

    下面是“学习LayUI时自研的表单参数校验框架案例分析”的完整攻略: 学习LayUI时自研的表单参数校验框架案例分析 前言 LayUI是一款基于jQuery的UI库,广泛应用于前端开发中。其提供了丰富的组件和插件,方便快捷地构建Web界面。在使用LayUI过程中,表单参数校验是绕不过去的一个步骤,为此我们研发了一套表单校验框架,下面将详细介绍我们的研发过程和…

    JavaScript 2023年6月10日
    00
  • File, FileReader 和 Ajax 文件上传实例分析(php)

    首先我们来介绍一下File、FileReader和Ajax文件上传,然后详细讲解与PHP语言相关的开发实例。 什么是File、FileReader和Ajax文件上传 File File是HTML5中的一个API,用于提供用户选择的文件。我们可以通过input标签中的type=”file”来实现文件选择,然后可以通过JavaScript代码获取到选择的文件的相…

    JavaScript 2023年6月10日
    00
  • JavaScript字符集编码与解码详谈

    JavaScript字符集编码与解码详谈 在JavaScript中,字符集编码与解码是十分重要的概念。在本文中,我们将从以下几个方面进行详细讲解。 字符集 字符集(Character Set)是一种字符编码的方式。不同的字符集使用不同的编码方式,来将字符映射成二进制数字。JavaScript中支持多种字符集,包括ASCII码、Unicode、UTF-8等。其…

    JavaScript 2023年5月20日
    00
  • JavaScript 表单处理实现代码

    关于“JavaScript 表单处理实现代码”的详细讲解,本文将分为以下三个部分来介绍。 一、表单处理实现代码的基本知识 在前端开发中,表单的作用是向后端服务器传输数据,因此表单处理是前端开发的核心技术之一。而 JavaScript 是前端开发的主要编程语言之一,它可以很好地与表单交互,实现表单的各种操作。下面是一些常用的表单处理实现代码。 1. 获取表单元…

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