как определить, где находится вертикальная прокрутка с помощью Javascript - PullRequest
3 голосов
/ 23 марта 2011
if  ($(window).scrollTop() == $(document).height() - $(window).height()){

Это предложение возвращает истину, когда свиток находится, скажем, в «конце» полосы прокрутки.

ки

как я могу узнать, когда он на 80% (осталось 20%) ???

Я пытаюсь выражения как:

if  ($(window).scrollTop()*2 == $(document).height() - $(window).height()){  // at the middle?
if  ($(window).scrollTop() == ($(document).height() - $(window).height())+100){    /// 100px left?

Но никто из них никогда не возвращает истину ..

есть идеи, почему?

Заранее большое спасибо!

1 Ответ

1 голос
/ 23 марта 2011

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 отличаются, то я вызываю метод, центр которого был пересечен.

...