JavaScript: длинный клик для букмарклета - PullRequest
4 голосов
/ 23 августа 2011

Мне нужно распознать длинный щелчок в закладке JavaScript.Таким образом, я не могу использовать jQuery, ни событие onclick () и тому подобное.Возможно ли и как?

Ответы [ 3 ]

7 голосов
/ 23 августа 2011

onmousedown, звоните setTimeout() на время вашего длинного клика. Если время ожидания истекло, он вызовет свою функцию, чтобы сделать то, что вы надеялись сделать, при длинном щелчке. Однако onmouseup вы отменяете setTimeout(), если срок его действия еще не истек.

<script type='text/javascript'>
// t will hold the setTimeout id
// Click for 1 second to see the alert.
var t;
</script>

<button onmousedown='t=setTimeout(function(){alert("hi");}, 1000);' onmouseup='clearTimeout(t);'>Clickme</button>

Вот оно в действии в jsfiddle

1 голос
/ 23 августа 2011

Разве длинный щелчок не является щелчком, когда события mousedown и mouseclick значительно удалены друг от друга?Чтобы решить эту проблему, вы можете просто измерить время, которое требуется от события mousedown до события щелчка, и проверить, если оно, например, дольше двух секунд (или что вы хотите).

Вы можете получить доступ к текущим миллисекундам с 01.01.1970 через new Date().getTime().Учитывая, что я бы интуитивно проверил такой «длинный щелчок».

$(".selector").mousedown(function() {
    $(this).data("timestamp", new Date().getTime());
}).click(function(event) {
    var e = $(this);

    var start = e.data("timestamp");
    e.removeData("timestamp");

    if (start && new Date().getTime() - start > YOUR_DESIRED_WAIT_TIME_IN_MILLISECONDS) {
        // Trigger whatever you want to trigger
    } else {
        event.preventDefault();
        event.stopPropagation();
    }
});
0 голосов
/ 12 февраля 2012

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

Первый щелчок: запишите время, а затем таймер для выполнения действия 1 за 500 миллисекунд.

Второй клик: если время с момента последнего клика короткое, отмените таймер и выполните действие2. Если с момента последнего клика прошло много времени, это первый клик.

Ничто не мешает вам использовать тройной щелчок и т. Д.

...