2014-07-15 64 views
0

我有一個模式,當激活時禁用背景滾動(通過設置htmloverflow: hidden)。由於滾動條寬度溢出隱藏的破壞佈局

我嘗試了各種解決方案,並且由於滾動條寬度的原因,所有這些解決方案都會導致網站在激活模式時增加寬度。這裏是我的代碼:

(function ($) { 
    $.fn.extend({ 
     leanModal: function (options) { 
      var defaults = { 
       top: 100, 
       overlay: 0.5, 
       closeButton: null 
      }; 
      var overlay = $("<div id='lean_overlay'></div>"); 
      $("body").append(overlay); 
      options = $.extend(defaults, options); 
      return this.each(function() { 
       var o = options; 
       $(this).click(function (e) { 
        var modal_id = $(this).attr("href"); 
        $("#lean_overlay").click(function() { 
         close_modal(modal_id) 
        }); 
        $(o.closeButton).click(function() { 
         close_modal(modal_id) 
        }); 
        var modal_height = $(modal_id).outerHeight(); 
        var modal_width = $(modal_id).outerWidth(); 
        $("#lean_overlay").css({ 
         "display": "block", 
         opacity: 0 
        }); 
        $("#lean_overlay").fadeTo(200, o.overlay); 
        $('html').css('overflow', 'hidden'); 
        $(modal_id).css({ 
         "display": "block", 
         "position": "fixed", 
         "opacity": 0, 
         "z-index": 11000, 
         "top": o.top + "px" 
        }); 
        $(modal_id).fadeTo(200, 1); 
        e.preventDefault() 
       }) 
      }); 

      function close_modal(modal_id) { 
       $("#lean_overlay").fadeOut(200); 
       $('html').css('overflow', 'scroll'); 
       $(modal_id).css({ 
        "display": "none" 
       }) 
      } 
     } 
    }) 
})(jQuery); 

也許我可以禁用背景滾動一些其他方式?

這裏有一個小提琴:http://jsfiddle.net/p88Rt/1/

+0

如果沒有任何HTML或CSS,您將很難獲得幫助...... [Fiddle](http://jsfiddle.net/)也是一個好主意。 – Cholesterol

+0

謝謝@膽固醇,我已經添加了小提琴 –

回答

0

所以這個工作,但會讓用戶返回到頁面的頂部:

http://jsfiddle.net/p88Rt/2/

(function ($) { 
    $.fn.extend({ 
     leanModal: function (options) { 
      var defaults = { 
       top: 100, 
       overlay: 0.5, 
       closeButton: null 
      }; 
      var overlay = $("<div id='lean_overlay'></div>"); 
      $("body").append(overlay); 
      options = $.extend(defaults, options); 
      return this.each(function() { 
       var o = options; 
       $(this).click(function (e) { 
        var modal_id = $(this).attr("href"); 
        $("#lean_overlay").click(function() { 
         close_modal(modal_id) 
        }); 
        $(o.closeButton).click(function() { 
         close_modal(modal_id) 
        }); 
        var modal_height = $(modal_id).outerHeight(); 
        var modal_width = $(modal_id).outerWidth(); 
        $("#lean_overlay").css({ 
         "display": "block", 
         opacity: 0 
        }); 
        $("#lean_overlay").fadeTo(200, o.overlay); 
        $('body').css({ 
         "overflow": "hidden", 
         "height": "100%", 
         "position": "fixed" 
        }); 
        $(modal_id).css({ 
         "display": "block", 
         "position": "fixed", 
         "opacity": 0, 
         "z-index": 11000, 
         "top": o.top + "px" 
        }); 
        $(modal_id).fadeTo(200, 1); 
        e.preventDefault() 

       }) 
      }); 

      function close_modal(modal_id) { 
       $("#lean_overlay").fadeOut(200); 
       $('body').css('overflow', 'scroll'); 
       $(modal_id).css({ 
        "display": "none" 
       }) 
      } 
     } 
    }) 
    $("a[rel*=leanModal]").leanModal(); 
})(jQuery); 

有什麼建議?

1

請檢查這些更改。可能會幫助你。 在爵士小提琴變化$( 'HTML')。css來這一個

  $('html').css({ 
       "overflow": "hidden", 
       "width":$("body").outerWidth(), 
       }); 

並添加利潤率這種方式。根據需要,您可以更改它。

#popup { 
    width:80%; 
    height: 200px; 
    background: lightyellow; 
    margin: 10% 8.5%; 
    position: absolute; 
    display: none; 
    } 
+0

爲什麼8.5%?不知道我明白。 –

+0

不,不,完全取決於你。我寫這個在中間有這個模式彈出。 Js小提琴的屏幕很小,所以定義的邊距就是這樣。您可以完全根據您的要求定義邊距。 – Tanul

+0

好吧,我明白了。它工作的很好,但是當我在我自己的設計中實現它時,它仍然會拋出邊緣(只有一個或兩個像素)。它也留下了滾動條的位置,而不是繼續進行頁面設計。有什麼辦法可以使用JS定義HTML寬度,以便我的CSS始終計算包含滾動條寬度? @Tans –