IE6 resize event bug 解决方案
最近写组件时碰到一个问题:对window对象监听resize事件,当浏览器窗口大小发生改变时,在IE6和IE7下监听函数会被执行多次,这与我们期望的执行一次可不吻合。更可怕的是,在某些DTD下,DOM中某个元素区块的大小发生变化时也会激发window的resize监听函数,且在IE6和IE7下看我的例子。在这个例子里,当点击”Zoom In”或”Zoom Out”改变红框大小时,激发了window的resize事件,不过元素的位置移动不会导致这个bug,不信点击”Move”按钮移动绿框试试,以上这些奇怪的效果IE7同样存在。至于浏览器窗口大小发生改变时监听函数反复执行的错误就与DTD没有关系了。为了防止函数多次执行,每次window的resize事件发生时,我们可以判断一下浏览器窗口大小是否改变了,只有真的改变时我们才执行监听函数,Javascript代码大概会是这样:
...
var width = document.documentElement.clientWidth,
height = document.documentElement.clientHeight;
window.onresize = function(){
if(width != document.documentElement.clientWidth ||
height = document.documentElement.clientHeight){
resizeFunc();
}
width = document.documentElement.clientWidth;
height = document.documentElement.clientHeight;
}
...
为什么不加一个浏览器检测呢,那样在非IE浏览器下就可以用常规写法了。可是据我测试,风头不小的Chrome也会犯这个错误。所以,还是以防万一吧。
真专业,向您校习~~
研究了一下,为什么在FF下就不会执行到window.onresize呢?
貌似IE8只执行了一次(只弹出了一个alert)。。。
不过移动确实不会搞到onresize事件,会不会本来resize就和移动没关系呢?