当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JavaScript多线程的实现方法

Javascript
一个特殊的排序需求的javascript实现代码
javaScript 简单验证代码(用户名,密码,邮箱)
支持ie与FireFox的剪切板操作代码
使用JS判断是否数字和小数点组合的数字的两中方法比较(isNaN和逐判断)
javascript 表单验证常见正则
IE FF OPERA都可用的弹出层实现代码
PPK 谈 JavaScript 的 this 关键字 [翻译]
JavaScript 自动在表格前面增加序号
点击按钮后 文本框变为Select下拉列表框
js类的静态属性和实例属性的理解
点击文章内容处弹出页面代码
点击下载链接 弹出页面实现代码
签名框(Textarea)限制文字数量并适时提示
JavaScript CSS 通用循环滚动条
js removeChild 障眼法 可能出现的错误
面向对象的javascript(笔记)
JavaScript 浮点数运算 精度问题
JavaScript 接收键盘指令示例
CSS 美化表格边框为凹陷立体效果的实现方法
JavaScript 控制文本框的值连续加减

Javascript 中的 JavaScript多线程的实现方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 230 ::
收藏到网摘: n/a

注:以下内容基于IE中GIF的onload事件的基础上,故所有测试IE only
需要用到的几个图片
先看一个简单的事实:

<SCRIPT LANGUAGE="JavaScript">
var img=new Image();
img.src="attachment/1178365293_0.gif";
img.onload=function()
{
alert("如要关闭请按住ESC键不放,并点击关闭按钮");
}
</SCRIPT>

如果不出所料的话你的IE应该弹出一大堆alert提示窗口了。注意是“一大堆”!
原因很简单:IE对多帧GIF的onload事件重复执行,即每播放完一次动画,就重新执行一次onload事件。
(注:按下ESC键会停止gif动画的播放,故也会停止onload事件执行)
利用这一特性我们可以模拟多线程的实现:
看下面的代码:

image A onload执行次数:<span id="ThreadA">0</span><br>
image B onload执行次数:<span id="ThreadB">0</span><br>
image C onload执行次数:<span id="ThreadC">0</span>
<script>
function Img(threadID,src)
{
var img = new Image;
img.onload = function()
{
var c = parseInt(document.getElementById(threadID).innerHTML);
document.getElementById(threadID).innerHTML=isNaN(c)?1:++c;
}
img.src = src;
return img;
}
var imgA = new Img("ThreadA","attachment/1178365293_0.gif");
var imgB = new Img("ThreadB","attachment/1178365293_1.gif");
var imgC = new Img("ThreadC","attachment/1178365293_2.gif");
</script>

是不是有点意思了?
再看下面的代码:
<script>
//by Rimifon
var Threads = new Array;
onload = function()
{
for(var C=1;C<501;C++)
{
Threads.push(new Thread(C));
}
}
function Go(sender)
{
var IsStart = sender.value=="全部开始";
for(var x in Threads)
{
Threads[x].Start = IsStart;
}
sender.value = "全部" + (IsStart?"暂停":"开始");
}
function Thread(ID)
{
this.Start = 0;
var cursor = this;
var span = document.createElement("span");
var counter = document.createTextNode("0");
span.appendChild(counter);
var div = document.createElement("div");
div.appendChild(document.createTextNode("线程" + ID + ":"));
div.style.cursor = "pointer";
div.onclick = function()
{
cursor.Start = !cursor.Start;
}
div.oncontextmenu = function()
{
img.onload = null;
this.removeNode(true);
return false;
}
div.appendChild(span);
document.body.appendChild(div);
var img = new Image;
img.onload = function()
{
if(cursor.Start) counter.data = parseInt(counter.data) + 1;
div.style.backgroundColor = cursor.Start?"#abcdef":"yellow";
}
img.src = "images/51js.gif";
}
</script>
<input type=button value="全部开始" onclick="Go(this)">
<input type=button value="弹出对话框" onclick="alert('对话框测试')">
部分代码引自Rimifon。(转载 http://Dnew.cn)