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

Javascript
JavaScript 仿歌词效果
javascript 网页上跳动的文字
jquery 屏蔽一个区域内的所有元素,禁止输入
VBScript 实现文字遮罩
用按钮触发Javascript动态生成一个表格的代码
文字瞬间从左到右切换显示的JavaScript代码
jquery 插件开发方法小结
JS 操作日期 顺便实现 上一周 和 下一周 功能
struts2 jquery 打造无限层次的树
js文件中调用js的实现方法小结
写入cookie的JavaScript代码库 cookieLibrary.js
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
javascript Keycode对照表
JavaScript 动态添加表格行 使用模板、标记
JS window.opener返回父页面的应用
JavaScript 高仿真可控弹簧振子实现代码
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
JavaScript 图片放大效果及代码说明
js 操作符实例代码
JavaScript 文本域字体大小选择功能

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 214 ::
收藏到网摘: 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)