Movie Clip.OnLoad
用法:
my_mc
.onLoad = function() {
// 此处是您的语句
}
下面的示例说明了
MovieClip.onLoad()
和
onClipEvent(load)
的正确用法。
// symbol_mc 是库中的影片剪辑元件。 // 它被链接到 MovieClip 类。 // 对于 symbol_mc 的每个实例,在这些实例被实例化并显示在时间轴上时将触发 // 下面的函数。 symbol_mc.onLoad = function() { trace("The movie clip is loaded"); } // dynamic_mc 是使用 MovieClip.loadMovie() 加载的影片剪辑。 // 此代码尝试在加载该剪辑时调用函数, // 但此代码不起作用,因为加载的 SWF 不是库中与 MovieClip 类关联的 // 元件。 function output() { trace("Will never be called."); } dynamic_mc.onLoad = output; dynamic_mc.loadMovie("replacement.swf"); // 对于任何显示在时间轴上的影片剪辑,系统都将调用下面的函数, // 而不管该影片剪辑是否存在于库中。 // 因此,当实例化 symbol_mc 时 // 以及加载 replacement.swf 时都将调用此函数。 OnClipEvent( load ) { trace("The movie clip is loaded"); }
MovieClip的onLoad和onData bug以及变态修正方法
var pages = this.mc.createEmptyMovieClip("pages",0); pages.onLoad = function(){ trace(this._width); } pages.onEnterFrame = function(){ trace(111); } pages.onData = function(){ trace(this._width); } trace(pages.onLoad); trace(pages.onData);
输出后都是undefined
也就是说都没有被调用这个处理方法,但是用onClipEvent(data){}是可以trace的,也就是说问题已经解决了。
可是问题又来了,如果在类里我们怎么办呢,就只能用MovieClip.onData了。但是又不能调用,和jiagao讨论了一下,他也遇到了相同的问题。
想了一下,琢磨了一个简单的变态方法。方法如下 :
var pages = this.mc.createEmptyMovieClip("pages",0); pages._x = 2; pages.onLoad = function(){ trace(this._width); } pages.onEnterFrame = function(){ if(this.onLoad!=undefined&&this.onData!=undefined){ trace(pages.onLoad); trace(pages.onData); delete this.onEnterFrame; } trace(111); } pages.onData = function(){ trace(this._width); }
这样就没问题了,如果你不嫌麻烦的话就写一个extends MovieClip也可以。
使用 LoadVars 加载并显示文本
您还可以使用 LoadVars 类将内容加载到 SWF 文件中,此方法将加载来自同一服务器上的外部文件中的文本或变量,甚至来自不同服务器上的内容。下一个示例演示了如何动态创建一个文本字段并用远程文本文件的内容填充该字段。
- 创建一个新的 Flash 文档,并将其另存为 loadvarsText.fla。
- 将下面的 ActionScript 添加到时间轴中的第 1 帧:
this.createTextField("my_txt", 10, 10, 10, 320, 100); my_txt.autoSize = "left"; my_txt.border = true; my_txt.multiline = true; my_txt.wordWrap = true; var lorem_lv:LoadVars = new LoadVars(); lorem_lv.onData = function (src:String):Void { if (src != undefined) { my_txt.text = src; } else { my_txt.text = "Unable to load external file."; } } lorem_lv.load("http://www.helpexamples.com/flash/lorem.txt");
上面的代码片段中的第一个代码块将在舞台上创建一个新的文本字段,并启用多行和自动换行。第二个代码块定义一个新的 LoadVars 对象,该对象用于从远程 Web 服务器加载文本文件 (lorem.txt) 并将其内容显示在前面创建的 my_txt 文本字段中。
- 保存 Flash 文档,然后选择"控制">"测试影片"对该 SWF 文件进行测试。在短暂的延迟之后,Flash 会将远程文件的内容显示在舞台上的文本字段中。
使用 LoadVars 加载变量
LoadVars 类还允许您加载 URL 编码格式的变量,这类似于在 Web 浏览器中使用查询字符串传递变量。下面的示例演示了如何将远程文本文件加载到 SWF 文件中并显示其变量
monthNames
和
dayNames
。使用 LoadVars 从文本文件加载变量:
- 创建一个新的 Flash 文档,并将其另存为 loadvarsVariables.fla。
- 将下面的代码添加到时间轴中的第 1 帧:
this.createTextField("my_txt", 10, 10, 10, 320, 100); my_txt.autoSize = "left"; my_txt.border = true; my_txt.multiline = true; my_txt.wordWrap = true; var lorem_lv:LoadVars = new LoadVars(); lorem_lv.onLoad = function (success:Boolean):Void { if (success) { my_txt.text = "dayNames: " + lorem_lv.dayNames + "nn"; my_txt.text += "monthNames: " + lorem_lv.monthNames; } else { my_txt.text = "Unable to load external file.";monthNames=January,February,...&dayNames=Sunday,Monday,... */ lorem_lv.load("http://www.helpexamples.com/flash/params.txt");
- 保存 Flash 文档,然后从主菜单中选择"控制">"测试影片"。因为您所使用的是
LoadVars.onLoad()
方法(而不是LoadVars.onData()
),所以 Flash 将分析出变量并在 LoadVars 对象实例内创建变量。外部文本文件包含两个变量,monthNames
和dayNames
,它们都包含一些字符串。
onData(XML.onData 处理函数)
onData = function(src:String) {}
当 XML 文本从服务器完全下载后,或当从服务器下载 XML 文本的过程中出现错误时调用。在分析 XML 之前调用此处理函数,因此您可以用它调用一个自定义分析例程,从而不必使用 Flash XML 分析程序。src 参数是一个包含从服务器下载的 XML 文本的字符串,除非下载过程出现错误,否则
src
参数为
undefined
。
默认情况下,
XML.onData
事件处理函数调用
XML.onLoad
。您可以用自定义行为覆盖
XML.onData
事件处理函数,但是,除非您在
XML.onData
实现过程中调用
XML.onLoad
,否则不会对其进行调用。
可用性:ActionScript 1.0;Flash Player 5
参数
src
:String
- 一个字符串或
undefined
;服务器发送的原始数据,通常为 XML 格式。
示例
下面的示例显示 XML.OnData 事件处理函数的默认外观:
XML.prototype.onData = function (src:String) { if (src == undefined) { this.onLoad(false); } else { this.parseXML(src); this.loaded = true; this.onLoad(true); } }
您可以覆盖 XML.onData 事件处理函数,以截获 XML 文本而不对它进行分析。
onLoad(XML.onLoad 处理函数)
onLoad = function(success:Boolean) {}
接收到来自服务器的 XML 文档时由 Flash Player 调用。如果成功接收了 XML 文档,则
success
参数为
true
。如果未收到该文档,或从服务器接收响应时出现错误,则
success
参数为
false
。默认情况下,此方法的实现不处于活动状态。若要覆盖默认实现,必须指定一个包含自定义动作的函数。
可用性:ActionScript 1.0;Flash Player 5
参数
success
:Boolean
- 一个布尔值,如果使用
XML.load()
或
XML.sendAndLoad()
操作成功加载了 XML 对象,则值为
true
;否则为
false
。
示例
下面的示例包括用于简单电子商务店面应用程序的 ActionScript。
sendAndLoad()
方法传输一个包含用户名和密码的 XML 元素,并使用
XML.onLoad
处理函数来处理来自服务器的答复。
var login_str:String = "<login username=""+username_txt.text+"" password=""+password_txt.text+"" />"; var my_xml:XML = new XML(login_str); var myLoginReply_xml:XML = new XML(); myLoginReply_xml.ignoreWhite = true; myLoginReply_xml.onLoad = function(success:Boolean){ if (success) { if ((myLoginReply_xml.firstChild.nodeName == "packet") && (myLoginReply_xml.firstChild.attributes.success == "true")) { gotoAndStop("loggedIn"); } else { gotoAndStop("loginFailed"); } } else { gotoAndStop("connectionFailed"); } }; my_xml.sendAndLoad("http://www.flash-mx.com/mm/login_xml.cfm", myLoginReply_xml);