Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 5000-й день

 javascript - обновление страницы через N-секунд без активности

mzk
Aug 3 2019, 19:45
  
Пост #1



Репутация:   82  
Cтаршой
**

Группа: Пользователи
Сообщений: 657
С нами с: 27-February 08


Камрады, нагуглил вот такой код:
CODE Format

(function(seconds) {
    

    var refresh,      
        intvrefresh = function() {
            
            clearInterval(refresh);
            refresh = setTimeout(function() {
               location.href = location.href;
            }, seconds * 1000);
            
        };

    $(document).on('keypress click', function() { intvrefresh()  });
    intvrefresh();

}(60));

Перезагружает страницу, если нет активности\кликов.

Хочется добавить еще красивый вопрос перед обновлением страницы "Вы еще здесь?" и кнопки "Да" \ "Нет"

Не хватает знания и опыта... Прошу помощи geek.png
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов(1 - 7)
YaAllex
Aug 3 2019, 21:06
  
Пост #2



Репутация:   45  
Активист
*

Группа: Пользователи
Сообщений: 333
С нами с: 15-November 11


Забавно, но
"Вы еще здесь?" и кнопки "Да" \ "Нет"

подпадет под
CODE Format

$(document).on('keypress click', function() { intvrefresh()  });

и будет не важно, что нажато + как вы думаете имеет ли вообще смысл кнопка "нет"? нет - меня тут нет? eyes_open.png



По самой задаче:
вы можете создать модальное окно и отображаеть его по еще одному таймеру но с -5/-10 секунд
User is online!Profile CardPM
Go to the top of the page
+Quote Post
mzk
Aug 4 2019, 10:58
  
Пост #3



Репутация:   82  
Cтаршой
**

Группа: Пользователи
Сообщений: 657
С нами с: 27-February 08


Согласен, с кнопкой "Нет" забавно получается smile.png

С модальными окнами разобрался - нажимаю на спрятанную кнопку каждые 60 сек таким образом:
CODE Format

(function(seconds) {
    

    var refresh,      
        intvrefresh = function() {
            
            clearInterval(refresh);
            refresh = setTimeout(function() {
               location.href = location.href;
            }, seconds * 1000);
            
        };

    $(document).on('keypress click', function() { intvrefresh()  });
    intvrefresh();

$(document).ready(function(){

    $('#myBtn').trigger('click');

});

}(60));


Только не получается сделать его вывод по таймеру -10 сек... и только в том случае, если кто-то что-то ввел в поле "инпут"



User is offlineProfile CardPM
Go to the top of the page
+Quote Post
YaAllex
Aug 4 2019, 11:15
  
Пост #4



Репутация:   45  
Активист
*

Группа: Пользователи
Сообщений: 333
С нами с: 15-November 11


» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


CODE Format
$(document).ready(function(){

    $('#myBtn').trigger('click');

});

вот это либо не доделано, либо не нужно:
по любому нажатию на любой элемент(или любую клавишу) у вас должен сработать intvrefresh ( очистка интервала и запуск счетчика заново(60сек) ), т.е. вам нужно что то подобное
CODE Format
  
$('#myBtn').on('click', function(){ логика сокрытия модального окна } );


сам таймер для отображения модального окна я бы прописывал в intvrefresh

CODE Format

var refresh,
modal_window_timer,
intvrefresh = () => {
            
            clearInterval(refresh);
            clearInterval(madal_window_timer);
                        modal_window_timer = setTimeout(function() {
              // логика отображения модального окна
            }, (seconds-10) * 1000);
            refresh = setTimeout(function() {
               location.href = location.href;
            }, seconds * 1000);
            
        };



Как то так, но все нужно тестить и проверять...

Сообщение отредактировал YaAllex - Aug 4 2019, 11:19
User is online!Profile CardPM
Go to the top of the page
+Quote Post
YaAllex
Aug 4 2019, 11:59
  
Пост #5



Репутация:   45  
Активист
*

Группа: Пользователи
Сообщений: 333
С нами с: 15-November 11


Рабочий вариант, но имхо - пилить и пилить.
User is online!Profile CardPM
Go to the top of the page
+Quote Post
mzk
Aug 5 2019, 8:28
  
Пост #6



Репутация:   82  
Cтаршой
**

Группа: Пользователи
Сообщений: 657
С нами с: 27-February 08


Да... Получается неплохо, спасибо
Но пилить еще и пилить: после первого нажатия на "Да" оно второй раз уже спрашивает через время
И еще придумать, как отслеживать поле инпута правильно: если пустое, то ничего не делать, если не пустое - спросить

Хм
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
YaAllex
Aug 5 2019, 8:42
  
Пост #7



Репутация:   45  
Активист
*

Группа: Пользователи
Сообщений: 333
С нами с: 15-November 11


(mzk @ Aug 5 2019, 9:28) Перейти к цитате

Да... Получается неплохо, спасибо
Но пилить еще и пилить: после первого нажатия на "Да" оно второй раз уже спрашивает через время
И еще придумать, как отслеживать поле инпута правильно: если пустое, то ничего не делать, если не пустое - спросить

Хм


хмм... я выше выкладывал рабочий вариант, там же и код можно забрать; если после первого раза не срабатывает - значит не там поставили создание таймера.

Поле инпута не помню как в jQuery отслеживать( а смотреть влом) , но в ванильном js это document.getElementById(" тут ай-ди инпута ").value -> если значение не пустое то спрашивать "что то там"
User is online!Profile CardPM
Go to the top of the page
+Quote Post
mzk
Aug 5 2019, 9:27
  
Пост #8



Репутация:   82  
Cтаршой
**

Группа: Пользователи
Сообщений: 657
С нами с: 27-February 08


Понял, буду ковыряться дальше
Большое спасибо smile.png
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicStart new topic

 



- Упрощённая версия
Сейчас: 22nd November 2019 - 16:53
Сайт не предоставляет электронные версии произведений, а занимается лишь коллекционированием и каталогизацией ссылок, присылаемых и публикуемых на форуме нашими читателями. Если вы являетесь правообладателем какого-либо представленного материала и не желаете чтобы ссылка на него находилась в нашем каталоге, свяжитесь с нами и мы удалим её. Файлы для обмена предоставлены пользователями сайта.