Javascript задерживает событие mousedown

1

Я пытаюсь сделать следующий код работы:

document.onmousedown = function(e){
  setTimeout(function(){ e }, 3000);
};

Это всего лишь псевдокод, но я хочу захватить событие mousedown и запустить его позже. Это не имеет значения, если он срабатывает в первый раз или нет (т.е. Preventdefault).

Если это событие щелчка, я знаю, что я мог бы просто сохранить clientX, clienty of e и повторно инициализировать событие, но я не смог найти способ имитировать мышь с помощью JavaScript.

  • 0
    По какой причине вы хотите отложить событие mousedown?
Теги:
onclick

4 ответа

1
Лучший ответ

Вы можете попробовать что-то вроде этого:

document.onmousedown = (args) =>
  setTimeout(() => fn.apply(null, [args]), 500)

var fn = (args) => {
  console.log('onmousedown args', args)
}
Click anywhere and check the console (wait for it)

Если я правильно вас понимаю, это позволит вам выполнить это событие onmousedown позже с теми же параметрами.

Смотрите здесь

2

Если вы хотите вызвать событие mousedown, просто используйте этот api MouseEvent()

Конструктор MouseEvent() создает новый MouseEvent.

Код выглядит так:

var trigger = false
document.onmousedown = function(e){
    var t = new MouseEvent('mousedown',e)
    console.log(t)
    if(!trigger)
    {
        trigger = true;
        document.dispatchEvent(t)
    }
};
  • 0
    Если ОП подтвердит эту работу, я буду голосовать. Не могу потрудиться проверить это сам: p
  • 0
    Это действительно работает, спасибо! Я просто нашел ответ Акриона более полным.
Показать ещё 1 комментарий
0

Попробуйте этот код

Код HTML:

<p id="myParaid">
Click the text! The mouseDown() function is triggered when the mouse button is pressed down over this paragraph, 
</p>

Код JS:

$( "#myParaid" ).mousedown(function() {
  alert( "Handler for .mousedown() called." );
  setTimeout(myFunction, 3000);
});
function myFunction(){
alert('3000 Over');
}

Jsfiddle

  • 0
    Почему вы почувствовали необходимость ввести jQuery? Не говоря уже об этом, ничто не отличается от того, что уже есть у OP.
0

У вашего кода нет проблем. Может быть, где-нибудь еще заменить onmousedown listenter. Лучше всего использовать addEventListener

document.addEventListener("mousedown", function(e) {
setTimeout(function() {
   //your code here
}, 3000)});

или если вы используете jQuery, вы можете использовать этот код

$(document).on("mousedown", function(e) {
    setTimeout(function() {
        //your code here
    }, 3000);
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню