<MyRusakov.ru />

Профессия Web-разработчик

Профессия Web-разработчик

Этот комплект за 8 месяцев превратит Вас в Web-разработчика с нуля. Учиться достаточно 1 час в день.

Начнёте Вы с HTML, CSS и вёрстки сайтов. Потом перейдёте к программированию и JavaScript. Затем изучите PHP, MySQL, SQL, Python. Изучите Web-фреймворки Laravel и Django. Создадите 5 своих сайтов для портфолио.

Комплект содержит:

- 540 видеоуроков

- 110 часов видео

- 1205 заданий для закрепления материала из уроков

- 5 финальных тестов

- 7 сертификатов

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Как определить скрытие веб-страницы из-за наложения на мобильных устройствах?

Как определить скрытие веб-страницы из-за наложения на мобильных устройствах?

Определить, скрыта ли веб-страница из-за наложения, например, системного уровня на мобильном устройстве (уведомление о входящем звонке, управление громкостью или переключение приложений), может быть непросто. API видимости страницы (Page Visibility API, document.visibilityState) обычно не обнаруживает такие случаи, так как страница технически остается "видимой" для браузера.

Почему visibilityState может не работать

  • Системные наложения не обязательно вызывают событие visibilitychange, так как страница всё ещё считается "видимой" для браузера.
  • Браузер может не распознавать такие наложения как изменение состояния видимости страницы.

Альтернативные подходы

Для обнаружения таких ситуаций можно использовать косвенные методы, такие как мониторинг взаимодействий пользователя, фокусировки окна или тайминговых механизмов. Вот несколько стратегий:

1. Обнаружение потери фокуса

Отслеживайте события window.onblur и window.onfocus. Эти события могут срабатывать, когда появляется или исчезает системное наложение, хотя это зависит от типа наложения и поведения браузера.

let isHiddenByOverlay = false;

window.addEventListener('blur', () => {
  console.log('Страница может быть скрыта наложением.');
  isHiddenByOverlay = true;
});

window.addEventListener('focus', () => {
  console.log('Страница снова активна.');
  isHiddenByOverlay = false;
});

2. Тайм-аут активности

Отслеживайте взаимодействие пользователя (например, движения мыши, касания или нажатия клавиш). Если в течение разумного времени не происходит взаимодействий, а visibilityState остаётся "видимым", можно предположить наличие наложения.

let lastActivityTime = Date.now();

const resetActivityTimer = () => {
  lastActivityTime = Date.now();
};

document.addEventListener('mousemove', resetActivityTimer);
document.addEventListener('touchstart', resetActivityTimer);
document.addEventListener('keydown', resetActivityTimer);

setInterval(() => {
  if (Date.now() - lastActivityTime > 10000 && document.visibilityState === 'visible') {
    console.log('Страница может быть скрыта наложением или неактивна.');
  }
}, 5000);

3. Изменения CSS и события изменения размеров

Некоторые наложения могут вызывать изменения в области просмотра или макете страницы. Отслеживайте события resize и наблюдайте за необычными изменениями.

window.addEventListener('resize', () => {
  console.log('Область просмотра или макет могли измениться.');
  // Дополнительная логика для обнаружения наложений
});

4. Использование requestAnimationFrame (для анализа производительности)

Можно измерять частоту кадров или отзывчивость анимаций. Значительное падение частоты кадров может указывать на наложение, влияющее на рендеринг.

let lastFrameTime = Date.now();

const detectOverlay = () => {
  const now = Date.now();
  if (now - lastFrameTime > 500) { // Обнаружение задержек кадров
    console.log('Возможно, обнаружено наложение (низкая отзывчивость).');
  }
  lastFrameTime = now;
  requestAnimationFrame(detectOverlay);
};

detectOverlay();

Комбинирование подходов

Для большей надежности объедините несколько сигналов, таких как: - Отсутствие взаимодействия с пользователем - События blur - Падение частоты кадров - Отсутствие значительных обновлений контента

Ограничения

  • Нет полной гарантии: Эти методы дают лишь косвенные признаки, но не являются абсолютно точными из-за разнообразия наложений на устройствах и браузерах.
  • Системные наложения: Некоторые наложения полностью находятся вне контроля браузера и не могут быть обнаружены программно.

Если эти методы не полностью соответствуют вашим потребностям, можно рассмотреть возможность подачи запроса на улучшение браузеров, чтобы расширить возможности visibilityState для таких случаев.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.