2011-11-08 2 views
3

Функция: Я хочу изменить класс определенного элемента, когда пользователь видит определенный div (прокручивается до него).Событие пожара, когда div отображается посетителю с помощью jQuery?

Как сделать это сейчас: Я использую этот прекрасный сценарий (http://code.google.com/p/jquery-appear/) работает действительно которым отлично просто огнь события Jquery когда ДИВ становится видимым для пользователя. Однако он срабатывает только один раз. Поэтому, если вы прокрутите страницу вниз, jquery будет выполнен отлично. Но если я прокручу вверх, а потом снова, то это огонь. Это мой JQuery:

$('#myDiv').appear(function() { 
     $("#aDiv").addClass("active"); 
}); 

Что я хочу сделать: Сделайте скрипт выполнить каждый раз «myDiv» появляются и не только первый.

Есть ли у кого-нибудь идеи, как я мог это сделать?

ответ

6

судить DIV видна или нет, вы можете:

$(window).scroll(function(event) { 
    console.log($(".target").offset().top < $(window).scrollTop() + $(window).outerHeight()); 
}); 

так, я не думаю, что вам нужен любой плагин.

просто судить по выражению как:

if($(".target").offset().top < $(window).scrollTop() + $(window).outerHeight()) { 
    // something when the .target div visible 
} else { 
    // something when the .target div invisible 
} 
+0

При использовании вашего скрипта я получаю ошибки в консоли, которые говорят вот так: a.style не определен Weird? – Paparappa

+0

@Paparappa, пожалуйста, обновите свой jQuery до 1.7 :) –

+0

И это работает! Спасибо! – Paparappa

3

Я использую подобный плагин, но это использует метод связывания и использует событие ->http://remysharp.com/2009/01/26/element-in-view-event-plugin/

Пример использования:

$('div').bind('inview', function (event, visible) { 
    if (visible == true) { 
    // element is now visible in the viewport 
    } else { 
    // element has gone out of viewport 
    } 
}); 
4

Глядя на исходный код jquery-appear plugin, можно передать аргумент one, чтобы запустить событие только один раз (one: true), или он появляется каждый раз (one: false)

$('#myDiv').appear(function() { 
    $("#aDiv").addClass("active"); 
}, { 
    one: false 
}); 
+0

Этот код не работает, однако, если я пошел к появляться .js файла и изменил один к false моя проблема была решена. Таким образом, ваш ответ сделал больше, чем вдохновил меня на его решение. – Paparappa

1

This, вероятно, будет полезно для вас.

Во всяком случае, вы могли бы, вероятно, сделать это без плагина и с помощью простого выражения вместо:

var elem_top = $("some_element").offset().top; 
var elem_height = $("some_element").height(); 
var wind_height = $(window).height(); 
var scrollTop = $(window).scrollTop; 

if (elem_top > (wind_height + scrollTop) && 
    !(elem_top + elem_height) < wind_scrollTop) 
{ 
    //The element is inside the screen (e.g. it is directly visible) 
} 
Смежные вопросы