使用jQuery访问者可以看到div时的fire事件?

function:我想在用户看到某个div(向下滚动到它)时更改某个项目的类。

我现在该怎么做:我正在使用这个很好的脚本( http://code.google.com/p/jquery-appear/ ),当div对用户可见时,它可以正常触发jquery事件。 然而它只发射一次。 因此,如果向下滚动页面,jquery就可以正常执行了。 但是,如果我向上滚动然后再向下滚动它会发生火灾。 这是我的jquery:

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

我想做的事情:每当“myDiv”出现时让脚本执行,而不仅仅是第一个。

有没有人知道如何做到这一点?

判断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 } 

通过查看jquery-appear插件的源代码,可以传递参数one ,仅触发事件一次( one: true ),或每次出现一次( one: false

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

我使用类似的插件,但这使用bind方法并使用事件 – > 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 } }); 

这可能对你有用。

无论如何,你可以在没有插件的情况下使用简单的表达式来代替:

 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 (eg it is directly visible) }