Spec-Zone.ru › Web APIs

VisualViewport

Baseline Широко доступно *

Данная функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с августа 2021 года.

* Некоторые части этой функции могут иметь различный уровень поддержки.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Интерфейс VisualViewport API визуального области просмотра представляет визуальную область просмотра для данного окна. Для страницы, содержащей фреймы, каждый фрейм, а также содержащая страница, будут иметь уникальный объект окна. Каждое окно на странице будет иметь уникальный VisualViewport, представляющий свойства, связанные с этим окном.

Вы можете получить визуальную область просмотра окна, используя Window.visualViewport.

Примечание: Только верхнее окно имеет визуальную область просмотра, отличную от области просмотра макета. Поэтому, как правило, только VisualViewport объекта верхнего уровня является полезным. Для <iframe>, метрики визуального просмотра, такие как VisualViewport.width, всегда соответствуют метрикам области просмотра макета, таким как document.documentElement.clientWidth.

EventTarget VisualViewport

Свойства экземпляра

Также наследует свойства от своего родительского интерфейса, EventTarget.

VisualViewport.offsetLeft Только для чтения

Возвращает смещение левого края визуальной области просмотра от левого края области просмотра макета в пикселях CSS.

VisualViewport.offsetTop Только для чтения

Возвращает смещение верхнего края визуальной области просмотра от верхнего края области просмотра макета в пикселях CSS.

VisualViewport.pageLeft Только для чтения

Возвращает координату x визуальной области просмотра относительно начала содержащей области вверху в пикселях CSS.

VisualViewport.pageTop Только для чтения

Возвращает координату y визуальной области просмотра относительно начала содержащей области вверху в пикселях CSS.

VisualViewport.width Только для чтения

Возвращает ширину визуальной области просмотра в пикселях CSS.

VisualViewport.height Только для чтения

Возвращает высоту визуальной области просмотра в пикселях CSS.

VisualViewport.scale Только для чтения

Возвращает коэффициент масштабирования при масштабировании визуальной области просмотра.

Методы экземпляра

Также наследует методы от своего родительского интерфейса, EventTarget.

События

Подпишитесь на эти события, используя addEventListener() или назначив обработчик событий соответствующему oneventname свойству этого интерфейса.

resize

Срабатывает при изменении размеров визуальной области просмотра. Также доступно через onresize свойство.

scroll

Срабатывает при прокрутке визуальной области просмотра. Также доступно через onscroll свойство.

scrollend

Срабатывает при завершении операции прокрутки визуальной области просмотра. Также доступно через onscrollend свойство.

Примеры

Скрытие наложенного блока при масштабировании

В этом примере, взятом из README Visual Viewport, показано, как написать код, который будет скрывать наложенный блок (например, рекламный блок) при увеличении пользователем масштаба. Это хороший способ улучшить пользовательский опыт при масштабировании страниц. Также доступен живой пример.

const bottomBar = document.getElementById("bottom-bar");
const viewport = window.visualViewport;

function resizeHandler() {
  bottomBar.style.display = viewport.scale > 1.3 ? "none" : "block";
}

window.visualViewport.addEventListener("resize", resizeHandler);

Моделирование позиции: device-fixed

В этом примере, также взятом из README Visual Viewport, показано, как использовать этот API для моделирования position: device-fixed, которое фиксирует элементы к визуальной области просмотра. Также доступен живой пример.

const bottomBar = document.getElementById("bottom-bar");
const viewport = window.visualViewport;
function viewportHandler() {
  const layoutViewport = document.getElementById("layoutViewport");

  // Since the bar is position: fixed we need to offset it by the visual
  // viewport's offset from the layout viewport origin.
  const offsetLeft = viewport.offsetLeft;
  const offsetTop =
    viewport.height -
    layoutViewport.getBoundingClientRect().height +
    viewport.offsetTop;

  // You could also do this by setting style.left and style.top if you
  // use width: 100% instead.
  bottomBar.style.transform = `translate(${offsetLeft}px, ${offsetTop}px) scale(${
    1 / viewport.scale
  })`;
}
window.visualViewport.addEventListener("scroll", viewportHandler);
window.visualViewport.addEventListener("resize", viewportHandler);

Примечание: Этот метод следует использовать с осторожностью; эмуляция position: device-fixed таким образом может привести к мерцанию фиксированного элемента во время прокрутки.

Спецификации

Спецификация
Модуль CSSOM View
# the-visualviewport-interface

Совместимость браузеров

Рабочий стол Мобильное устройство
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
VisualViewport 61 79 91 48 13 61 68 45 13 8.0 61
height 61 79 91 48 13 61 68 45 13 8.0 61
offsetLeft 61 79 91 48 13 61 68 45 13 8.0 61
offsetTop 61 79 91 48 13 61 68 45 13 8.0 61
pageLeft 61 79 91 48 13 61 68 45 13 8.0 61
pageTop 61 79 91 48 13 61 68 45 13 8.0 61
resize_event 62
61Обработчик события onresize не поддерживается.
79 91 49
48Обработчик события onresize не поддерживается.
13 62
61Обработчик события onresize не поддерживается.
68 46
45Обработчик события onresize не поддерживается.
13 8.0 62
61Обработчик события onresize не поддерживается.
scale 61 79 91 48 13 61 68 45 13 8.0 61
scroll_event 62
61Обработчик события onscroll не поддерживается.
79 91 49
48Обработчик события onscroll не поддерживается.
13 62
61Обработчик события onscroll не поддерживается.
68 46
45Обработчик события onscroll не поддерживается.
13 8.0 62
61Обработчик события onscroll не поддерживается.
scrollend_event 126
114Обработчик события onscrollend не поддерживается. См. ошибку 325307785.
126
114Обработчик события onscrollend не поддерживается. См. ошибку 325307785.
Нет 112
100Обработчик события onscrollend не поддерживается. См. ошибку 325307785.
Нет 126
114Обработчик события onscrollend не поддерживается. См. ошибку 325307785.
Нет 83
76Обработчик события onscrollend не поддерживается. См. ошибку 325307785.
Нет
23.0Обработчик события onscrollend не поддерживается. См. ошибку 325307785.
126
114Обработчик события onscrollend не поддерживается. См. ошибку 325307785.
width 61 79 91 48 13 61 68 45 13 8.0 61

См. также

  • Описание web-визуализаций — полезное объяснение концепций web-визуализаций, включая разницу между визуальным и компонующим viewport.

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/VisualViewport

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API