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