Как предотвратить появление более одного предупреждения, подтверждения или приглашения в функции перемещения мыши? - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть мой JS-код, подобный следующему:

Когда вы очень быстро перемещаете мышь, будет больше, чем в окне предупреждения.Поэтому я попытался добавить переменную в функцию обратного вызова mousemove.Но проблема все еще существует, что мне делать?

var has_alert=false;
$('div').on('mousemove',function(){
  if(has_alert) return;
  has_alert=true;
  alert(2)
  has_alert=false;
})
body {background:red}
div {background:white; width:500px;height:500px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>test content</div>

1 Ответ

0 голосов
/ 18 ноября 2018

Проблема заключается в alert, confirm и prompt.Все они порождают модальное окно, которое временно блокирует обработку других ожидающих (mousemove) событий.К моменту обработки второго события обработчик первого события уже завершен, диалоговое окно закрыто, и has_alert уже вернулось в значение false.Кажется невозможным определить разницу между событиями, сгенерированными до открытия диалогового окна и сразу после закрытия диалогового окна.

Одним из решений является отложенный сбросиз has_alert:

var has_alert=false;
$('div').on('mousemove',function(){
  if(has_alert) return;
  has_alert=true;
  alert(2)
  window.setTimeout(function() { has_alert=false; }, 20);
})
body {background:red}
div {background:white; width:500px;height:500px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><body>

<div>test content</div>
</body>

Другое решение - полностью отказаться от alert, confirm и prompt и использовать вместо этого диалоги на основе HTML.ИМХО, это дизайнерское решение, о котором вы не пожалеете в долгосрочной перспективе.

...