EDITED
Смотрите здесь: http://jsfiddle.net/CoolEsh/aQcBZ/7/
HTML
<div style="height:400px;">1 div</div>
<div style="height:300px;">2 div</div>
<div style="height:400px;">3 div</div>
<div style="height:200px;">4 div</div>
<div style="height:600px;">5 div</div>
JS
var handlerObj = {
_pageAboveCenter: null,
init: function()
{
handlerObj._pageAboveCenter = handlerObj._isPageAboveCenter();
$( window ).scroll( handlerObj._handleScroll );
},
_handleScroll: function()
{
var curentPositionAboveCenter = handlerObj._isPageAboveCenter();
if ( curentPositionAboveCenter != handlerObj._pageAboveCenter )
{
handlerObj._centerIntersection();
handlerObj._pageAboveCenter = curentPositionAboveCenter;
}
},
_centerIntersection: function()
{
console.log( "Center intersected!" ); // this is for firebug console
},
_isPageAboveCenter: function()
{
if ( ( Math.floor( $( window ).height() / 2 ) + $(window).scrollTop() ) > ( Math.floor( $(document).height() / 2 ) ) )
{
return true;
}
else
{
return false;
}
}
}
$( document ).ready( handlerObj.init );
Этот пример рабочего события, если кто-то быстро прокручивает. Я инициализирую переменную _pageAboveCenter
при загрузке страницы. Затем в случае прокрутки я проверяю текущую позицию (она выше или ниже центра), и если значения curentPositionAboveCenter
и handlerObj._pageAboveCenter
отличаются, то я вызываю метод, центр которого был пересечен.