Найти высоту документа с помощью javascript [duplicate]

Самое простое решение - создать функцию JavaScript и вызвать его для обратного вызова Ajax success.

function callServerAsync(){
    $.ajax({
        url: '...',
        success: function(response) {

            successCallback(response);
        }
    });
}

function successCallback(responseObj){
    // Do something like read the response and show data
    alert(JSON.stringify(responseObj)); // Only applicable to JSON response
}

function foo(callback) {

    $.ajax({
        url: '...',
        success: function(response) {
           return callback(null, response);
        }
    });
}

var result = foo(function(err, result){
          if (!err)
           console.log(result);    
}); 
243
задан niton 15 April 2015 в 20:31
поделиться

12 ответов

Размеры документа - это кошмар совместимости с браузером, потому что, хотя все браузеры выставляют свойства clientHeight и scrollHeight, они не все согласны с тем, как вычисляются значения.

Раньше была сложная формула лучшей практики вокруг, как вы проверили правильную высоту / ширину. Это связано с использованием свойств document.documentElement, если они доступны или возвращаются к свойствам документа и т. Д.

Самый простой способ получить правильную высоту - получить все значения высоты, найденные в документе или documentElement, и использовать самую высокую. Это в основном то, что делает jQuery:

var body = document.body,
    html = document.documentElement;

var height = Math.max( body.scrollHeight, body.offsetHeight, 
                       html.clientHeight, html.scrollHeight, html.offsetHeight );

Быстрый тест с Firebug + jQuery bookmarklet возвращает правильную высоту для обеих цитируемых страниц, а также пример кода.

Обратите внимание, что тестирование высоты документа до готовности документа всегда приведет к 0. Кроме того, если вы загрузите больше вещей или измените размер окна, вам может потребоваться повторная проверка. Используйте onload или document ready , если вам это нужно во время загрузки, в противном случае просто проверьте, когда вам нужен номер.

535
ответ дан Community 27 August 2018 в 01:26
поделиться

использовать код удара для высоты вычисления + прокрутка

var dif = document.documentElement.scrollHeight - document.documentElement.clientHeight;

var height = dif + document.documentElement.scrollHeight +"px";
-1
ответ дан ali bagheri 27 August 2018 в 01:26
поделиться

Полный расчет высоты документа:

Чтобы быть более общим и найти высоту любого документа, вы могли бы просто найти самый высокий узел DOM на текущей странице с простой рекурсией:

;(function() {
    var pageHeight = 0;

    function findHighestNode(nodesList) {
        for (var i = nodesList.length - 1; i >= 0; i--) {
            if (nodesList[i].scrollHeight && nodesList[i].clientHeight) {
                var elHeight = Math.max(nodesList[i].scrollHeight, nodesList[i].clientHeight);
                pageHeight = Math.max(elHeight, pageHeight);
            }
            if (nodesList[i].childNodes.length) findHighestNode(nodesList[i].childNodes);
        }
    }

    findHighestNode(document.documentElement.childNodes);

    // The entire page height is found
    console.log('Page height is', pageHeight);
})();

