settimeout 停止执行怎么就执行了一次

js定时器(执行一次、重复执行)
字体:[ ] 类型:转载 时间:
这篇文章主要分享一段js代码,有关js定时器的小例子,分为执行一次的定时器与重复执行的定时器,需要的朋友可以参考下
1,只执行一次的定时器
代码如下: &script& //定时器 异步运行 function hello(){ alert("hello"); } //使用方法名字执行方法 var t1 = window.setTimeout(hello,1000); var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 window.clearTimeout(t1);//去掉定时器 &/script&
2,重复执行的定时器
代码如下: &script& function hello(){ alert("hello"); } //重复执行某个方法 var t1 = window.setInterval(hello,1000); var t2 = window.setInterval("hello()",3000); //去掉定时器的方法 window.clearInterval(t1); &/script&
备注: 如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: 可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
在javascritp中,有两个关于定时器的专用函数,分别为:
1.倒计定时器:timename=setTimeout("function();",delaytime);2.循环定时器:timename=setInterval("function();",delaytime);
第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,则需要用到循环定时器“setInterval("function();",delaytime)” 。
获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。
用以指定在一段特定的时间后执行某段程序。
JS中定时执行,setTimeout和setInterval的区别,以及l解除方法
setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。setTimeout("function",time) 设置一个超时对象
setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.setInterval("function",time) 设置一个超时对象
SetInterval为自动重复,setTimeout不会重复。
clearTimeout(对象) 清除已设置的setTimeout对象clearInterval(对象) 清除已设置的setInterval对象
略举两例。例1.表单触发或加载时,逐字输出字符串
代码如下:&html&&head&&meta http-equiv="Content-Type" content="text/ charset=gb2312" /&&title&无标题文档&/title&&script language="JavaScript" type="text/javascript"&var str = "这个是测试用的范例文字";var seq = 0;var second=1000; //间隔时间1秒钟function scroll() {msg = str.substring(0, seq+1);document.getElementByIdx_x_x('word').innerHTML =seq++;if (seq &= str.length) seq = 0;}&/script&&/head&&body onload="setInterval('scroll()',second)"&&div id="word"&&/div&&br/&&br/&&/body&&/html&&
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
代码如下:&!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&&html xmlns="http://www.w3.org/1999/xhtml"&&head&&meta http-equiv="Content-Type" content="text/ charset=gb2312" /&&title&无标题文档&/title&&script language="JavaScript" type="text/javascript"&var second=5000; //间隔时间5秒钟var c=0;function scroll() {c++;if ("b" == document.activeElement.id) {var str="定时检查第&b& "+c+" &/b&次&br/&";if(document.getElementByIdx_x_x('b').value!=""){str+="输入框当前内容为当前内容为&br/&&b& "+document.getElementByIdx_x_x('b').value+"&/b&";}document.getElementByIdx_x_x('word').innerHTML =}}&/script&&/head&&body&&textarea id="b" name="b" style="height:100 width:300" onfocus="setInterval('scroll()',second)"&&/textarea&&br/&&br/&&div id="word"&&/div&&br/&&br/&&/body&&/html&
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
代码如下:&html xmlns="http://www.w3.org/1999/xhtml"&&head&&meta http-equiv="Content-Type" content="text/ charset=gb2312" /&&script language="javascript"&function count() {document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";setTimeout("alert('十秒钟到!')",10000)}&/script&&body&&div id="m"&&/div&&input TYPE="button" value=" 计时开始" onclick="count()"&&/body&&/html&
例4:倒计时定时跳转 代码如下:&html&&head&& &base href="&%=basePath%&"&& &title&My JSP 'ds04.jsp' starting page&/title&& &span id="tiao"&3&/span&& &a href="javascript:countDown"& &/a&秒后自动跳转……& &meta http-equiv=refresh content=3;url= '/ds02.jsp'/&& &!--脚本开始--&& &script language="javascript" type=""&function countDown(secs){&tiao.innerText=&if(--secs&0)& setTimeout("countDown("+secs+")",1000);&}&countDown(3);&&/script&& &!--脚本结束--&&&/head&例6:
代码如下:&head& &&& &meta http-equiv="refresh" content="2;url='b.html'"& &/head&
代码如下:&script language="javascript" type="text/javascript"&&setTimeout("window.location.href='b.html'", 2000);&//下面两个都可以用&//setTimeout("javascript:location.href='b.html'", 2000);&//setTimeout("window.location='b.html'", 2000);&/script&
代码如下:&span id="totalSecond"&2&/span&&script language="javascript" type="text/javascript"&&var second = document.getElementByIdx_x('totalSecond').innerHTML;&if(isNaN(second)){& //……不是数字的处理方法&}else{& setInterval(function(){&& document.getElementByIdx_x('totalSecond').innerHTML = --&& if (second &= 0) {&&& window.location = 'b.html';&& }& }, 1000);&} &/script&
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具js setInterval(),setTimeout每隔1秒执行一次_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
js setInterval(),setTimeout每隔1秒执行一次
上传于||文档简介
&&j​a​v​a​s​c​r​i​p​t​ ​s​e​t​I​n​t​e​r​v​a​l​(​)​,​s​e​t​T​i​m​e​o​u​t​每​隔秒​执​行​一​次
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
UID空间积分0 积分1087阅读权限30帖子精华可用积分1087 信誉积分288 专家积分0 在线时间172 小时注册时间最后登录
家境小康, 积分 1087, 距离下一级还需 913 积分
帖子主题精华可用积分1087 信誉积分288 专家积分0 在线时间172 小时注册时间最后登录
论坛徽章:0
我在firebug 里写了个很简单的函数,测试setTimeout, 但是只运行一次,可我想每秒都运行的,就是下面代码,简单的不能再简单了
function hh(){
& & console.log(&hello&);
setTimeout(hh(),500);
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
UID空间积分0 积分45阅读权限10帖子精华可用积分45 信誉积分182 专家积分0 在线时间58 小时注册时间最后登录
白手起家, 积分 45, 距离下一级还需 155 积分
帖子主题精华可用积分45 信誉积分182 专家积分0 在线时间58 小时注册时间最后登录
论坛徽章:0
setTimeout 决定了只运行一次,使用setInterval(hh(), 500)就行了
不干版主了
UID78707空间积分0 积分42366阅读权限100帖子精华可用积分42366 信誉积分2881 专家积分180 在线时间6372 小时注册时间最后登录
帖子主题精华可用积分42366 信誉积分2881 专家积分180 在线时间6372 小时注册时间最后登录
认证徽章论坛徽章:48
还可以写个循环调用嘛。呵呵。
做一个在牛A和牛C之间徘徊的人
想找个不加班的工作好难啊!
(X软工作好几年
过了二建和架构
向着一建挺进前
为了生存还得干程序员)
UID空间积分0 积分1087阅读权限30帖子精华可用积分1087 信誉积分288 专家积分0 在线时间172 小时注册时间最后登录
家境小康, 积分 1087, 距离下一级还需 913 积分
帖子主题精华可用积分1087 信誉积分288 专家积分0 在线时间172 小时注册时间最后登录
论坛徽章:0
谢谢, 后来知道了, setInterval 和 setTimeout 还是有区别的,有的文档翻译的不好,要看 javascript 标准文档,应该去哪里找?建网站选织梦模板,首选跟版网(最大的织梦模板商城),您可以把织梦模板网:
亲,跟版网是中国最具专业的DEDECMS模板资源提供商!您可以选择或者
setTimeout用法:js函数setTimeout延迟执行的简单介绍
& &以下内容您可能感兴趣: &
设置指定的JS函数在指定的时间后执行,可以利用setTimeout()函数。settimeout怎么用?JS中setTimeout()的用法详解setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。  语法:  setTimeout(code,millisec)  参数:  code (必需):要调用的函数后要执行的 JavaScript 代码串。  millisec(必需):在执行代码前需等待的毫秒数。  提示:  setTimeout() 只执行 code 一次。如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。实例:复制代码代码如下: function&timedMsg()
  var&t=setTimeout(&alert('5&seconds!')&,5000)
相关文章推荐:
1.settimeout怎么用?JS中setTimeout()的用法详解
跟版网-专业织梦模板下载平台,转载请注明出处:
& &精心为您推荐: &
& &邀您关注: &
扫描左侧二维码即可在手机端访问此页面
扫描左侧二维码即可关注跟版网官方微信公众号,获取金币模板,还可以免费仿站哦!
扫描左侧二维码即可加入跟版网官方群,免费获取金币资源并可以与其他织梦高手共同交流学习
跟版网率先实现织梦的三网合一网站,从即日起()日,跟版网会陆续免费分享一批金币资源给需要的朋友,关注本站认证官方微信公众账号并回复相应的提取码,系统会自动将下载地址发送给您,同时这些金币资源也会分享在官方的QQ群中,欢迎各位朋友踊跃加入。另外本站后期会每周选择大家比较喜欢的网站仿制,并免费分享给大家,还有免费送金币活动哦!
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
- dede源码分享
售价:20金币
- dede源码分享
售价:10金币
- dede源码分享
售价:10金币
- dede源码分享
售价:0金币
- dede源码分享
售价:60金币
& & & 跟版网竭力打造中国最大的织梦源码和织梦模板商城,我们有一批经验丰富的设计师和程序员,发展五年,跟版网拥有丰富的织梦模板,欢迎您的咨询,我们将竭诚为您提供最优质的服务。
& & & 跟版网织梦源码商城坚持“创意+品质+服务”的高端理念,运用创意设计的理念为您塑造高品质的网络品牌形象。凭借五年的探索和实践,跟版网织梦源码商城拥有一支经验丰富、技术精湛、尽职尽责的网络服务团队。精品网站建设,从跟版网织梦源码商城建站开始。
& & & 跟版网织梦源码和模板可分为两种形式获得,一种是官方源码,另外一种是会员共享源码。两种源码都分为免费和收费两种形式。
& & & 跟版网官方收费源码可通过支付费用获得,具体操作流程可查看网址:。会员共享源码可通过共享模板获取金币下载。如觉得麻烦,可以联系客服QQ:进行金币充值,充值后可随意下载。你知道setTimeout是如何运行的吗?
作者:苏福
字体:[ ] 类型:转载 时间:
你真的知道setTimeout是如何运行的吗?这篇文章主要介绍了setTimeout运行方式,感兴趣的小伙伴们可以参考一下
大家看下如下代码,猜猜执行结果:
var start = new D
setTimeout(function(){
console.log('时间流逝了:'+(new Date - start)+'毫秒');
while (new Date - start & 1000) {}
console.log(1);
function doSoming(){
setTimeout(function(){
console.log('时间又流逝了:'+(new Date - start)+'毫秒');
doSoming();
while (new Date - start & 2000) {}
console.log(2);
约1秒后输出:1,
再过约1秒后输出:2,
接着才立即输出:时间流逝了: 2002 毫秒
最后输出:时间又流逝了: 2003 毫秒
您猜对了没?
这里通过setTimeout来延迟执行的函数都被推到最后才执行了;
原理如下:
在现有浏览器环境中,Javascript执行引擎是单线程的,主线程的语句和方法,会阻塞定时任务的运行,在Javascript执行引擎之外,存在一个任务队列,当在代码中调用setTimeout()方法时,注册的延时方法会挂到浏览器内核其他模块处理,当延时方法到达触发条件,即到达设置的延时时间时,该模块再将要执行的方法添加至该模块的任务队列中。这一过程与执行引擎主线程独立,执行引擎在主线程方法执行完毕,到达空闲状态时,才会从该模块的任务队列中顺序提取任务来执行,这期间的时间,可能大于注册任务时设置的延时时间;
浏览器在空闲状态下,会不断的尝试从模块的任务队列中提取任务,这称为事件循环模型;
再回头看下前面的代码,第二个setTimeout()的延迟方法的延迟时间是10毫秒,比第一个要早触发啊!为什么执行结果却在后面?因为它被之前的代码阻塞了约1毫秒了(视浏览器的处理速度),等他挂到处理模块,等到触发时间添加进任务队列时,第一个setTimeout()的延迟方法早就被添加到模块的任务队了,而引擎主线程是按顺序提取得,所以,你应该懂了吧?
现在,如果把上面的while (new Date - start & 1000) {}改成while (new Date - start & 189) {}或者是while (new Date - start & 190) {},结果又是什么?我就不多说了!各刷新浏览器20遍,自己看结果吧!
而setInterval()方法和setTimeout()地位是相同的,调用setInterval()方法时,注册的延时方法挂到模块处理,每当触发时间到达,就往任务队列添加一次要执行的方法;
下面来具体看看setTimeout的语法:&
var timeID = window.setTimeout(func,delay,[param1,param2,...]);&
var timeID = window.setTimeout(code,delay);
setTimeout和setInterval是Window对象的方法(可省略window),第二个之后的可选参数(IE9及旧版不支持)是传递给func的参数,每次调用他们时都会返回一个数字ID(在浏览器中打印出来就只是个数字,而本人在webstorm中打印出来发现它实际是一个对象,有很多个属性),这个ID保持着它对应的setTimeout或setInterval的相关信息,主要用来在中模块中和任务队列中清除(或关闭)掉它们(用方法clearTimeout(ID)和clearInterval(ID))。
如果你需要向你的回调函数内传递一个参数以下是兼容IE的写法&
if (document.all && !window.setTimeout.isPolyfill) {
var __nativeST__ = window.setT
window.setTimeout = function (vCallback, nDelay, param1, param2,param3) {
var aArgs = Array.prototype.slice.call(arguments, 2);
return __nativeST__(vCallback instanceof Function ? function () {
vCallback.apply(null, aArgs);
} : vCallback, nDelay);
window.setTimeout.isPolyfill =
一个常见的错误出现在循环中使用闭包&
for(var i =0; i &10; i++){
setTimeout(function(){
console.log(i);
上面的代码只会输出数字 10 十次。为什么?闭包!&
当 console.log 被调用的时候,虽然匿名函数保持对外部变量 i 的引用,但此时 for循环已经结束, i 的值被修改成了 10.&
为了得到想要的结果,需要在每次循环中创建变量 i 的拷贝。&
为了正确的获得循环序号,最好使用 匿名包裹器(其实就是我们通常说的自执行匿名函数)。&
for(var i =0; i &10; i++){
(function(e){
setTimeout(function(){
console.log(e);
外部的匿名函数会立即执行,并把 i 作为它的参数,此时函数内 e 变量就拥有了 i 的一个拷贝。
&当传递给 setTimeout 的匿名函数执行时,它就拥有了对 e 的引用,而这个值是不会被循环改变的。
&有另一个方法完成同样的工作;那就是从匿名包装器中返回一个函数。这和上面的代码效果一样。&
for(var i =0; i &10; i++){
setTimeout((function(e){
return function(){
console.log(e);
})(i),1000)
还有一个重要应用:函数节流(throttle)与函数去抖(debounce)
请看我从网上收集的一些资料:
参考链接:&
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 settimeout 执行一次 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信