1 2 /** 3 * @name DOMElement 4 * @class DOMElement是dom元素的包装。 5 * @augments View 6 * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。特殊属性有: 7 * <ul> 8 * <li><b>element</b> - 要包装的dom元素。必需。</li> 9 * </ul> 10 * @module hilo/view/DOMElement 11 * @requires hilo/core/Hilo 12 * @requires hilo/core/Class 13 * @requires hilo/view/View 14 * @requires hilo/view/Drawable 15 */ 16 var DOMElement = Class.create(/** @lends DOMElement.prototype */{ 17 Extends: View, 18 constructor: function DOMElement(properties){ 19 properties = properties || {}; 20 this.id = this.id || properties.id || Hilo.getUid("DOMElement"); 21 DOMElement.superclass.constructor.call(this, properties); 22 23 this.drawable = new Drawable(); 24 var elem = this.drawable.domElement = properties.element || Hilo.createElement('div'); 25 elem.id = this.id; 26 }, 27 28 /** 29 * 覆盖渲染方法。 30 * @private 31 */ 32 _render: function(renderer, delta){ 33 if(!this.onRender || this.onRender(delta) !== false){ 34 var elem = this.drawable.domElement, style = elem.style; 35 if(!this.visible || this.alpha <= 0){ 36 style.display = 'none'; 37 return; 38 } 39 40 style.display = ''; 41 Hilo.setElementStyleByView(this); 42 this.render(renderer, delta); 43 } 44 }, 45 46 /** 47 * 覆盖渲染方法。 48 * @private 49 */ 50 render: function(renderer, delta){ 51 var canvas = renderer.canvas; 52 if(canvas.getContext){ 53 var elem = this.drawable.domElement, depth = this.depth, 54 nextElement = canvas.nextSibling, nextDepth; 55 if(elem.parentNode) return; 56 57 //draw dom element just after stage canvas 58 while(nextElement && nextElement.nodeType != 3){ 59 nextDepth = parseInt(nextElement.style.zIndex) || 0; 60 if(nextDepth <= 0 || nextDepth > depth){ 61 break; 62 } 63 nextElement = nextElement.nextSibling; 64 } 65 canvas.parentNode.insertBefore(this.drawable.domElement, nextElement); 66 }else{ 67 renderer.draw(this); 68 } 69 } 70 });