2014-08-27 3 views
1

У меня возникли проблемы с обнаружением, когда прокручивается определенный раздел страницы. Как только я перейду к определенному ID или классу, я бы хотел запустить несколько функций.Обнаружение, когда div прокручивается до не работает

Я нашел this solution here, и попытался это ниже, но код не активируется:

// Once you scroll into that div ID, this still does not get hit: 
$("#slice_video").scroll(function() { 
    console.log('in scroll...');  
}); 


// In the comments I also saw this solution, tried it but still nothing working: 

function isScrolledIntoView(elem) { 
    // alert("method invoked"); 
    var docViewTop = $(window).scrollTop(); 
    var docViewBottom = docViewTop + $(window).height(); 
    var elemTop = $(elem).offset().top; 
    var elemBottom = elemTop + $(elem).height(); 
    return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom) && (elemBottom <=  docViewBottom) && (elemTop >= docViewTop)); 
} 

if (isScrolledIntoView($('.eco_jumbotron'))){ 

    // initialize modals: 
    modals.wireModals($()); 

    // Animate in Tiles 
    animateTiles(); 
} 

JsFiddle для первого решения: http://jsfiddle.net/leongaban/6n4bczmu/

JsFiddle для 2-го раствора http://jsfiddle.net/leongaban/yxkqafwn/

ответ

1

, так что ваша проблема заключается в том, что вы пытаетесь сначала прокрутить не тот div. тогда вы проверяете высоту всего окна на этот div .. так что если вы изменили его на .container, прокрутите событие, он будет предупреждать каждый раз вы прокручиваете. то, что вы хотите сделать, это проверить прокрутку относительно прокрутки div. так что-то вроде этого.

function isScrolledIntoView(elem, container) 
{ 
    var contTop = $(container).offset().top; 
    var contBottom = contTop + $(container).height(); 

    var elemTop = $(elem).offset().top; 
    var elemBottom = elemTop + $(elem).height(); 

    return ((elemBottom <= contBottom) && (elemTop >= contTop)); 
} 
$('.container').scroll(function() { 
    if (isScrolledIntoView($('.box4') , $('.container'))) 
    { 
     console.log('HERE!'); 
    } 
}); 

WORKING FIDDLE

0

Вы должны прослушать событие прокрутки в контейнере с переполнением для прокрутки или авто.

Этот код сделал работу:

$('.container').scroll(function() { 
    if($(".box4").position().top < $(".container").position().top + $(".container").height()){ 
     // code 
    } 
}); 

DEMO

Я думаю, вы можете сделать лучше, но это начало.

Надеюсь, это поможет.

EDIT:

Не забудьте обработать тот факт, что с помощью этого метода событие будет срабатывать каждый раз, когда вы прокручивать крошечные немного и положение DIV является меньше, чем контейнеры (нижний край) позиция

+0

Почему счетчик включается, когда вы на полпути вниз ДИВ 2? Является ли это проблемой области дома? –

+0

Он активируется, когда верхний край коробки 4 достигает нижнего края контейнера (когда он начинает виден). Но вы можете легко изменить это, чтобы активировать его, только когда он полностью виден, изменив выражение в div;) [DEMO] (http://jsfiddle.net/6n4bczmu/39/) –

Смежные вопросы