基础浮层组件,提供浮层显示隐藏、定位、窗口 resize 时重新定位、是所有浮层类组件的基类。
如果要开发一个浮层类的 UI 组件,可以基于它进行扩展,dialog、poptip、popup 等模块均继承了 Overlay 。
Overlay 继承了 Widget,可使用其中包括 Base、Class、Events、Attrs、Aspect 的属性和方法。
element
¶页面 dom 节点,只读。
string
¶浮层容器的模板,如<div class="myoverlay"></div>
,只读。和 element
属性二者择一即可。
string|number
¶浮层的 z-index 属性。
string|number
¶浮层宽度(px)。
string|number
¶浮层高度(px)。
string
¶浮层的初始化 id 。
string
¶浮层的初始化 className 。
object
¶浮层的初始化 style 对象。
element
¶浮层的父元素,默认为 document.body,只读。
object
¶定位对象,形似下面代码。这块的定位原理可参照 position 组件的 pin 方法。
{
selfXY: [0, 0], // element 的定位点,默认为左上角
baseElement: Position.VIEWPORT, // 基准定位元素,默认为当前可视区域
baseXY: [0, 0] // 基准定位元素的定位点,默认为左上角
}
生成浮层的dom结构和样式并插入文档流。
显示浮层,第一次调用时会进行render()操作。
隐藏浮层。
获得属性值。
非只读属性都可以通过set方法修改,并会立刻反映到浮层上。API 里的所有属性都可以修改。
注意 务必将浮层元素在 CSS 上设置 position: absolute or fixed
, 并且设置有效的 left/top 值.
以避免当没有设置 left/top 时, 在浮层元素插入到页面底部后, 瞬间出现浏览器滚动条后, 获取可视区域宽高错误, 以致定位有几像素偏差的问题.
var Overlay = FNX.include('overlay/overlay');
var overlay = new Overlay({
template: '<div class="overlay"></div>',
width: 500,
height: 200,
zIndex: 99,
style: 'border:1px solid red;color:green;',
parentNode: '#c',
align: {
selfXY: ['-100%', 0],
baseElement: '#a',
baseXY: [0, 0]
}
});
overlay.show();
// 修改元素样式
overlay.set('style', {
backgroundColor: 'red',
border: '1px solid green'
});
// 非只读属性都可以通过 set 方法进行更新
overlay.set('width', 500);
overlay.set('className', 'myclass');
继承使用时,如果需要覆盖父类的 setup、show、hide 方法,强烈建议这样Dialog.superclass.show.call(this);
调用一下父类的方法,否则可能造成一些特性的丢失。
var Overlay = FNX.include('overlay/overlay');
var Dialog = Overlay.extend({
attrs: {
trigger: null,
triggerType: 'click',
hasMask: false,
onComfirm: function() {},
onClose: function() {}
},
setup: function() {
Dialog.superclass.setup.call(this);
},
show: function() {
Dialog.superclass.show.call(this);
// add sth.
}
});