標籤:讀取文本 複雜 tar exist 構造 lsp let 服務 path
第九篇,仿URLLoader讀取檔案
先看看最後的代碼
function readFile(){ urlloader = new LURLLoader(); urlloader.addEventListener(LEvent.COMPLETE,readFileOk); urlloader.load("../file/test.txt","text");}function readFileOk(){ mytxt.text = urlloader.data;}
基本上已經實現了Actionscript的模仿了。
效果和代碼看這裡,看不到效果的請下載支援HTML5的瀏覽器
http://fsanguo.comoj.com/html5/jstoas09/index.html
下面說說實現過程
其實JavaScript中的ActiveXObject是可以實現本地檔案的讀寫的,但是你的瀏覽器的安全層級必須設定到最低,但是我們做的遊戲和網頁是要放到網上的,我們沒有辦法要求所有的使用者這樣做。
在這裡,我用PHP來實現這一過程,php可以自由讀取伺服器上的檔案,它並不依賴使用者的瀏覽器的設定
用php讀取檔案很簡單,一個fopen函數就可以搞定,下面是file.php的代碼
if(!file_exists($_POST["file"])){ echo ""; exit; } $file = fopen($_POST["file"],"r"); $filemsg = ""; while (!feof($file)) { $line = fgets($file); $filemsg = $line; } fclose($file); echo $filemsg;
把這個php放到你喜歡的位置,然後在legend.js裡面設定路徑LEGEND_FILE_PHP指向你放的位置
關於javascript調用php,當然可以自己寫,因為它並不算複雜,但是我是一個很懶的人,所以我直接用jQuery來調用了,jquery是什嗎?估計不用我解釋了吧
關於LURLLoader的構造,和LLoader基本一樣,只有load方法不一樣,下面是LURLLoader類的完整代碼,裡面調用了之前準備的php來擷取要讀取的文本
function LURLLoader(){ var self = this; self.objectindex = ++LGlobal.objectIndex; self.type="LURLLoader"; self.loadtype = ""; self.content = null; self.oncomplete = null; self.event = {};}LURLLoader.prototype = { addEventListener:function(type,listener){ var self = this; if(type == LEvent.COMPLETE){ self.oncomplete = listener; } }, load:function (path,loadtype){ var self = this; self.loadtype = loadtype; if(self.loadtype == "text"){ $.post(LEGEND_FILE_PHP, { flg:"read", file:path },function(data){ if(self.oncomplete){ self.event.currentTarget = data; self.data = data; self.oncomplete(self.event); } }); } }}
關於上面的例子,我加了一個按鈕,一個LTextField,代碼看下面
init(40,"mylegend",600,500,main);var loadingLayer;var backLayer;var urlloadervar mytxt;function main(){ legendLoadOver(); var readBtn = addButton("讀取",20); readBtn.x = 10; readBtn.y = 20; addChild(readBtn); readBtn.addEventListener(LMouseEvent.MOUSE_DOWN, readFile); mytxt = new LTextField(); mytxt.x = 10; mytxt.y = 50; mytxt.text = ""; mytxt.width = 300; mytxt.height = 200; mytxt.setType(LTextFieldType.INPUT); addChild(mytxt);}function readFileOk(){ mytxt.text = urlloader.data;}function readFile(){ urlloader = new LURLLoader(); urlloader.addEventListener(LEvent.COMPLETE,readFileOk); urlloader.load("../file/test.txt","text");}function addButton(lbl,x){ var up = new LSprite(); up.graphics.drawRect(1,"black",[0, 0, 80, 20],true,"#999999"); var txt = new LTextField(); txt.x = x; txt.text = lbl; up.addChild(txt); var over = new LSprite(); over.graphics.drawRect(1,"black",[0, 0, 80, 20],true,"#cccccc"); var txt1 = new LTextField(); txt1.x = x; txt1.text = lbl; over.addChild(txt1); var btn = new LButton(up,over); return btn;}
over,模仿ActionScript讀取文字檔完成了
用仿ActionScript的文法來編寫html5——第九篇,仿URLLoader讀取檔案