本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:用仿ActionScript的语法来编写html5——第九篇,仿URLLoader读取文件
第九篇,仿URLLoader读取文件
先看看最后的代码
[javascript] view plain copy
01.function readFile(){
02. urlloader = new LURLLoader();
03. urlloader.addEventListener(LEvent.COMPLETE,readFileOk);
04. urlloader.load("../file/test.txt","text");
05.}
06.function readFileOk(){
07. mytxt.text = urlloader.data;
08.}
基本上已经实现了Actionscript的模仿了。
效果和代码看这里,看不到效果的请下载支持HTML5的浏览器
下面说说实现过程
其实JavaScript中的ActiveXObject是可以实现本地文件的读写的,但是你的浏览器的安全级别必须设定到最低,但是我们做的游戏和网页是要放到网上的,我们没有办法要求所有的用户这样做。
在这里,我用PHP来实现这一过程,php可以自由读取服务器上的文件,它并不依赖用户的浏览器的设定
用php读取文件很简单,一个fopen函数就可以搞定,下面是file.php的代码
[php] view plain copy
01.if(!file_exists($_POST["file"])){
02. echo "";
03. exit;
04. }
05. $file = fopen($_POST["file"],"r");
06. $filemsg = "";
07. while (!feof($file)) {
08. $line = fgets($file);
09. $filemsg = $line;
10. }
11. fclose($file);
12. echo $filemsg;
把这个php放到你喜欢的位置,然后在legend.js里面设定路径LEGEND_FILE_PHP指向你放的位置
关于javascript调用php,当然可以自己写,因为它并不算复杂,但是我是一个很懒的人,所以我直接用jQuery来调用了,jquery是什么?估计不用我解释了吧
关于LURLLoader的构造,和LLoader基本一样,只有load方法不一样,下面是LURLLoader类的完整代码,里面调用了之前准备的php来获取要读取的文本
[javascript] view plain copy
01.function LURLLoader(){
02. var self = this;
03. self.objectindex = ++LGlobal.objectIndex;
04. self.type="LURLLoader";
05. self.loadtype = "";
06. self.content = null;
07. self.oncomplete = null;
08. self.event = {};
09.}
10.LURLLoader.prototype = {
11. addEventListener:function(type,listener){
12. var self = this;
13. if(type == LEvent.COMPLETE){
14. self.oncomplete = listener;
15. }
16. },
17. load:function (path,loadtype){
18. var self = this;
19. self.loadtype = loadtype;
20. if(self.loadtype == "text"){
21. $.post(LEGEND_FILE_PHP, {
22. flg:"read",
23. file:path
24. },function(data){
25. if(self.oncomplete){
26. self.event.currentTarget = data;
27. self.data = data;
28. self.oncomplete(self.event);
29. }
30. });
31. }
32. }
33.}
关于上面的例子,我加了一个按钮,一个LTextField,代码看下面
[javascript] view plain copy
01.init(40,"mylegend",600,500,main);
02.
03.var loadingLayer;
04.var backLayer;
05.
06.var urlloader
07.var mytxt;
08.function main(){
09. legendLoadOver();
10.
11. var readBtn = addButton("读取",20);
12. readBtn.x = 10;
13. readBtn.y = 20;
14. addChild(readBtn);
15. readBtn.addEventListener(LMouseEvent.MOUSE_DOWN, readFile);
16.
17. mytxt = new LTextField();
18. mytxt.x = 10;
19. mytxt.y = 50;
20. mytxt.text = "";
21. mytxt.width = 300;
22. mytxt.height = 200;
23. mytxt.setType(LTextFieldType.INPUT);
24. addChild(mytxt);
25.}
26.function readFileOk(){
27. mytxt.text = urlloader.data;
28.}
29.function readFile(){
30. urlloader = new LURLLoader();
31. urlloader.addEventListener(LEvent.COMPLETE,readFileOk);
32. urlloader.load("../file/test.txt","text");
33.}
34.function addButton(lbl,x){
35. var up = new LSprite();
36. up.graphics.drawRect(1,"black",[0, 0, 80, 20],true,"#999999");
37. var txt = new LTextField();
38. txt.x = x;
39. txt.text = lbl;
40. up.addChild(txt);
41. var over = new LSprite();
42. over.graphics.drawRect(1,"black",[0, 0, 80, 20],true,"#cccccc");
43. var txt1 = new LTextField();
44. txt1.x = x;
45. txt1.text = lbl;
46. over.addChild(txt1);
47. var btn = new LButton(up,over);
48. return btn;
49.}
over,模仿ActionScript读取文本文件完成了