Как обнаружить события изменения размера CSS3
Свойство CSS3 resize может быть назначено произвольным элементам. Я ищу способ обнаружить такое изменение размера, скажем, div (я не против, чтобы это работало только в FF на данный момент):
div {
resize: horizontal;
overflow: hidden;
}
К сожалению, onresize
Кажется, что событие не было запущено на div. Как я могу обнаружить в JavaScript, когда произошло такое изменение размера, созданное пользователем?
Редактировать: FWIW Я открыл сообщение об ошибке в Mozilla. Если вы хотите отслеживать это: https://bugzilla.mozilla.org/show_bug.cgi?id=701648
5 ответов
Слушать DOMAttrModified
события Получил идею из этого ответа, этот jsFiddle, похоже, работает в Firefox 8 (если вы открываете консоль).
Изменение размера похоже на изменение стиля. Таким образом, это можно наблюдать с помощью MutationObserver.
let observer = new MutationObserver(function(mutations) {
console.log('mutations:', mutations);
});
let child = document.querySelector('textarea');
observer.observe(child, { attributes: true });
<textarea></textarea>
Так как resize
событие явно не работает (в настоящее время, по крайней мере), вы можете попробовать один из следующих альтернативных вариантов:
- Используйте комбинацию
mousedown
,mousemove
и / илиmouseup
сказать, является лиdiv
в настоящее время / был изменен. Если вы хотите действительно детальный контроль, вы можете проверить каждыйmousemove
событие, сколько / если div был изменен. Если вам это не нужно, вы можете просто не использоватьmousemove
на всех и просто измеритьdiv
вmousedown
а такжеmouseup
и выяснить, не изменился ли он в последнем. - Опрашивайте каждые 200 мс или около того (в зависимости от ваших потребностей) и сравнивайте текущий размер с последним известным размером. Увидеть
setTimeout()
,
Вы можете использовать ResizeSensor
класс полизаполнения css-element-query из
https://github.com/marcj/css-element-queries
Это позволяет вам вызывать функцию javascript для изменения размера для всех типов элементов, а не только для window
, Он устанавливает реальный датчик, а не JavaScript setTimeout
опрос.
Используйте это так:
new ResizeSensor($('#myelement'), function() {
console.log("myelement's size has changed");
});
Поддерживаемые браузеры: все вкл. IE6+.
Мне это показалось очень хорошо:
$("body").on('mousedown mousemove', ".resizeItem", function () {
console.log($(this).height());
})
"Используйте комбинацию mousedown, mousemove и / или mouseup"
согласно ответу Феликса.
Особенно полезно при объединении настраиваемой панели результатов поиска с представлением прокрутки Dev Extremes, и вам нужен полный контроль над ним.
$("body").on('mousedown mousemove', ".scrollContainer", function () {
var h = $(this).height() - 20;
$(".scrollArea").dxScrollView('instance').option('height', h);
});
Согласно этому сайту он работает только в Internet Explorer 9.
Попробуйте эту скрипку: http://jsfiddle.net/maniator/3Zva3/