2012-03-16 81 views
0

長問題:我在Facebook上看到,單個彈出窗口(如從某人提供的feed中打開問題時)會影響滾動行爲,所以它不會當然,不會滾動主要內容,而只會根據其高度來彈出窗口中的內容。我該如何做這樣的事情?在彈出窗口高度後滾動滾動,而不是主要內容高度

簡短問題:如何在welcome DIV中使內容高度上的滾動「焦點」?

我做到了這一點:http://jsfiddle.net/y3qV5/506/。我希望你明白我的意思:)

在此先感謝。

+0

您正在尋找這樣的事情? http://stackoverflow.com/questions/7571370/jquery-disable-scroll-when-mouse-over-an-absolute-div/7571867#7571867 – mrtsherman 2012-03-16 03:53:24

+0

http://jsfiddle.net/y3qV5/515/ – mrtsherman 2012-03-16 03:54:26

+0

沒有但幾乎像那樣。當彈出窗口顯示時,滾動將被禁用,除非彈出式窗口內容高於網​​站的瀏覽器可見空間。請看這張圖片來說明我的意思:http://erik-edgren.nu/uploadit/images/be4e0e0cee02a7b3f6f2d4d94a1c4443.jpg – Erik 2012-03-16 04:32:14

回答

0

您可以將overflow: hidden添加到身體。

http://jsfiddle.net/y3qV5/520/

body.freeze { overflow: hidden; } 

$('#pop').click(function() { 
    $('.welcome').fadeIn(); 
    $('body').addClass('freeze'); 
}); 

$('#close').click(function() { 
    $('.welcome').fadeOut(); 
    $('body').removeClass('freeze'); 
}); 

老答案: http://jsfiddle.net/y3qV5/519/

//bind on show 
$('.welcome').fadeIn().bind('mousewheel DOMMouseScroll', function(e) { 
    console.log('scroll'); 
    var scrollTo = null; 

    if (e.type == 'mousewheel') { 
     scrollTo = (e.originalEvent.wheelDelta * -1); 
    } 
    else if (e.type == 'DOMMouseScroll') { 
     scrollTo = 40 * e.originalEvent.detail; 
    } 

    if (scrollTo) { 
     console.log('prevent'); 
     e.preventDefault(); 
     $(this).scrollTop(scrollTo + $(this).scrollTop()); 
    } 
}); 


//unbind on close 
$('.welcome').fadeOut().unbind('mousewheel DOMMouseScroll'); 
+0

我已經在我的問題中引用了您的評論,並且該滾動並未禁用內容的滾動並啓用正如我在鏈接到的圖像中向您展示的那樣,僅滾動彈出窗口。我想你的功能只適用於Internet Explorer。我正在使用Google Chrome。 – Erik 2012-03-16 14:34:19

+0

我明白了。只需在主體中添加「overflow:hidden」即可。 – mrtsherman 2012-03-16 14:45:07

+0

非常感謝!但是,我怎樣才能讓彈出窗口的滾動像整個頁面的常規滾動一樣,就像在Facebook上一樣?我不想讓彈出窗口感覺像一個iframe。 – Erik 2012-03-16 18:25:19