解决在JS中阻止定时器“重复”开启问题、Vue中定时器的使用

简介: 这篇文章讨论了在JavaScript和Vue中如何避免定时器重复开启的问题,并提供了一个模拟场景和代码示例,演示了在开启新定时器前清除旧定时器的方法。

1、问题描述

在一些需求开发中、需要设定软件提供服务的时间段(营业时间)。这时可以选择定时器来实现、可以选择让定时器每隔一段时间检测当前时间是否在服务时间。到达服务时间、进入服务状态。未到服务时间、进入非服务时间段。可能会遇到的问题? 当进行不同服务的切换、退出等操作 需要多次经过定时器的方法时、造成的后果就是定时器开启多次。导致页面功能混乱。怎样解决这一个问题呢? 方法很简单、就是在开启定时器之前、先将上一个开启的定时器关闭(直接在开启定时器的代码之前、编写清除上一次设置的定时器)。这样、无论多少次经过开启定时器的方法、都始终能保持只有一个定时器在工作。

2、模拟一个场景

2.1 假如多次调用(或者业务流程必须经过)开启定时器的方法、就会造成定时器开启多次

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>定时器</title>
    <!-- 引入vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
    <div id="App">
        <h1>当前num:{
  
  {num}}</h1>
        <button @click="startTimer()">点我开启定时器</button>
        <button @click="StopTimer()">点我关闭定时器</button>

    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false  //设置为 false 以阻止 vue 在启动时生成生产提示
        let timerd = null

        //创建Vue实例
        new Vue({
            el: '#App',
            data: {
                value: "Vue",
                newTime: '',
                num: 1,
                // timerd: ''

            },
            methods: {

                StopTimer() {
                    console.log("当前关闭的定时器的值:" + timerd)
                    clearInterval(timerd)
                },
                startTimer() {
                    // clearInterval(timerd)
                    console.log(timerd)
                    console.error("开启了定时器")
                    timerd = setInterval(() => {
                        this.num++
                    }, 1000)

                    console.log("当前定时器的值:" + timerd)
                }
            },
        })
    </script>

</body>

</html>

2.2 测试效果

在这里插入图片描述

2.3 只需要稍微改动、在开启定时器之前、关闭上一个定时器

在这里插入图片描述

2.4 实现效果

在这里插入图片描述

3、定时器的基本使用常识

  • setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式。方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。
  • setTimeout() :在指定的毫秒数后调用函数或计算表达式。

3.1 setInterval()

  • 语法:setInterval(code,millisec,lang)
参数 描述
code 必需。要调用的函数或要执行的代码串。
millisec 必须。周期性执行或调用 code 之间的时间间隔,以毫秒计。
lang 可选。 JScript、VBScript 、 JavaScript

3.2 setTimeout()

  • 语法:setTimeout(code,millisec,lang)
参数 描述
code 必需。要调用的函数后要执行的 JavaScript 代码串。
millisec 必需。在执行代码前需等待的毫秒数。
lang 可选。脚本语言可以是:JScript 、 VBScript 、JavaScript

4、模拟定时器的开关

4.1 代码实例

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>定时器</title>
    <!-- 引入vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
    <div id="App">
        <h1>当前num:{
  
  {num}}</h1>
        <button @click="startTimer()">点我开启定时器</button>
        <button @click="StopTimer()">点我关闭定时器</button>

    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false  //设置为 false 以阻止 vue 在启动时生成生产提示
        let timerd = null

        //创建Vue实例
        new Vue({
            el: '#App',
            data: {
                value: "Vue",
                newTime: '',
                num: 1,
                // timerd: ''

            },
            methods: {

                StopTimer() {
                    console.log("当前关闭的定时器的值:" + timerd)
                    clearInterval(timerd)
                },
                startTimer() {                
                    console.error("开启了定时器")
                    timerd = setInterval(() => {
                        this.num++
                    }, 1000)

                    console.log("当前定时器的值:" + timerd)
                }
            },
        })
    </script>

</body>

</html>

4.2 测试效果

在这里插入图片描述
在这里插入图片描述

相关文章
|
2月前
|
JavaScript 前端开发 开发者
VUE 开发——Node.js学习(一)
VUE 开发——Node.js学习(一)
84 3
|
4月前
|
JSON JavaScript 前端开发
JavaScript 详解——Vue基础
【8月更文挑战第16天】
62 3
JavaScript 详解——Vue基础
|
1月前
|
JavaScript 前端开发 开发者
JavaScript框架React vs. Vue:一场性能与易用性的较量
JavaScript框架React vs. Vue:一场性能与易用性的较量
34 0
|
2月前
|
JavaScript 前端开发
js之一次性定时器
js之一次性定时器
15 1
|
2月前
|
JavaScript 前端开发
js之永久定时器
js之永久定时器
21 1
|
3月前
|
JavaScript 前端开发 API
Vue学习笔记3:对比纯JavaScript和Vue实现数据更新的实时视图显示
Vue学习笔记3:对比纯JavaScript和Vue实现数据更新的实时视图显示
|
2月前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
183 0
|
2月前
|
JavaScript
深入解析:JS与Vue中事件委托(事件代理)的高效实现方法
深入解析:JS与Vue中事件委托(事件代理)的高效实现方法
55 0
|
2月前
|
JavaScript 前端开发
前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信
前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信
|
3月前
|
前端开发 JavaScript 开发者
Express.js与前端框架的集成:React、Vue和Angular的示例与技巧
本文介绍了如何将简洁灵活的Node.js后端框架Express.js与三大流行前端框架——React、Vue及Angular进行集成,以提升开发效率与代码可维护性。文中提供了详细的示例代码和实用技巧,展示了如何利用Express.js处理路由和静态文件服务,同时在React、Vue和Angular中构建用户界面,帮助开发者快速掌握前后端分离的开发方法,实现高效、灵活的Web应用构建。
65 3