zoukankan      html  css  js  c++  java
  • 解决在IE浏览器中resize事件执行多次

    resize事件是在窗口或框架的大小被调整时发生,包括最小化、最大化。在IE和Opera浏览器中,只要窗口边框被拖动,就触发该事件,在Mozilla浏览器中,resize 事件只是在停止改变窗口大小时才会触发。
    这是个让人每次改变页面窗口的大小时很郁闷的方法,尤其在IE浏览器中,稍微动下窗口边框,就会触发很多次事件。更让人蛋疼的是在resize事件中包含某些页面内容处理或计算导致resize事件再次被触发的时候,IE会随机陷入假死状态。
    网上找了好久,都是千律一篇的,到处都是转载的一个方法;以下是网上找到的一个解决方法:

    var resizeTimer = null;
    $(window).resize(function() {
        if (resizeTimer) clearTimeout(resizeTimer);
        resizeTimer = setTimeout("changeHeight()", 500);
    });//resize事件延迟500毫秒执行
    

    这个方法虽然可以解决多次执行事件问题,但是不完美,最后我找到了一个jquery插件形式的解决方案;

    /*   
    =============================================================================== 
    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,  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);
    

      你可以把上面的代码另存为jquery.wresize.js导入网页,把以下代码拷贝到记事本中,另存为网页,然后测试一下。示例:

    <!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( { 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 testtest test test test test test test test t
    est test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test 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>
    

      



    作者:Crazy Ma
    出处:http://www.cnblogs.com/intcry
    ♪:30%的技术+70%的精神,帮助别人得到他想要的,你就能得到你想要的! ♪

  • 相关阅读:
    【科创人独家】科界CTO林镇南:言必真,行必果,没有尽力而为,只有全力以赴
    【科创人+极客邦科技】百企贡献资源,携手抗击疫情
    【科创人新春篇】创投圈人脉王吴世春:肺炎,Long China,精益创业,回归听云…
    SAP QM 在Quality Notification里维护Internal Note
    地摊重现江湖,疫情带给我们的意外收获
    SAP QM Quality Notification的凭证流
    SAP QM 如何将一个附件挂在一个Quality Notification单据上?
    K项目轶事之被客户通报批评
    SAP MM VL34事务代码批量创建Inbound Delivery
    城市的房价稳定,就能不断吸引人才?
  • 原文地址:https://www.cnblogs.com/intcry/p/2104318.html
Copyright © 2011-2022 走看看