UNPKG

web-utils-super

Version:

前端函数库

103 lines (89 loc) 2.57 kB
/** * 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;