fineui是帆软报表和BI产品线所使用的前端框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

71 lines
1.7 KiB

/**
* window.resize 控制器
*
* Created by GUY on 2015/6/24.
* @class
*/
BI.ResizeController = BI.inherit(BI.Controller, {
init: function () {
this.resizerManger = {};
},
_initResizeListener: function () {
var self = this;
this.resizeHandler = BI.debounce(function (ev) {
self._resize(ev);
}, 30);
if ("onorientationchange" in _global) {
_global.onorientationchange = this.resizeHandler;
} else {
BI.Widget._renderEngine.createElement(_global).resize(this.resizeHandler);
}
},
_resize: function (ev) {
BI.each(this.resizerManger, function (key, resizer) {
if (resizer instanceof BI.$) {
if (resizer.is(":visible")) {
resizer.trigger("__resize__");
}
return;
}
if (resizer instanceof BI.Layout) {
resizer.resize();
return;
}
if (BI.isFunction(resizer)) {
resizer(ev);
}
});
},
add: function (name, resizer) {
var self = this;
BI.isNull(this.resizeHandler) && this._initResizeListener();
if (this.has(name)) {
return this;
}
this.resizerManger[name] = resizer;
return function () {
self.remove(name);
};
},
get: function (name) {
return this.resizerManger[name];
},
has: function (name) {
return this.resizerManger[name] != null;
},
remove: function (name) {
if (!this.has(name)) {
return this;
}
delete this.resizerManger[name];
return this;
}
});