1

Тема: Не працює clearTimeout

Є код який активовує модальне вікно в певний час, коли вікно відрито то воно повинно закриватися по кліку на хрестик, і при цьому повинен скидатися setTimeout но чомусь clearTimeout не працює, не розумію чому?

сайт на якому це потрібно зробити
http://vkorotrk.beget.tech/#

/* --------- Модальне вікно (Ми закриті) ----------- */
    var timerID = null;
    
    var activeModal = function() {
        var date = new Date();
        var day = date.getDay();
        var hours = date.getHours();
        var minutes = date.getMinutes();
        
        if ((day != 5 && day != 6)) {
            if ((hours >= 23 && minutes >= 0) || (hours >= 0) && (hours < 9)) {
                $('.moval-close-shop, .modal-overlay-close-shop').addClass('active');
            } else if ((hours >= 9 && minutes >= 0) && (hours < 23)) {
                $('.moval-close-shop, .modal-overlay-close-shop').removeClass('active');
            }
        } else if (day == 5 && day == 6) {
            if ((hours >= 12 && minutes >= 0) || (hours != 9)) {
                $('.moval-close-shop, .modal-overlay-close-shop').addClass('active');
            } else if ((hours >= 9 && minutes >= 0) && (hours < 12)) {
                $('.moval-close-shop, .modal-overlay-close-shop').removeClass('active');
            }
        }
        
        timerID = window.setTimeout(function() {
            activeModal();    
        }, 1000);
    }    
    activeModal();
    
    $('.moval-close-shop .close').click(function(e) {
       clearTimeout(timerID);
        
       var dur = 200,
           overlay = $('.modal-overlay-close-shop');        

        $(this).closest('.moval-close-shop').fadeOut(dur, function() {
           overlay.fadeOut(dur);            
        });        
    });

2

Re: Не працює clearTimeout

Можеш це винести в якусь js-пісочницю, щоб люди могли перевірити?
По ідеї має працювати.

3

Re: Не працює clearTimeout

Може треба window.clearTimeout(timerID)?

...

4 Востаннє редагувалося sapientisat (28.06.2017 20:37:54)

Re: Не працює clearTimeout

/KIT\ написав:

Може треба window.clearTimeout(timerID)?

Якщо не помиляюсь, в анонімної функції this буде вказувати на window, тому можна писати і так, і так

window.clearTimeout === clearTimeout

5

Re: Не працює clearTimeout

дякую всім!
Зробив все на без jquery на javascript і працює, в чому проблема так і не зрозумів

Подякували: 221VOLT1

6

Re: Не працює clearTimeout

serhi11
У вас здається в логіці проблема, я не бачу потреби взагалі  використання setTimeout.
Із вашого коду, ви один раз викликається activeModal, і потім ця сама ф-ія викликається із анонімного ф-ії, яку запхали у setTimeout.
Ви вкурсі, як працює ця функція? Вона виклає колбек, який переданий в першому параметрі, через інтервал часу, який переданий в другом параметрі (в мілісекундах, 1000 це 1(одна) секунда). І все, вона більше нічого не робить.
Маю підозру що ви хотіли використати ф-ію setInterval, та clearInterval, правильно?

(function(){
  console.log("called anonymously");
})()