网上找了一些ie6、7这个著名bug的解决方案,要么要延时要么将onresize绑定到div或者body上感觉总不是那么严谨。找了一个感觉严谨的,供大家参考代码如下
/**
* 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 {
init: function(){
if(lazy){ //懒执行
if(window.addEventListener){
window.addEventListener('resize', listener, false);
}else{
window.attachEvent('onresize', listener);
}
lazy = false;
}
},
add: function(fn){
if(typeof fn === 'function'){
this.init();
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;
},
insert: function(index,fn){
if(typeof fn === 'function'){
this.init();
var len=queue.length;
if(index>=len){
queue[index]=fn;
}else{
for(var i=len-1;i>=index;i--){
queue[i+1]=queue[i];
}
queue[index]=fn;
}
}else{ }
return this;
},
trigger: function(){
var len=queue.length;
for(var i=0;i<len;i++){
queue[i]();
}
}
};
}.call(this);
分享到:
相关推荐
解决方案: 代码如下:// IE浏览器下将onresize事件放在div上if(navigator.userAgent && navigator.userAgent.toLowerCase().indexOf(“msie”)>-1){ document.body[removed] = ‘<div onresize=”...
总的来说,解决IE6的"fixed"定位bug需要结合CSS的hack和JavaScript,以模拟现代浏览器中的"fixed"定位行为。虽然这种方法可以达到预期效果,但同时也增加了代码的复杂性和可能的性能问题。在现代浏览器广泛使用的...
为了解决IE浏览器中resize事件执行多次的问题,一种常见的解决方案是使用延时器(debounce)技术。这通常是通过设置一个定时器,在resize事件触发时清除已存在的定时器,并重新设置一个新的定时器。当定时器内的函数...
增加了IE6/IE7/IE8 启用设置参数(ieLowVersionEnabled: true|false) ,默认不启用, 注:IE6/7/8锁定表头 由于兼容性问题,有些情况下会有一些错位的问题 1.5 增加了 显示/隐藏功能,修正了非IE浏览器下列宽错位...
这可以通过监听`window.onresize`事件,动态计算并设置元素的位置来实现。 在实际开发中,对这些细节的关注和处理对于创建流畅、适应性强的拖拽体验至关重要。本教程由瓢城Web俱乐部和李炎恢老师共同提供,李老师的...
- 0000685: UniDBGrid: Ellipsis in first column bug (IE) - 0000690: UniDBGrid: OnTitleClick event - 0000684: UniEdit: Text alignment - 0000683: UniScreenMask bug with Maximized Form and mfPage set - ...
// 注意:要放在onload事件下面,否则ie会出现BUG _img.src = opt.src; } ``` `imgLoading`函数创建了一个新的`Image`对象,并在`onload`事件中设置了图片的宽高,然后在图片成功加载后执行`success`回调函数。...
这里要特别说明的是,在IE6浏览器中,由于存在bug,对于`position: fixed;`的支持并不完美,这可能是我们在代码中看到对于IE6浏览器的特殊处理的原因。例如,当`scrollTop`大于168时,如果检测到是IE6,那么会使用...