zoukankan      html  css  js  c++  java
  • 用仿ActionScript的语法来编写html5——第九篇,仿URLLoader读取文件

    第九篇,仿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 urlloader
    var 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读取文本文件完成了

  • 相关阅读:
    [转][LeetCode]Longest Common Prefix ——求字符串的最长公共前缀
    [转]最长回文子串——4种解法
    [转]通过金矿模型介绍动态规划
    一句话说清楚什么是闭包函数
    [转]as3事件流机制彻底理解
    Eclipse 快捷键
    文件打包与解压缩
    第5节 环境变量与文件查找
    vim的多标签
    java思维导图
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/6005941.html
Copyright © 2011-2022 走看看