JavaScript ResizeObserver — зміна розміру елемента


ResizeObserver повідомляє про зміну розміру елемента — не вікна.

автор: NagarD

Загальний опис

Подія resize на window знає лише про вікно. Але елемент може змінити розмір і без нього: сусід зник, з'явився текст, розкрився блок, змінилась сітка.

Спостерігач бачить саме це. Він і став основою адаптивних компонентів: віджет підлаштовується під ширину свого контейнера, а не під ширину екрана — те саме, що в CSS роблять контейнерні запити.

Типові застосування: перемалювати графік, коли колонка змінила ширину; підігнати розмір <canvas> під контейнер; перерахувати кількість видимих елементів.

автор: NagarD

Нотатка

Змінювати розмір спостережуваного елемента всередині обробника — прямий шлях до нескінченного циклу. Браузер у такому разі кине в консоль попередження про «loop limit exceeded».

автор: NagarD

Синтаксис

const observer = new ResizeObserver(callback);\nobserver.observe(element);

методи

Метод Опис
observe Починає стежити за розміром елемента.
unobserve Припиняє стежити за елементом.
disconnect Припиняє стежити за всіма.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
ResizeObserver 64+ 69+ 13.1+ 51+ 79+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
ResizeObserver 64+ yes yes 13.4+

Приклади

+ запропонувати свій приклад у пісочниці

Компонент, що реагує на власну ширину, а не на ширину екрана.

HTML

<div id="card" style="resize: horizontal; overflow: auto; width: 300px">
    Потягни за правий нижній кут
</div>

JS

const card = document.getElementById('card');

const observer = new ResizeObserver(entries => {
    for (const entry of entries) {
        const width = entry.contentRect.width;

        // рішення за розміром КОНТЕЙНЕРА, не вікна
        entry.target.classList.toggle('narrow', width < 400);

        console.log('Ширина:', Math.round(width));
    }
});

observer.observe(card);

// коли компонент знищується
// observer.unobserve(card);
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід