Hilo/docs/api-zh/code/view/DOMElement.js
2018-08-06 16:13:49 +08:00

105 lines
3.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Hilo
* Copyright 2015 alibaba.com
* Licensed under the MIT License
*/
/**
* <iframe src='../../../examples/DOMElement.html?noHeader' width = '330' height = '250' scrolling='no'></iframe>
* <br/>
* 使用示例:
* <pre>
* var domView = new Hilo.DOMElement({
* element: Hilo.createElement('div', {
* style: {
* backgroundColor: '#004eff',
* position: 'absolute'
* }
* }),
* width: 100,
* height: 100,
* x: 50,
* y: 70
* }).addTo(stage);
* </pre>
* @name DOMElement
* @class DOMElement是dom元素的包装。 注意DOMElement 的父容器必须是 stage
* @augments View
* @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。特殊属性有:
* <ul>
* <li><b>element</b> - 要包装的dom元素。必需。</li>
* </ul>
* @module hilo/view/DOMElement
* @requires hilo/core/Hilo
* @requires hilo/core/Class
* @requires hilo/view/View
* @requires hilo/view/Drawable
*/
var DOMElement = Class.create(/** @lends DOMElement.prototype */{
Extends: View,
constructor: function(properties){
properties = properties || {};
this.id = this.id || properties.id || Hilo.getUid("DOMElement");
DOMElement.superclass.constructor.call(this, properties);
this.drawable = new Drawable();
var elem = this.drawable.domElement = properties.element || Hilo.createElement('div');
elem.id = this.id;
if(this.pointerEnabled && !elem.style.pointerEvents){
elem.style.pointerEvents = 'visible';
}
},
/**
* 覆盖渲染方法。
* @private
*/
_render: function(renderer, delta){
if(!this.onUpdate || this.onUpdate(delta) !== false){
renderer.transform(this);
if(this.visible && this.alpha > 0){
this.render(renderer, delta);
}
}
},
/**
* 覆盖渲染方法。
* @private
*/
render: function(renderer, delta){
if(renderer.renderType !== 'dom'){
var canvas = renderer.canvas;
var stage = this.parent;
var domElementContainer = renderer._domElementContainer;
if(!renderer._domElementContainer){
domElementContainer = renderer._domElementContainer = Hilo.createElement('div', {
style:{
'position':'absolute',
'transform':'scale3d(' + stage.scaleX + ',' + stage.scaleY + ', 1)',
'transformOrigin':'0 0',
'zIndex':'1'
}
});
canvas.parentNode.insertBefore(renderer._domElementContainer, canvas.nextSibling);
}
var elem = this.drawable.domElement, depth = this.depth,
nextElement = domElementContainer.childNodes[0], nextDepth;
if(elem.parentNode) return;
//draw dom element just after stage canvas
while(nextElement && nextElement.nodeType != 3){
nextDepth = parseInt(nextElement.style.zIndex) || 0;
if(nextDepth <= 0 || nextDepth > depth){
break;
}
nextElement = nextElement.nextSibling;
}
domElementContainer.insertBefore(this.drawable.domElement, nextElement);
}else{
renderer.draw(this);
}
}
});