今天我们来分析的51JS的一段关于Jscript的多线程的脚本,原来是通过元素marquee实现的,好像img也可以实现。 中国自学编程网提供 www.zxbc.cn
注解见下:
<script type=\"text/javascript\">
//定义一过程
//var addCount = new Function(\"tagThread.innerHTML = tagThread.innerHTML * 1 + 1\");
//var addCount = new Function(\"alert();\");
//可实现多个线程,见下。
var addCount1 = function(){tagThread1.innerHTML = tagThread1.innerHTML * 1 + 1};
var addCount2 = function(){tagThread2.innerHTML = tagThread2.innerHTML * 1 - 1};
//生成线程类
var thrd = new Thread(1000);
thrd.Start(addCount1);//开始一线程
thrd.Start(addCount2);//又开始一线程
//以下是类定义部分:
function Thread(Timer)
{
var thArr = ; //相当于 var thArr = new Array();
this.toString = function(){return \"测试线程实例。\"};//类字符串化,方法重写,很受启发。
this.Timer = Timer || 1000; //如果Timer有初值, 否则Timer为1000 ,JS语言的特殊性,易读性不好,不好。
//加入生成一个滚动元素marquee
this.Tag = self.document.createElement(\"marquee\");
this.Tag.appendChild(self.document.createTextNode(\"-\"));
this.Tag.scrollDelay = this.Timer;
//将滚动元素marquee加入div中
var _div = document.createElement(\"div\");
_div.style.height = 1;
//_div.style.overflow = \"hidden\";
_div.appendChild(this.Tag);
//滚动事件
this.Tag.onscroll = function(){
for(var i = 0; i < thArr.length; i++)
thArr[i](); //执行多个事件函数???第一次知道!以前只知道C#是可以这样的。
}
//将div加入document中
new function main() //类初试化
{
if(self.document.readyState != \"complete\") //如果文档未完成
return setTimeout(main); //继续调用
self.document.body.appendChild(_div); //直到文档调用完成后,加入_div(带滚动条的)
}
this.Start = function(thread)
{
thArr.push(thread); //函数元素入栈
}
}
</script><body>执行次数:<span id=\"tagThread1\">0</span>
<br><span id=\"tagThread2\">100</span>
<br>
<input type=button value=\"弹出框\" onclick=\"alert(thrd)\"> [Page]
</body></html>