最近项目中用到resize事件来控制页面的元素高度,相信这个功能并不少见。当问题就出现了,偶尔发现在IE6下,页面会等待比较久甚至出现假死状态。在DEBUG的过程中发现resize事件触发后,被重复执行了多次。在网上搜索了一下解决方案,分享下这个比较不错的解决办法。
PS:若项目是使用到jQuery的话,可以最大限度的降低工作量了。
-----------------------------以下是转载内容
作者:Andrea Ercolino
In IE the window resize event is fired multiple times per actual resize: it is a well known issue for IE6 and IE7, but they misbehave along different patterns. Actually it seems that IE6 is worse than IE7.
After quite a long session of R&D, I've got to a pretty good solution, in the form of a jQuery plugin:
jquery.wresize.js(作者网站的原插件地址在此)。
/*
===============================================================================
WResize is the jQuery plugin for fixing the IE window resize bug
...............................................................................
Copyright 2007 / Andrea Ercolino
-------------------------------------------------------------------------------
LICENSE: http://www.opensource.org/licenses/mit-license.php
WEBSITE: http://noteslog.com/
===============================================================================
*/
( function( $ )
{
$.fn.wresize = function( f )
{
version = '1.1';
wresize = {fired: false, width: 0};
function resizeOnce()
{
if ( $.browser.msie )
{
if ( ! wresize.fired )
{
wresize.fired = true;
}
else
{
var version = parseInt( $.browser.version, 10 );
wresize.fired = false;
if ( version < 7 )
{
return false;
}
else if ( version == 7 )
{
//a vertical resize is fired once, an horizontal resize twice
var width = $( window ).width();
if ( width != wresize.width )
{
wresize.width = width;
return false;
}
}
}
}
return true;
}
function handleWResize( e )
{
if ( resizeOnce() )
{
return f.apply(this, [e]);
}
}
this.each( function()
{
if ( this == window )
{
$( this ).resize( handleWResize );
}
else
{
$( this ).resize( f );
}
} );
return this;
};
} ) ( jQuery );
If you want to try it, here is a test page, where a div is automatically resized when the window is resized.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" style="overflow:hidden;">
<head>
<title> test window resize </title>
<script type="text/javascript" src="http://jquery.com/src/jquery-latest.pack.js"></script>
<script type="text/javascript" src="jquery.wresize.js"></script>
<script type="text/javascript">
jQuery( function( $ )
{
function content_resize()
{
var w = $( window );
var H = w.height();
var W = w.width();
$( '#content' ).css( {width: W-20, height: H-20} );
}
$( window ).wresize( content_resize );
content_resize();
} );
</script>
</head>
<body>
<div id="content" style="border: 1px dashed silver; position:absolute; overflow:auto;">
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
</div>
</body>
</html>
分享到:
相关推荐
ie的resize事件只要拖拽不放手就会一直执行很多很多遍的resize事件。需要用到这个js就能解决这个bug啦
解决firefox下resize事件无效问题
resize事件是在窗口或框架的大小被调整时发生,包括最小化、最大化。在IE和Opera浏览器中,只要窗口边框被拖动,就触发该事件,在Mozilla浏览器中,resize 事件只是在停止改变窗口大小时才会触发。
事件 专用事件绑定器 v0.1 Alucelx * http://www.cnblogs.com/Alucelx/archive/2011/10/20/2219263.html * <description> * 用于解决 lte ie8 & chrome 及其他可能会出现的 原生 window.resize 事件多次执行的 ...
在IE浏览器下,一次resize事件被执行了多次。这是IE6和IE7的一个比较广为认知的问题,这个问题在这两个版本的浏览器中表现有所不同,通常IE6下会比IE7下更为糟糕。 现在已经有了一个较好的解决方案,让jquery....
浏览器窗口大小变化时使用resize事件对框架不起作用的解决办法,如下: 代码如下:$(window).resize(function(){var surH = $(window).height();$(“.pic_conent”).height(surH);} 当浏览器变化,拉大拉小时,没有...
本文主要通过代码示例给大家介绍IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题;分步介绍,先给大家介绍IE7浏览器窗口大小改变事件执行多次bug,具体问题分析及解决方案请看下文。 var ...
[removed] 事件 专用事件绑定器 v0.1,用于解决 lte ie8 & chrome 及其他可能会出现的 原生 window.resize 事件多次执行的 BUG.
通过resize事件实现随着窗口大小的变化里面的控件大小也随之变化,left,top等等上下左右都会随动
resize事件演示.html
火狐下resize无效解决方案,解决火狐下资源resize事件无效问题方法
开发过程中经常遇到的一个问题就是如何监听一个div的size变化。 比如我用canvas绘制了一个chart,当canvas的size发生变化的时候,需要重新绘制里面的内容,这个时候就需要监听resize事件做处理。 window上虽然可以...
解决页面echarts 图表 resize问题 左侧的菜单栏模块是可以收缩的,点击左上角的 icon 可以收缩,但是点击左上角的icon后,右侧的echarts图并未进行对应的收缩,使用 element-resize-detector 插件能够解决问题...
更多信息 可用于从 Microsoft 下载中心下载下列文件: <br>Resize.exe (http://download.microsoft.com/download/platformsdk/sample52/1/w9xnt4/en-us/resize.exe) 有关如何下载 Microsoft 支持文件...
matlab实现resize函数,调用方法为MyResize(I,scale,method),其中I为图像读入矩阵,scale为放大或缩小的系数,method支持nearest和bilinear两种方式
只要把resize.mde抄到你的程序目录下,然后打开你的程序,在工具菜单中选择[引用],引用resize.mde即可(你需进入代码状态才能看到工具菜单中的引用子菜单),最后在你自己程序的窗体中的resize事件中加入 ...
resizeWindow.txt resizeWindow.txt resizeWindow.txtresizeWindow.txtresizeWindow.txt resizeWindow.txt resizeWindow.txt resizeWindow.txt