添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
本文介绍了JavaScript中的setInterval和setTimeout的使用,分析了定时器时间间隔缩短导致的“越走越快”现象,并提供了防止多次初始化定时器导致的问题的解决方案。通过设置清除定时器来确保只有一个定时器在运行,从而避免间隔变短。 摘要由CSDN通过智能技术生成

19.js定时器,以及解释、解决多次点击/触发定时器越走越快——软设问题总结

19.1 js定时器

在菜鸟教程中介绍到:

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

两个方法都有三个参数:

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

19.2 定时器的使用

  • setInterval() 的使用:比如 点击按钮后每3秒 在控制台输出"3s"
	let btn = document.querySelector('button'); 
    btn.addEventListener('click', function() {  
        setInterval(function() {       
	        console.log("3s");
        }, 3000)
  • setTimeout() 的使用:比如 点击按钮后3秒 在控制台输出“3s”
	let btn = document.querySelector('button');
    btn.addEventListener('click', function() {
    	setTimeout(function() {
        	console.log("3s");
        }, 3000)

从例子的描述其实就可以看出来,使用 setInterval() 时,每3秒会输出一次,而使用 setTimeout() 时,只会在第一个3秒后输出一次,即

  • setInterval() 会执行多次
  • setTimeout() 只会执行一次

19.3 定时器越走越快的原因

因为 setTimeout() 只会执行一次,所以不会出现越走越快的问题; 那么这个问题就只用讨乱setInterval() 的情况

在上述例子中,本应每3秒输出一次,但在多次点击按钮后会变成每2秒、1秒… 就输出一次,即定时器时间间隔越来越短,就是所谓的定时器越走越快。

  • 其实这个原因很简单,在多次点击按钮时,多次创建了定时器,所以明面上看是“定时器越走越快”,其实是“多次初始化定时器”。
  • 所以其实并不是定时器越走越快,而是有多个定时器在执行,定时器里面的程序执行的频率提高了

19.4 解决定时器“越走越快”的问题

因为问题出现在“多次初始化定时器”,那就要在每次初始化定时器之前先执行清除操作,保证只有一个定时器在执行,就不会出现这样的问题了。

上述例子修改后的代码如下:

	let btn = document.querySelector('button');
    let time;
    btn.addEventListener('click', function() {
    	clearInterval(time); //清除之前的定时器
        time = setInterval(function() { //初始化现在的定时器      
	        console.log("3s");
        }, 3000)

注:这样做的结果就是,每点击一次按钮,就会重新等3秒才会进行下一次执行

这个效果常见的是使用在轮播图的切换图片

之前在项目中写了定时器来做循环播放,但是总是会有问题,开始是以为前后的HTML代码拼接的有问题,时间紧急的情况下反复改了很多也没什么效果,后来发现是js定时器问题,在这里记录一下。 (setinterval)多次初始化 使用js定时器(setinterval)首要的问题就是要记得清除,即调用(clearInterval)方法,由于没有使用定时器的经验,我一开始是没有清除定时器,程序每一次初始化的时候都调用一次定时器,之前的定时器实例没有被销毁,新的定时器又开始执行,就会出现1s变0.5s,0.5
解决JavaScript定时器问题 之前在项目中写了定时器来做循环播放,但是总是会有问题,开始是以为前后的HTML代码拼接的有问题,时间紧急的情况下反复改了很多也没什么效果,后来发现是js定时器问题,在这里记录一下。 (setinterval)多次初始化 使用js定时器(setinterval)首要的问题就是要记得清除,即调用(clearInterval)方法,由于没有使用定时器的经验,我一开始是没有清除定时器,程序每一次初始化的时候都调用一次定时器,之前的定时器实例没有被销毁,新的定时器又开始执行,就会出现1s变0.5s,0.5s变0.25秒的情况,从观感上来看就是定时
1,只执行一次的定时器 代码如下: [removed] //定时器 异步运行 function hello(){ alert(“hello”); } //使用方法名字执行方法 var t1 = window.setTimeout(hello,1000); var t2 = window.setTimeout(“hello()”,3000);//使用字符串执行方法 window.clearTimeout(t1);//去掉定时器 [removed] 2,重复执行的定时器 代码如下: [removed] function hello(){ alert(“hello”); } //重复执行某个方法
Hyper Text Markup Language:超文本标记语言. 什么是超文本:不仅仅是文本,还包括文本的样式(字体 大小 颜色等),还包括多媒体(图片、音频、视频). 和xml的区别:XML标签可以任意定制,HTML标签固定就有那么多种. 学习HTML主要学习有哪些标签,标签有哪些属性,标签和标签间的嵌套关系. html常用标签: 文本标签: 1:<h1></h1> ...<h6></h6>
本文实例为大家分享了js通过开始结束控制计时器的具体实现代码,供大家参考,具体内容如下 时间戳的使用的可以取消对多次点击事件产生效果的累加,譬如下文,运用时间戳,保证了在多次点击事件后不会对setInterval()中的时间进行叠加。 开始结束运用addEventlistener()来控制开始结束, 实时显示在你要显示的文本内容放置在setInterval()中,可实现实时显示的效果。 不足setInterval()方法所设置的时间并不能保证一直是1秒的,有误差,但是可通过前后Date()的不同控制在一定范围内才可执行,不过这里暂时没有设置这个,有空再补。 <!DOCTYPE html>
user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-overflow-scrolling: touch
阿里巴巴矢量图标库的使用,超详细用法 禁止犬吠: 怎么动态展示呢,就像点赞之后小心心变红那种 js定时器的用法,解决多次点击/触发定时器越走越快的问题 yzw95x: 有用,好评!表情包 js鼠标滚轮事件 IOnlyKnowHelloWorld: 我需要默认行为 也就是页面滚动 passive 改为 true 但会报错 谷歌浏览器都是这样吗 怎样让他能滚动且触发滚动事件 阿里巴巴矢量图标库的使用,超详细用法