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 });