2013-07-16 2 views
8

Я сделал тело страницы на 200% высоким, чтобы оно было на экране дважды. Используя javascript, я заставляю его прокручивать вверх или вниз при прокрутке. Для этого мне нужно узнать самую низкую точку прокрутки страницы в любом браузере или размере экрана, чтобы она остановилась, когда она туда доберется.найти максимальное положение прокрутки страницы

Нет JQuery, пожалуйста.
Спасибо.

Мой код: (это все еще собрать так нужно немного работы)

function getScrollXY() { 
    var x = 0, y = 0; 
    if(typeof(window.pageYOffset) == 'number') { 
     // Netscape 
     x = window.pageXOffset; 
     y = window.pageYOffset; 
    } else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) { 
     // DOM 
     x = document.body.scrollLeft; 
     y = document.body.scrollTop; 
    } else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) { 
     // IE6 standards compliant mode 
     x = document.documentElement.scrollLeft; 
     y = document.documentElement.scrollTop; 
    } 
    return [x, y]; 
} 

function scrollup() { 
    if (xy[1] > 0) { 
     window.scrollBy(0,-100); 
     setTimeout(scrollup,200); 
    } else { 
     null; 
    } 
} 

function scrolldown() { 
    if (xy[1] <) { 
     window.scrollBy(0,100); 
     setTimeout(scrolldown,200); 
    } else { 
     null; 
    } 
} 

function dothescroll() { 
    var xy = getScrollXY(); 
    var y = xy[1]; 
    setTimeout(function(){ 
     if (xy[1] > y) { 
      scrollup(); 
     } else { 
      scrolldown(); 
     } 
    },200); 
} 

ответ

18

Это кросс-браузер совместимая версия:

var limit = Math.max(document.body.scrollHeight, document.body.offsetHeight, 
        document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight); 
+3

, если вы тогда минус ограничение на window.innerHeight, это максимальная позиция прокрутки.x –

+7

Пока нет истины: var limit = Math.max (document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight) - window.innerHeight; – Jordan

6
var limit = document.body.offsetHeight - window.innerHeight; 
// document.body.offsetHeight = computed height of the <body> 
// window.innerHeight = available vertical space in the window 

Сравнить xy[1] < limit

Примечание: Вам может понадобиться увеличить значение на полях и/или заполнение тела. Вы также можете попробовать использовать clientHeight вместо offsetHeight.

+0

это идеальный :) x –

+0

не совсем идеальный извините, не совместим с браузером. Я отправлю его по этому адресу: –

+0

@Neil - я совсем не получил ваш последний комментарий. пожалуйста, поделитесь найденными вами проблемами. – vsync

1

window.scrollTo (0, document.body.scrollHeight);

это будет работать ..

+0

, пожалуйста, уточните причину, по которой эта строка не работает, и предложите способ ее исправить – tutuDajuju

0

Хотя это не является частью любой спецификации, вы можете попробовать window.scrollMaxY.

Возвращает максимальное количество пикселей, которые можно прокручивать по вертикали. https://developer.mozilla.org/docs/Web/API/Window/scrollMaxY


Fallback если недоступен:

var scrollMaxY = window.scrollMaxY || (document.documentElement.scrollHeight - document.documentElement.clientHeight) 

Обратите внимание, documentElement не всегда прокрутки элемент (некоторые браузеры используют body вместо этого). Решением является новое свойство scrollingElement, которое возвращает ссылку на элемент, который прокручивает документ. Он указан, но все еще рабочий проект.

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