Вы можете протестировать его на своих сайтах-образцах ( http://fandango.com/ или http://paperbackswap.com/ ), вставив этот скрипт в DevTools Консоль.

ПРИМЕЧАНИЕ: он работает с Iframes.

Наслаждайтесь!

14
ответ дан Andrii Verbytskyi 27 August 2018 в 01:26
поделиться

«Метод jQuery» для определения размера документа - запрашивает все, берет наивысшее значение и надеется на лучшее - работает в большинстве случаев, но не во всех из них .

Если вам действительно нужны пуленепробиваемые результаты для размера документа, я бы предложил использовать мой плагин jQuery.documentSize . В отличие от других методов, он фактически проверяет и оценивает поведение браузера при его загрузке и, основываясь на результатах, запрашивает правильное свойство оттуда.

Влияние этого одноразового теста на производительность минимально , и плагин возвращает правильные результаты даже в самых странных сценариях - не потому, что я так говорю, а потому, что массивный , автоматически созданный тестовый набор фактически проверяет, что он делает.

Поскольку плагин написан в ванильном Javascript, вы можете использовать его без jQuery тоже.

6
ответ дан hashchange 27 August 2018 в 01:26
поделиться

Добавить ссылки правильно

В моем случае я использовал страницу ASCX, а страница aspx, содержащая элемент управления ascx, неправильно использует ссылки. Я просто вставил следующий код, и он работал:

<script src="../js/jquery-1.3.2-vsdoc.js" type="text/javascript"></script>
<script src="../js/jquery-1.3.2.js" type="text/javascript"></script>
<script src="../js/jquery-1.5.1.js" type="text/javascript"></script>
-3
ответ дан IAmInPLS 27 August 2018 в 01:26
поделиться

Я не знаю об определении высоты только сейчас, но вы можете использовать это, чтобы поместить что-то внизу:

<html>
<head>
<title>CSS bottom test</title>
<style>
.bottom {
  position: absolute;
  bottom: 1em;
  left: 1em;
}
</style>
</head>

<body>

<p>regular body stuff.</p>

<div class='bottom'>on the bottom</div>

</body>
</html>
-3
ответ дан jedihawk 27 August 2018 в 01:26
поделиться

Вы даже можете использовать это:

var B = document.body,
    H = document.documentElement,
    height

if (typeof document.height !== 'undefined') {
    height = document.height // For webkit browsers
} else {
    height = Math.max( B.scrollHeight, B.offsetHeight,H.clientHeight, H.scrollHeight, H.offsetHeight );
}

или более jQuery способом (поскольку, как вы сказали, jQuery не лежит):)

Math.max($(document).height(), $(window).height())
27
ответ дан JRodDynamite 27 August 2018 в 01:26
поделиться

Это действительно старый вопрос и, следовательно, имеет много устаревших ответов. Начиная с 2017 года, все браузеры придерживались стандарта.

Отвечать за 2017:

document.body.scrollHeight

Изменить: выше не учитываются поля в теге <body>. Если у вашего тела есть поля, используйте:

document.documentElement.scrollHeight
104
ответ дан Marquizzo 27 August 2018 в 01:26
поделиться

Я соврал, jQuery возвращает правильное значение для обеих страниц $ (document) .height (); ... почему я когда-либо сомневался в этом?

5
ответ дан Nic 27 August 2018 в 01:26
поделиться

Правильный ответ на 2017 год:

document.documentElement.getBoundingClientRect().height

В отличие от document.body.scrollHeight этот метод учитывает поля тела. Он также дает дробное значение высоты, которое может быть полезно в некоторых случаях

2
ответ дан torvin 27 August 2018 в 01:26
поделиться

Получить ширину в режиме перекрестного браузера / устройства:

function getActualWidth() {
    var actualWidth = window.innerWidth ||
                      document.documentElement.clientWidth ||
                      document.body.clientWidth ||
                      document.body.offsetWidh;

    return actualWidth;
}
1
ответ дан user937284 27 August 2018 в 01:26
поделиться

Этот кросс-браузерный код ниже оценивает все возможные высоты тела и элементов html и возвращает найденный максимум:

            var body = document.body;
            var html = document.documentElement;
            var bodyH = Math.max(body.scrollHeight, body.offsetHeight, body.getBoundingClientRect().height, html.clientHeight, html.scrollHeight, html.offsetHeight); // The max height of the body

Рабочий пример:

function getHeight()
{
  var body = document.body;
  var html = document.documentElement; 
  var bodyH = Math.max(body.scrollHeight, body.offsetHeight, body.getBoundingClientRect().height, html.clientHeight, html.scrollHeight, html.offsetHeight);
  return bodyH;
}

document.getElementById('height').innerText = getHeight();
body,html
{
  height: 3000px;
}

#posbtm
{
  bottom: 0;
  position: fixed;
  background-color: Yellow;
}
<div id="posbtm">The max Height of this document is: <span id="height"></span> px</div>

example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />
example document body content example document body content example document body content example document body content <br />

-1
ответ дан willy wonka 27 August 2018 в 01:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: