Как обнаружить изменение размера документа в JQuery - PullRequest
15 голосов
/ 04 апреля 2011

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

какЯ обнаружил что-то подобное, используя jquery

, событие привязки изменения размера к окну определяет только изменение размера окна, тогда как привязка его к документу не работает

Ответы [ 3 ]

18 голосов
/ 04 апреля 2011

Обновление:
Пожалуйста, не используйте событие DOMSubtreeModified. Он старый, устарел и плохо поддерживается браузерами. В 99,9% случаев вы можете прослушать другое событие. Скорее всего, вы один из тех, кто использует jQuery и делает что-то AJAX, поэтому, пожалуйста, взгляните на их документы AJAX .


Это все доступные события. Вам нужно будет обнаружить $(document).bind('DOMSubtreeModified', function() { ... }); и проверить, не изменились ли размеры на предыдущую стрельбу.

var height = $(this).height(),
    width  = $(this).width();
$(document).bind('DOMSubtreeModified', function() {
    if($(this).height() != height || $(this).width() != width) {
        recalibrate();
    }
});

Это событие вызывает каждый раз все, что делается с DOM. Поэтому замедлит ваш браузер .

Мы должны найти лучшую альтернативу. Не могли бы вы дать нам больше информации по вашему сценарию?

0 голосов
/ 09 ноября 2017

Вот решение.

// ajdust margins when page size changes (ie rotate mobile device)
$(window).resize(function() {
  // Do something more useful
  console.log('doc height is ' + $(window).height());
});
0 голосов
/ 04 апреля 2011

Вы можете попробовать прокрутить событие в процентах, как это: http://www.jquery4u.com/snippets/jquery-detect-scrolled-page/

Может потребоваться добавить проверку, чтобы увидеть наличие вертикальной полосы прокрутки:

var hasVScroll = document.body.scrollHeight > document.body.clientHeight;
...