2010-08-04 6 views

ответ

45
$(document).height() //returns window height 

$(document).scrollTop() //returns scroll position from top of document 
+0

Я был thinkig таким же образом, но почему console.log ($ (это) .scrollTop()) = 1187 console.log ($ (это) .height()) = 1762 Это так сильно отличается? Для 575px, если я прокрутил в нижней части страницы. Где эти 575px ушли? Полоса прокрутки не может быть 576px :) – Somebody

+3

Baaah снова моя ошибка. Я смотрел на полосу прокрутки с открытым окном с защитным стеклом. Ofc теперь может быть 576px. :) Спасибо, что тема закрыта. – Somebody

+100

-1 - Это очень приятно, но не отвечает на вопрос, касающийся 'scrollHeight'. –

3

Что-то, как это должно решить проблему:

$.getDocHeight = function(){ 
    var D = document; 
    return Math.max(Math.max(D.body.scrollHeight, D.documentElement.scrollHeight), Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), Math.max(D.body.clientHeight, D.documentElement.clientHeight)); 
}; 

alert($.getDocHeight()); 

Ps: Вызов этой функции каждый раз, когда вам это нужно, предупреждение для целей тестирования ..

+0

По какой-то причине эта функция работает неправильно для меня; используя его внутри iframe. Фактическая высота составляет 256 пикселей, эта функция дает мне 337px, и я понятия не имею, откуда она. Постскриптум Я использую Chrome 18. – jurchiks

+0

@jurchiks: У вас есть ссылка на то, где это iframe, для меня, чтобы взглянуть? – Zuul

+0

https://www.blade.dateks.lv/salidzinat?ids=58664,43586. Нажмите на любую из вопросительных знаков. Мне удалось исправить большую часть из них, но две из них (и есть больше в зависимости от сравниваемых предметов) по-прежнему имеют какой-то странный, таинственный рубеж ~ 20px внизу. Он исчезает, когда я изменяю размер окна, потому что я заставил его изменить размеры всплывающих окон при изменении размера окна. – jurchiks

6
document.getElementById("elementID").scrollHeight 

$("elementID").scrollHeight 
+0

Итак, что такое элемент Id вашего объекта документа? ... возможно, вы имели в виду «document.body.scrollHeight»? – BrainSlugs83

+2

$ ('# gallery'). ScrollHeight дает мне undefined // # gallery is id моего переполнения: автоматический элемент, не работает –

176

Вот как для получения scrollHeight элемента, полученного с помощью селектора jQuery:

$(selector)[0].scrollHeight 

Если selector является идентификатором элемента (например, elemId), будет гарантированно, что элемент с индексом 0 будет элементом, который вы хотите выбрать, и scrollHeight будет правильным.

+12

Позаботьтесь, согласно базе знаний Mozilla, она не поддерживается из версий IE меньше, чем 8.0 https://developer.mozilla.org/en/DOM/element.scrollHeight –

+0

Точно как @EmanueleDelGrande говорит: посмотрите здесь: http://www.quirksmode.org/dom/w3c_cssom.html - для IE <8 DOM scrollHeight выполняется, но неправильно. Для меня это работает в IE 6, 7 на netrenderer, но может не работать во всех случаях. – TMS

+2

Согласовано с @Tomas, используйте абстракцию jQuery для лучшей обработки кросс-браузера. Например, вышесказанное может быть изменено на $ (selector) .offset(). Top –

45

Если вы используете JQuery 1.6 или выше, используйте prop для доступа к значению.

$(document).prop('scrollHeight') 

Предыдущие версии, используемые для получения значения от attr, но не после 1.6.

+12

Это возвращает «undefined» для меня с jQuery 1.7.1, как и $ (document) .attr («scrollHeight»). – Michael

+5

Это потому, что отсутствует элемент тела. Он должен быть $ (document.body) .prop ('scrollHeight') - в этот момент вы можете просто использовать document.body.scrollHeight; – goddogsrunning

3

Чтобы получить фактическую прокручиваемую высоту областей, прокручиваемых оконной полосой прокрутки, я использовал $('body').prop('scrollHeight'). Это, кажется, самое простое рабочее решение, но я не очень тщательно проверял его на совместимость. Эмануэле Дель Гранде отмечает другое решение, которое, вероятно, не будет работать для IE ниже 8.

Большинство других решений отлично работают для прокручиваемых элементов, но это работает для всего окна. Примечательно, что у меня была такая же проблема, как Майкл для решения Ankit, а именно, что $(document).prop('scrollHeight') возвращает undefined.

6

Он использует элементы HTML DOM, но не селектор jQuery. Он может быть использован как:

var height = document.body.scrollHeight; 
-1

Попробуйте это:

var scrollHeight = $(scrollable)[0] == document ? document.body.scrollHeight : $(scrollable)[0].scrollHeight; 
0

Вы можете попробовать это, например, этот код положить полосу прокрутки в нижнем для всех DIV тегов

Помните: Jquery может принимать функцию вместо значения в качестве аргумента. «this» - это объект, обработанный jQuery, функция возвращает свойство scrollHeight текущего DIV «this» и делает это для всех DIV в документе.

$("div").scrollTop(function(){return this.scrollHeight}) 
Смежные вопросы