zoukankan      html  css  js  c++  java
  • 跨浏览器resize事件分析

    resize事件

    原生事件分析

    window一次resize事件:

    • IE7 触发3次, IE8 触发2次, IE9 触发1次, IE10 触发1次

    • Chrome 触发1次

    • FF 触发2次
    • Opera 触发1次
    • Safari 触发1次

    场景分析

    • window resize时。部分组件须要重置大小(一次)。部分组件不须要重置大小。

    开源库分析

    长处:使用简便

      $('#div1').on('resize', function (e) {
        console.log('[div1] resize');
      })
      $('#div1').resize(function (e) {
        console.log('[div1] resize2');
      });
    

    缺点:内部使用轮询,性能堪忧

    function loopy() {
        // Start the polling loop, asynchronously.
        timeout_id = window[ str_setTimeout ](function(){
          // Iterate over all elements to which the 'resize' event is bound.
          elems.each(function(){
            var elem = $(this),
              width = elem.width(),
              height = elem.height(),
              data = $.data( this, str_data );
    
            // If element size has changed since the last time, update the element
            // data store and trigger the 'resize' event.
            if ( width !== data.w || height !== data.h ) {
              elem.trigger( str_resize, [ data.w = width, data.h = height ] );
            }
          });
          // Loop.
          loopy();
        }, jq_resize[ str_delay ] );
    };
    

    长处:分Debounced和Throttled两种类型,类型明白

    缺点:使用不算简易

    $(window).on("debouncedresize", function( event ) {
        // Your event handler code goes here.
    });
    
    // or...
    $(window).on("throttledresize", function( event ) {
        // Your event handler code goes here.
    });
    
    // unbind at will
    $(window).off( "debouncedresize" );
    

    结论

    大多数场景使用jquery-smartresize的Debounced就可以满足一次调用就可以

  • 相关阅读:
    事件
    DOM中对象的获得
    C# 字符串 相关操作
    两个listbox 复制
    C#窗体控件简介ListBox
    store procedure
    view_baseInfo
    不走弯路,就是捷径
    inherit
    Excel 版本对应
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5244117.html
Copyright © 2011-2022 走看看