手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >修复ie8&chrome下window的resize事件多次执行
修复ie8&chrome下window的resize事件多次执行
摘要:复制代码代码如下:/***window.onresize事件专用事件绑定器v0.1Alucelx*http://www.cnblogs.co...

复制代码 代码如下:

/**

* 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>

*/

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);

【修复ie8&chrome下window的resize事件多次执行】相关文章:

浅析JavaScript中的事件机制

JQuery中DOM事件冒泡实例分析

如何控制框架页的滚动

prototype class详解

JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例

DeviceOne 让你一见钟情的App快速开发平台

鼠标划过时整行变色

JQuery中DOM实现事件移除的方法

jQuery处理图片加载失败的常用方法

JavaScript实现仿网易通行证表单验证

精品推荐
分类导航