栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

修复ie8&chrome下window的resize事件多次执行

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

修复ie8&chrome下window的resize事件多次执行

复制代码 代码如下:

var 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;
}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;
}
};
}.call(this);

绑定window 的 resize 事件,请使用这个对象
示例:
复制代码 代码如下:
var _fn = function(){document.body.innerHTML += "1"};
onWindowResize.add(_fn)
.add(function(){document.body.innerHTML += "2"})
.add(function(){document.body.innerHTML += "3"})
.remove(_fn);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/113703.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号