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 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll