Почему после выполнения функции не происходит перезапись переменной?

135
11 апреля 2022, 08:50

У мен на сайте есть попап, который на десктопе всплывает, когда мы уводим мышку вверх и только 2 раза, с разницей в 3 минуты, а на тач-устройствах оно всплывает через 20 секунд после загрузки страницы. Но появилась проблема наслоения попапов: если посетитель зашёл на сайт и уже открыл какую-то форму, то ему поверх потом всплывает окно. Проблему на десктопе решила так:

var action = '0';
$(".header2-catalog_btn").click(function(){
        $("#cataloghomepopup").addClass("show");
        action = '1';
        return action;
    }),
    $("#cataloghomepopup-close").click(function(){
        $("#cataloghomepopup").removeClass("show");
        action = '0';
        return action;
    }),
$(document).ready(function(){
        var lastPop = 0;
        var count = 0;
        $(document).on('mouseleave', popup);
        function popup(e){
            var now = new Date().getTime();
            var left_3min = 180000 < ( now - lastPop );
            console.log(now - lastPop);
            if (e.clientY < 0 && left_3min && action == '0') {
                $("#staypopup").addClass("show");
                lastPop = now;
                if( ++count == 2 )
                $(document).off('mouseleave', popup);
            }
        }
    })

А на тач-устройствах, тем же способом, вот код:

$(document).ready(function(){
        if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
            if (action == '0'){
                setTimeout(function(){
                    $("#staypopup").addClass("show")}
                    , 20000);
            }         
        }})

Но на тач-устройствах всё равно происходит наслоения форм((( Может это моя невнимательность или я что-то делаю не так? Подскажите пожалуйста. И еще один момент - при проверке устройства, все ли у меня прописаны маркеры, не хотелось бы чтобы на каком-нибудь планшете или телефон вообще не работало. Заранее спасибо!

Answer 1

Тут случается наслоение попапов потому что вначале надо запускать таймер и когда время прийдет то проверять action и открыть попап так как через 20секунд action 0 уже может быть не актуален а попап всеравно откроет

if (action == '0'){
   setTimeout(function(){
      $("#staypopup").addClass("show")}
   , 20000);
}
READ ALSO
querySelectorAll обработка в функции

querySelectorAll обработка в функции

Делаю обработчики для меню, получается так, что обрабатываю множество событий на различные селекторыПолучаю все элементы через класс с помощью...

151
Перемещение метки яндекс карты при движении курсора

Перемещение метки яндекс карты при движении курсора

На Авито (добавление объявления) при выборе адреса на карте метка движется вместе с курсором (по центру)Я пытаюсь повторить тоже самое , но не совсем...

243
Вопрос из задачника

Вопрос из задачника

Число называется счастливым если при складывании, суммы обеих сторон числа ровны друг другуНа пример։A=1230 считается счастливым потому что...

295
Хочу понять как работает эта функция (Java Script)

Хочу понять как работает эта функция (Java Script)

Найти наибольший общий делитель двух натуральных чисел:

211