Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.05.2020, 01:10
Интересующийся
Отправить личное сообщение для Sviside Посмотреть профиль Найти все сообщения от Sviside
 
Регистрация: 16.04.2018
Сообщений: 14

Прошу помощи коллег
Добрый день,
Требуется: Отобразить модальное окно, если в течении 30 секунд не было клика по двум кнопкам с разными классами
Правильно понимаю, что нужно отменить стандартное всплытие на кнопках и поставить обработчик на сам body, а спустя заданный временной период отменить preventDefault?

Прошу совета у более компетентных коллег, как решить данную задачу наименее "колхозно"
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 05.05.2020, 02:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

напоминание о нажатии
Sviside,

<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>

  <script>
window.addEventListener('load', function() {
    const limit = 5000;
    let data = Array.from(document.querySelectorAll('button'), (button, i) =>
        (button.addEventListener('click', () => data[i] = performance.now()), performance.now())
    )
    const loop = now => {
      const delta = now - Math.min(...data);
      if(delta > limit) show(delta);
      else show(0);
      requestAnimationFrame(loop)
    };
    const show = num => out.innerHTML = num ? `Не было нажатий ${Math.trunc(num/1000)} сек.` : '';
    requestAnimationFrame(loop);
})
  </script>

</head>
<body>

<button type="button">click</button>
<button type="button">click</button>
<output id="out"></output>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 05.05.2020, 20:35
Интересующийся
Отправить личное сообщение для Sviside Посмотреть профиль Найти все сообщения от Sviside
 
Регистрация: 16.04.2018
Сообщений: 14

Несколько иное имел ввиду, но суть да, понял)
Большое вам спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 05.05.2020, 22:29
Интересующийся
Отправить личное сообщение для Sviside Посмотреть профиль Найти все сообщения от Sviside
 
Регистрация: 16.04.2018
Сообщений: 14

рони,

Несколько не то у меня получается. Скажите пожалуйста, я могу же повесить addEventListener на элемент, и загнать все в setTimeout ?
Ответить с цитированием
  #5 (permalink)  
Старый 05.05.2020, 22:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Sviside,
не понимаю, не знаю что вы хотите сделать.
Ответить с цитированием
  #6 (permalink)  
Старый 06.05.2020, 02:12
Интересующийся
Отправить личное сообщение для Sviside Посмотреть профиль Найти все сообщения от Sviside
 
Регистрация: 16.04.2018
Сообщений: 14

рони,
Если интересно, но решил задачу просто и костыльно - даю setTimeout, а по клику clearTimeout
Но мне понравилась ваша реализация, попробую переписать под себя
Еще раз большое спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу помощи в оптимизации кода eagle_nest Общие вопросы Javascript 0 07.10.2017 16:13
Прошу помощи! Slandewi jQuery 3 13.07.2016 23:32
Прошу помощи с формой обратной связи markfostel jQuery 14 14.10.2015 00:29
прошу помощи с autocomplete uj query ramko AJAX и COMET 2 27.09.2013 20:35
Прошу помощи скриптеров или кого либо кто поможет :) f00rZik Общие вопросы Javascript 13 05.01.2012 03:42