resize 事件的兼容性问题研究
先了解一下浏览器拖拉触发resize的方式。
例如在xp的系统性能选项中,设置是否“拖拉时显示窗口内容”会有不同的拖拉效果:
选择是的话,由于内容会跟着浏览器的拖拉同时渲染页面,导致resize事件的持续触发;
选择否的话,内容在拖拉完成才会渲染,并触发resize事件,即在拖拉过程中resize事件只会在确定后才触发一次;
不过ff有点特殊,即使选择否,它右下角的触发点还是会按照拖拉同时渲染页面的方式触发的。
后面测试时建议选择否,会比较准确看到结果。
再看看resize事件的支持情况。
在ie,haslayout的块级和内联元素都支持onresize事件,其他浏览器只有window对象支持。
而ie6/7跟ie8的支持程度也有不同,测试以下代码:
<!doctype html><body><div id="show">0</div><div id="div" style="border:1px solid #000"></div><script>var i = 0;div.onresize = function(){ show.innerHTML = ++i; }setTimeout('div.innerHTML="test"', 1000)setTimeout('div.style.height="50px"', 2000)</script></body></html>
<!doctype html><style>html,body{border:5px solid #06F;}</style><body><div id="div" style="height:100px;"></div></body></html><script>window.onresize = function(){ div.innerHTML += "window, "; }//document.documentElement.onresize = function(){ div.innerHTML += "documentElement, "; }//document.body.onresize = function(){ div.innerHTML += "body, "; }</script>
this.resizeDelay = function(){ var clientWidth = container.clientWidth, clientHeight = container.clientHeight; if( clientWidth != width || clientHeight != height ) { width = clientWidth; height = clientHeight; oThis._delay( oThis.resize ); }};
<!doctype html><script> window.onload = function() { var div=document.getElementById("div"); var i = 0; div.onresize = function() { show.innerHTML = "触发了resize事件"; } setTimeout(function(){ div.innerHTML="test"; }, 1000) setTimeout(function(){ div.style.height="50px" }, 2000) }</script><div id="show">0</div><div id="div" style="border:1px solid #000"></div>
[解决办法]
同版主说的。
另,这类问题应该都是对视口元素识别不同导致的(臆测)。
类似的还有
window.onload window.onscroll
document.body.onload document.body.onscroll
document.documentElement.onload document.documentElement.onscroll
等等。
[解决办法]
哦 奥对对对
[解决办法]
mark up
[解决办法]
还有分可接的样子
[解决办法]
非常不错
[解决办法]
对window的resize事件有一点感受,连续触发很多时候很讨厌而且会有性能问题
可以尝试将resize扩展为resizeEnd事件,也许这样你会发现很好用,很爽
[解决办法]
LZ是不是想要resize时只触发一次事件,也就是说只做一次有效的计算处理,我也曾被这个问题困扰,不过最近找到了一个很好的解决方案
[解决办法]
看不懂,俺是个外行。。看不懂,俺是个外行。。看不懂,俺是个外行。。
[解决办法]
wo ding.
[解决办法]
看不太懂,学习一下。
[解决办法]
好好学习一下
[解决办法]
纯属路过,接分~!
[解决办法]
路过看看
[解决办法]
好文章,顶一个,顶一个,Ding!!!
[解决办法]
wolaiye hahahaha
[解决办法]