Сделайте так, чтобы прокрутка шла за высотой всплывающих окон, а не за высоту основного содержимого - PullRequest
0 голосов
/ 16 марта 2012

Длинный вопрос: я видел в Facebook, что одно всплывающее окно (например, когда вы открываете вопрос из чьего-либо канала) может повлиять на поведение прокрутки, поэтому оно не прокручивает основное содержимое, а только содержимое всплывающего окна.в зависимости от высоты, конечно.Как я могу сделать что-то подобное?

Короткий вопрос: как сделать «фокус» прокрутки на высоте содержимого в welcome DIV?

Я сделал это так далеко: http://jsfiddle.net/y3qV5/506/. Надеюсь, вы понимаете, что я имею в виду:)

Заранее спасибо.

1 Ответ

0 голосов
/ 16 марта 2012

Вы можете добавить 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');
...