Есть ли событие, которое вызывает изменения в scrollHeight или scrollWidth в jQuery? - PullRequest
15 голосов
/ 02 декабря 2009

Я использую JQuery для разработки приложения, в котором пользователь может перетаскивать элементы внутри элемента div, который автоматически добавляет полосы прокрутки и расширяет scrollHeight / scrollWidth по мере необходимости.Мне нужно отключить даже при изменении scrollHeight и scrollWidth контейнера div.

Нет, не хочу использовать событие прокрутки, потому что 1) прокрутка не срабатывает, когда вы просто начинаете перетаскиватьэлемент к краю и scrollHeight / scrollWidth изменяются.2) прокрутка срабатывает, когда scrollHeight / scrollWidth не изменяется.

Есть какие-нибудь подсказки?

Ответы [ 2 ]

9 голосов
/ 03 декабря 2009

Я не рекомендую jQuery, но есть диспетчер 'resize' .

2017 версия с JavaScript:

this.container = document.querySelector('#container');
this.watcher = window.requestAnimationFrame(this.watch);

this.watch = () => {
  cancelAnimationFrame(this.watcher);

  if (this.lastScrollHeight !== container.scrollHeight) {
    // do something
  }

  this.lastScrollHeight = container.scrollHeight;
  this.watcher = requestAnimationFrame(this.watch);
};

См. Документы для scrollHeight и как это связано с scrollTop. Запрос scrollHeight может вызвать неэффективный пересчет DOM, и ручное управление высотами / вершинами с помощью position:absolute, вероятно, быстрее, поскольку это не рекурсивная проверка на margins (для blocks) и других CSS display типы.

5 голосов
/ 05 октября 2012

Я ответил здесь на этот вопрос, который может показаться неуместным, однако он также поддерживает scrollHeight Change и scrollWidth.

Определение изменения высоты div с использованием jQuery

Плагин:

http://www.jqui.net/jquery-projects/jquery-mutate-official/

Демо-версия:

$('.selector').mutate('scrollHeight',function (){
    alert('it has changed the scroll height do something about it...');
});

Этот плагин также должен работать в кросс-браузерном режиме, поскольку он использует интервалы (setTimeout) для проверки таких изменений, его также можно расширить, если вам это нужно :)

надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...