web-utils-super
Version:
前端函数库
103 lines (89 loc) • 2.57 kB
JavaScript
/**
* window.onresize 事件 专用事件绑定器 v0.1 Alucelx
* http://www.cnblogs.com/Alucelx/archive/2011/10/20/2219263.html
* <description>
* 用于解决 lte ie8 & chrome 及其他可能会出现的 原生 window.resize 事件多次执行的 BUG.
* </description>
* <methods>
* add: 添加事件句柄
* remove: 删除事件句柄
* </methods>
*/
/* eslint-disable */
const onWindowResize = function () {
// 事件队列
var queue = [],
indexOf =
Array.prototype.indexOf ||
function () {
var i = 0,
length = this.length;
for (; i < length; i++) {
if (this[i] === arguments[0]) {
return i;
}
}
return -1;
};
var isResizing = {}, // 标记可视区域尺寸状态, 用于消除 lte ie8 / chrome 中 window.onresize 事件多次执行的 bug
lazy = true, // 懒执行标记
listener = function (e) {
// 事件监听器
var h =
window.innerHeight ||
(document.documentElement && document.documentElement.clientHeight) ||
document.body.clientHeight,
w =
window.innerWidth ||
(document.documentElement && document.documentElement.clientWidth) ||
document.body.clientWidth;
if (h === isResizing.h && w === isResizing.w) {
return null;
} else {
e = e || window.event;
var i = 0,
len = queue.length;
for (; i < len; i++) {
queue[i].call(this, e);
}
isResizing.h = h;
isResizing.w = w;
}
};
return {
add: function (fn) {
if (typeof fn === "function") {
// 懒执行
if (lazy) {
if (window.addEventListener) {
window.addEventListener("resize", listener, false);
} else {
window.attachEvent("onresize", listener);
}
lazy = false;
}
queue.push(fn);
} else {
}
return this;
},
remove: function (fn) {
if (typeof fn === "undefined") {
queue = [];
} else if (typeof fn === "function") {
var i = indexOf.call(queue, fn);
if (i > -1) {
queue.splice(i, 1);
}
}
return this;
},
clear: function () {
if (queue.length >= 1) {
// let newQueue = queue[0]
queue.length = 1;
}
},
};
}.call(this);
module.exports = onWindowResize;