Есть ли событие, которое срабатывает при изменении scrollHeight или scrollWidth в jQuery?

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

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

Любые подсказки?

Ответы

Ответ 1

Я не рекомендую 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 типы.

Ответ 2

Я ответил на этот вопрос здесь, что может показаться неуместным, однако оно также поддерживает изменение прокруткиHeight и 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) для проверки таких изменений, он также может быть расширен, если вам это понадобится:)

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