1 2 /** 3 * @class Drawable是可绘制图像的包装。 4 * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。 5 * @module hilo/view/Drawable 6 * @requires hilo/core/Hilo 7 * @requires hilo/core/Class 8 * @property {Object} image 要绘制的图像。即可被CanvasRenderingContext2D.drawImage使用的对象类型,可以是HTMLImageElement、HTMLCanvasElement、HTMLVideoElement等对象。 9 * @property {array} rect 要绘制的图像的矩形区域。 10 */ 11 var Drawable = Class.create(/** @lends Drawable.prototype */{ 12 constructor: function Drawable(properties){ 13 this.init(properties); 14 }, 15 16 image: null, 17 rect: null, 18 19 /** 20 * 初始化可绘制对象。 21 * @param {Object} properties 要初始化的属性。 22 */ 23 init: function(properties){ 24 var me = this, oldImage = me.image; 25 if(Drawable.isDrawable(properties)){ 26 me.image = properties; 27 }else{ 28 Hilo.copy(me, properties, true); 29 } 30 31 var image = me.image; 32 if(typeof image === 'string'){ 33 if(oldImage && image === oldImage.getAttribute('src')){ 34 image = me.image = oldImage; 35 }else{ 36 me.image = null; 37 //load image dynamically 38 var img = new Image(); 39 img.onload = function(){ 40 img.onload = null; 41 me.init(img); 42 }; 43 img.src = image; 44 return; 45 } 46 } 47 48 if(image && !me.rect) me.rect = [0, 0, image.width, image.height]; 49 }, 50 51 Statics: /** @lends Drawable */{ 52 /** 53 * 判断参数elem指定的元素是否可包装成Drawable对象。 54 * @param {Object} elem 要测试的对象。 55 * @return {Boolean} 如果是可包装成Drawable对象则返回true,否则为false。 56 */ 57 isDrawable: function(elem){ 58 return (elem instanceof HTMLImageElement) || 59 (elem instanceof HTMLCanvasElement) || 60 (elem instanceof HTMLVideoElement); 61 } 62 } 63 });