• 用仿ActionScript的语法来编写html5——第一篇,显示一张图片


    第一篇,显示一张图片

    一,代码对比

    as代码:
    public var loader:Loader;
    public function loadimg():void{
        loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE,complete);
        loader.load(new URLRequest("10594855.png"));
    }
    public function complete(event:Event):void{
        var image:Bitmap = Bitmap(loader.content);
        var bitmap:BitmapData = image.bitmapData;
        addChild(image);
    }

    js代码:

    window.onload = function(){  
        var canvas = document.getElementById("myCanvas");  
        var context = canvas.getContext("2d");  
       
        image = new Image();  
        image.onload = function(){  
            context.drawImage(image, 0, 0, 240, 240);  
        };  
        image.src = "10594855.png";
    };

    二,编写js类库(暂命名为legend库)后的代码

    var loader;
    function main(){
        loader = new LLoader();
        loader.addEventListener(LEvent.COMPLETE,loadBitmapdata);
        loader.load("10594855.png","bitmapData");
    }
    function loadBitmapdata(event){
        var bitmapdata = new LBitmapData(loader.content);
        var bitmap = new LBitmap(bitmapdata);
        addChild(bitmap);
    }

    三,实现

    1,建一个静态类,方便保存及访问公共的方法属性,比如canvas等

    var LGlobal = function (){}
    LGlobal.type = "LGlobal";

    我们始终都用到canvas,所以要把canvas保存起来,给LGlobal类添加属性和方法

    LGlobal.canvas = null;
    LGlobal.width = 0;
    LGlobal.height = 0;
    LGlobal.setCanvas = function (id,width,height){
        var canvasObj = document.getElementById(id);
        if(width)canvasObj.width = width;
        if(height)canvasObj.height = height;
        LGlobal.width = canvasObj.width;
        LGlobal.height = canvasObj.height;
        LGlobal.canvas = canvasObj.getContext("2d");
    } 

    界面的显示,为了能够动态显示,选择不停的刷新canvas
    给LGlobal类添加一个不停刷新的方法

    LGlobal.onShow = function (){
        if(LGlobal.canvas == null)return;
        LGlobal.canvas.clearRect(0,0,LGlobal.width,LGlobal.height);
    }

    然后,我预想把所有现实的对象等都保存在一个数组里面,然后按照顺序显示
    而所有可以显示的对象,都有一个show方法,用来把自己画到canvas上
    LGlobal类最后修改为

    var LGlobal = function (){}
    LGlobal.type = "LGlobal";
    LGlobal.canvas = null;
    LGlobal.width = 0;
    LGlobal.height = 0;
    LGlobal.childList = new Array();
    LGlobal.setCanvas = function (id,width,height){
        var canvasObj = document.getElementById(id);
        if(width)canvasObj.width = width;
        if(height)canvasObj.height = height;
        LGlobal.width = canvasObj.width;
        LGlobal.height = canvasObj.height;
        LGlobal.canvas = canvasObj.getContext("2d");
    } 
    LGlobal.onShow = function (){
        if(LGlobal.canvas == null)return;
        LGlobal.canvas.clearRect(0,0,LGlobal.width,LGlobal.height);
        LGlobal.show(LGlobal.childList);
    }
    LGlobal.show = function(showlist){
        var key;
        for(key in showlist){
            if(showlist[key].show){
                showlist[key].show();
            }
        }
    }

    2,as中,图片显示用到BitmapData和Bitmap两个类,为了实现这两个类的功能,我们分别创建两个类LBitmapData和LBitmap

    先来看LBitmapData类,LBitmapData类用来储存图片的数据等,我们把Image()储存到LBitmapData类里面

    function LBitmapData(image,x,y,width,height){
        var self = this;
        self.type = "LBitmapData";
        self.oncomplete = null;
        if(image){
            self.image = image;
            self.x = (x==null?0:x);  
            self.y = (y==null?0:y);  
            self.width = (width==null?self.image.width);  
            self.height = (height==null?self.image.height:height);
        }else{
            self.x = 0;  
            self.y = 0;  
            self.width = 0;  
            self.height = 0;
            self.image = new Image();
        }
    }

    在看LBitmap类,LBitmap类用来显示LBitmapData类里储存的Image()

    function LBitmap(bitmapdata){
        var self = this;
        self.type = "LBitmap";
        self.x = 0;  
        self.y = 0;  
        self.width = 0;  
        self.height = 0;  
        self.scaleX=1;
        self.scaleY=1;
        self.visible=true;
        self.bitmapData = bitmapdata; 
        if(self.bitmapData){
            self.width = self.bitmapData.width;
            self.height = self.bitmapData.height;
        }
    }

    关于Image()的显示,我们用到一开始说的show方法,实现如下

    LBitmap.prototype = {
        show:function (){
            var self = this;
            if(!self.visible)return;
            LGlobal.canvas.drawImage(self.bitmapData.image,
                    self.bitmapData.x,self.bitmapData.y,self.bitmapData.width,self.bitmapData.height,
                    self.x,self.y,self.width*self.scaleX,self.height*self.scaleY);
        }
    }

    3,最后,还差一个Loader,我们建立自己的LLoader类

    function LLoader(){
        var self = this;
        self.loadtype = "";
        self.content = null;
        self.oncomplete = null;
        self.event = {};
    }
    LLoader.prototype = {
        addEventListener:function(type,listener){
            var self = this;
            if(type == LEvent.COMPLETE){
                self.oncomplete = listener;
            }
        },
        load:function (src,loadtype){
            var self = this;
            self.loadtype = loadtype;
            if(self.loadtype == "bitmapData"){
                self.content = new Image();
                self.content.onload = function(){
                    if(self.oncomplete){
                        self.event.currentTarget = self.content;
                        self.oncomplete(self.event);
                    }
                }
                self.content.src = src; 
            }
        }
    }

    4,在3里面用到了LEvent类,LEvent类是一个事件类,用来加载事件,点击等,这个以后再慢慢强化

    var LEvent = function (){};
    LEvent.COMPLETE = "complete";
    LEvent.ENTER_FRAME = "enter_frame";
    
    
    LEvent.currentTarget = null;
    LEvent.addEventListener = function (node, type, fun){
        if(node.addEventListener){
            node.addEventListener(type, fun, false);
        }else if(node.attachEvent){
            node['e' + type + fun] = fun;
            node[type + fun] = function(){node['e' + type + fun]();}
            node.attachEvent('on' + type, node[type + fun]);
        }
    }

    5,在显示之前,我们需要有个addChild方法,如下

    function addChild(DisplayObject){
        LGlobal.childList.push(DisplayObject);
    }

    6,最后,在整个页面读取完成后,就可以把图片显示出来了

    function init(speed,canvasname,width,height,func){
        LEvent.addEventListener(window,"load",function(){
            setInterval(function(){LGlobal.onShow();}, speed);
            LGlobal.setCanvas(canvasname,width,height);
            func();
        });
    }
    init(40,"back",300,300,main);
    var loader;
    function main(){
        loader = new LLoader();
        loader.addEventListener(LEvent.COMPLETE,loadBitmapdata);
        loader.load("10594855.png","bitmapData");
    }
    function loadBitmapdata(event){
        var bitmapdata = new LBitmapData(loader.content);
        var bitmap = new LBitmap(bitmapdata);
        addChild(bitmap);
    }

    第一篇完成,下一篇,实现Sprite类

  • 相关阅读:
    CentOS 7.3报Centos7_Base库缺少GPG公钥
    nginx重写(隐藏)index.php目录
    工作经历简写
    Centos7.4安装htop
    nginx 超时时间配置说明
    c#中数据从数据库到客户端主要几种的导出方式(导出到excel,导出到word)
    C#操作word文档如何设置表格的行高
    Windows计划任务定时启动程序运行时发生错误的解决办法
    Asp.Net MVC中请求json文件时返回404 not found的解决办法
    Angularjs 如何自定义Img的ng-load 事件
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/6005847.html
Copyright © 2020-2023  润新知