JavaScript教程:设置时延

2024-01-23 06:32
文章标签 java 设置 教程 script 时延

本文主要是介绍JavaScript教程:设置时延,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在JavaScript中,有两种方式可以设置时延(time delay)。第一种方式很简单,这种方法会先等待所设定的时长,然后再运行函数代码。第二种也是一样,只是它会重复运行函数代码。

注意,许多浏览器的最小时延值在25到75毫秒之间,一些极速浏览器的最小时延可达3毫秒。如果设置的时延值小于浏览器的最小值,代码运行的实际时延就是就是浏览器的最小时延值。即便设置时延值高于最小值时,其实际时延效果也绝非完美。多数浏览器实际运行的延时值要稍高于设定值,一般只有几毫秒的误差。一些浏览器会在间隔计时器中(interval timer)修正误差。另外需要注意的,在同一页面上设置过多的计时器导致浏览器速度变慢,甚至无响应。三或四个计时器通常是可接受的上限。

setTimeout

第一种办法使用Window对象的setTimeout方法。这种方法设置特定毫秒值,然后运行指定代码,代码可以是对函数的直接引用,也可以是作为源代码的字符串。

window.setTimeout(referenceToFunction,timeInMilliseconds);window.setTimeout('runMoreCode()',timeInMilliseconds);

如有可能,你应该使用直接的函数引用,这样就更有效。使用字符串的话就要求浏览器创建新的脚本环境,以便能够运行脚本。

如果你创建计时器,计时器后面的代码会照常运行。在延迟设定时间后(旧线程结束),计时器会启动新线程,setTimeout指定的代码代码会在新线程中运行,而其他代码仍运行在原先的线程中。跟其他复杂的语言相比,JavaScript不提供任何方式来控制线程休眠,唤醒,或是生成。 JavaScript引擎会处理一切,新线程会在当前线程结束后执行。尽管在理论上,多线程脚本引擎可以在老线程运行的同时执行新线程,但 JavaScript引擎是一个单线程的引用程序,只允许在一个线程结束后,开启其他线程。这一规则同样适用于事件(Event),它会在自己的线程中运行,并可随时触发。它会等待当前线程结束,然后才会开启新线程。

要给延时计时器传递参数,有两个方式可选。使用字符串,不过需要确保你传递的参数可以用基本的数据类型表示。不要包含任何可以破坏字符串格式的字符(如引号)。如果可以,请避免使用这种方法。不过以防你需要使用这样方法,下面提供了一个例子参考。

window.setTimeout('runMoreCode(''+someString+'','+someNumber+')',10);

直接使用函数要更方便些,因为你可以将变量作为额外的参数传递给setTimeout方法。除了更方便,这种办法也接受任何类型的变量。这一要注意,这种办法在IE中不行。对采用Mozilla Gecko引擎的浏览器要小心(如Firefox和Netscape 6+),因为这些浏览器总是会传输一个额外的参数给函数——毫秒误差值(number of miliseconds error),下面这个例子使用了内联匿名函数,其等效于使用直接的函数引用。

window.setTimeout(function (a,b) { //do something with a and b },10,someString,someObject);

传输给函数的变量将是函数调用时变量所保存的值。比如你有一个名为myVar的变量,其保存的数值为5。如果你调用时延函数,将变量myVar传递给它,然并设置1秒的延时值。然后你立即将myVar保存的数值改为7。那么当时延函数运行时,他会运行所时延函数所引用的函数,并将数字5传递给所引用的函数,因为在调用时延函数时,变量myVar保存的值为数字5。

悲剧的是,IE浏览器不能直接给时延函数传递额外的参数,确保兼容性常见的办法就是保证变量处在当前作用域中,以便时延函数直接引用。

setInterval

setInterval 方法在语法上与setTimeout()一样。区别就是它会以同样的时延间隔重复运行,直至取消。

window.setInterval(function (a,b) { //do something with a and b },10,someString,someObject);

清除timeout和interval计时器

你可以调用相应的clearTimeout和clearInterval方法来取消timeout和interval计时器,计时器中的代码就不会运行。在这个例子中,interval 计时器被设置成每一秒就运行一次。而timeout计时器被设置成在3.5秒后取消interval计时器运行。

var myInterval = window.setInterval(function (a,b) { myNumber++; },1000); window.setTimeout(function (a,b) { clearInterval(myInterval); },3500);

获取timeout对象跟获取inteval对象的方法一样,而且你一样也可以使用clearTimeout取消timeout计时器。

文章出自:howtocreate

译文出自:译言网


这篇关于JavaScript教程:设置时延的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635503

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("