`
Kenny.Lee
  • 浏览: 514899 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

解决IE中Resize事件重复提交多次的问题(转)

 
阅读更多

最近项目中用到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事件执行多次的解决方法

    为了解决IE浏览器中resize事件执行多次的问题,一种常见的解决方案是使用延时器(debounce)技术。这通常是通过设置一个定时器,在resize事件触发时清除已存在的定时器,并重新设置一个新的定时器。当定时器内的函数...

    jquery.winResize.js 解决ie的resize事件的bug

    ie的resize事件只要拖拽不放手就会一直执行很多很多遍的resize事件。需要用到这个js就能解决这个bug啦

    解决firefox下resize事件无效问题

    解决`resize`事件在Firefox中无效的问题,有以下几种策略: 1. **延迟绑定**:由于Firefox可能在页面完全渲染之前没有准备好`resize`事件,我们可以使用`setTimeout`函数延迟绑定事件监听器,确保在DOM完全加载后...

    浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法

    浏览器窗口大小变化时使用resize事件对框架不起作用的解决办法,如下: 代码如下:$(window).resize(function(){var surH = $(window).height();$(“.pic_conent”).height(surH);} 当浏览器变化,拉大拉小时,没有...

    IE6浏览器下resize事件被执行了多次解决方法

    这个插件专门设计用来修复IE浏览器(特别是IE6)中的resize事件多次执行的问题。其工作原理是通过一个名为`resizeOnce`的内部函数来判断resize事件是否应该被触发。在`resizeOnce`函数中,插件检查当前的浏览器版本...

    修复ie8chrome下window的resize事件多次执行

    事件 专用事件绑定器 v0.1 Alucelx * http://www.cnblogs.com/Alucelx/archive/2011/10/20/2219263.html * &lt;description&gt; * 用于解决 lte ie8 & chrome 及其他可能会出现的 原生 window.resize 事件多次执行的 ...

    修复ie8&amp;chrome下window的resize事件多次执行

    这个绑定器的目标是解决在IE8及以下和Chrome中`window.resize`事件多次触发的问题。下面是对`onWindowResize`事件绑定器的详细解析: 1. **事件队列(Event Queue)**:`queue`数组用于存储所有注册的事件处理函数...

    IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题

    本文主要通过代码示例给大家介绍IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题;分步介绍,先给大家介绍IE7浏览器窗口大小改变事件执行多次bug,具体问题分析及解决方案请看下文。 var ...

    通过resize事件实现随着窗口大小的变化里面的控件大小也随之变化,left,top等等上下左右都会随动

    在VB(Visual Basic)编程中,`Resize`事件是一个非常重要的功能,它允许开发者响应用户改变窗体或控件尺寸的行为。当用户调整窗口的大小时,`Resize`事件会被触发,开发者可以在这个事件处理程序中更新控件的位置和...

    [JavaScript]解决页面onresize缩放时多次调用的问题.doc

    【JavaScript】解决页面onresize缩放时多次调用的问题 在网页开发中,我们常常需要监听浏览器窗口的resize事件,以便在用户改变窗口大小时调整布局或内容。然而,在JavaScript中,尤其是对于老旧的IE浏览器(如IE8...

    div.onresize无效解决方案

    火狐下resize无效解决方案,解决火狐下资源resize事件无效问题方法

    resize事件演示.html

    resize事件演示.html

    解决vue 给window添加和移除resize事件遇到的坑

    以上就是关于在Vue项目中添加和移除window对象的resize事件监听器时可能遇到的问题及其解决方案的详细说明。希望本文能够帮助到正在为此类问题困扰的Vue开发者们。在实际开发中,开发者应当密切关注细节,正确地使用...

    IE之动态添加DOM节点触发window.resize事件

    此外,在老版本的IE浏览器中,由于其内部机制的问题,对DOM节点的动态修改更容易产生意外的副作用,如触发非预期的resize事件。 综上所述,开发者在开发涉及动态内容交互的网页时,需要对各种浏览器的行为表现有所...

    jquery.ba-resize.min

    - 兼容性检查:虽然该插件能很好地处理元素的`resize`事件,但在极少数的旧版浏览器中可能存在问题,使用前最好进行兼容性测试。 总结,`jquery.ba-resize.min.js`插件是解决jQuery元素`resize()`事件的一个有效...

Global site tag (gtag.js) - Google Analytics