Можно ли закрыть pop-up по клику на кнопке back на смартфоне/планшете?

Здравствуйте. Собственно, вопрос - в заголовке)
Существует ли в js какой-то обработчик кнопки "назад" мобильных устройств?
  • Вопрос задан
  • 531 просмотр
Пригласить эксперта
Ответы на вопрос 1
@rejjer
Теоретически должно помочь.
1. определите, что сейчас используется смартфон/планшет
2. если да: объявите какую-нибудь глобальную переменную, которая отвечала бы за открытие попапа (myPopupOpen) и добавьте это при вызове попапа:
history.pushState(null, null, null); // добавляем пустой стейт в историю
window.onpopstate = function(event) {
    if (popupOpen) {
    	closePopUp(); // закрываем попап
    }
    window.onpopstate = null; // удаляем обработчик события перехода по истории
};

Но нужно учитывать, что на кнопку 'вперед' мы теперь перейдем на пустой стейт (на странице ничего не поменяется), а удалять стейты нельзя, соответственно у пользователя может возникнуть недопонимание.

Можно решить так:
Использовать какой-нибудь осмысленный якорь history.pushState(null, null, '#myPopup') и обработчик onpopstate сделать глобальным и не удалять, а при срабатывании - смотреть на window.location.hash, если там пусто - скрывать попап, когда он открыт (по той myPopupOpen) и открывать, если там есть якорь нужного попапа.
Переменная тут необходима, потому как мы не можем узнать, что за якорь был на предыдущем стейте (document.referrer возвращает строку до #). Так же важно не наплодить одинаковых стейтов рядом, но тут уже все в ваших руках.

HTML5 History API (хабр)
HistoryJS (для тех, кто не поддерживает HTML5 history API)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 22:26
3500 руб./за проект
22 нояб. 2024, в 21:47
3000 руб./за проект
22 нояб. 2024, в 21:44
50000 руб./за проект