Долгое нажатие в JavaScript? - PullRequest
109 голосов
/ 13 апреля 2010

Возможно ли реализовать "длинное нажатие" в JavaScript (или jQuery)? Как?

альтернативный текст http://androinica.com/wp-content/uploads/2009/11/longpress_options.png

HTML

<a href="" title="">Long press</a>

JavaScript

$("a").mouseup(function(){
  // Clear timeout
  return false;
}).mousedown(function(){
  // Set timeout
  return false; 
});

Ответы [ 18 ]

2 голосов
/ 13 апреля 2010

Вы можете установить таймаут для этого элемента при наведении мыши и очистить его при наведении мыши вверх:

$("a").mousedown(function() {
    // set timeout for this element
    var timeout = window.setTimeout(function() { /* … */ }, 1234);
    $(this).mouseup(function() {
        // clear timeout for this element
        window.clearTimeout(timeout);
        // reset mouse up event handler
        $(this).unbind("mouseup");
        return false;
    });
    return false;
});

При этом каждый элемент получает свое время ожидания.

1 голос
/ 02 июня 2015

Самый элегантный и чистый плагин jQuery: https://github.com/untill/jquery.longclick/, также доступен в упаковке: https://www.npmjs.com/package/jquery.longclick.

Короче говоря, вы используете это так:

$( 'button').mayTriggerLongClicks().on( 'longClick', function() { your code here } );

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

1 голос
/ 21 апреля 2015

Вы можете использовать тапхолд jquery-mobile. Включите jquery-mobile.js, и следующий код будет работать нормально

$(document).on("pagecreate","#pagename",function(){
  $("p").on("taphold",function(){
   $(this).hide(); //your code
  });    
});
0 голосов
/ 26 июня 2019

Мне нужно что-то для длинных нажатий клавиатуры, поэтому я написал это.

var longpressKeys = [13];
var longpressTimeout = '1500';
var longpressActive = false;
var longpressFunc = null;

document.addEventListener('keydown', function(e) {
    if (longpressFunc == null && longpressKeys.indexOf(e.keyCode) > -1) {
        longpressFunc = setTimeout(function() {
            console.log('longpress triggered');
            longpressActive = true;
        }, longpressTimeout);

    // any key not defined as a longpress
    } else if (longpressKeys.indexOf(e.keyCode) == -1) {
        console.log('shortpress triggered');
    }
});

document.addEventListener('keyup', function(e) {
    clearTimeout(longpressFunc);
    longpressFunc = null;

    // longpress key triggered as a shortpress
    if (!longpressActive && longpressKeys.indexOf(e.keyCode) > -1) {
        console.log('shortpress triggered');
    }
    longpressActive = false;
});
0 голосов
/ 11 октября 2018

Вы можете использовать jquery Сенсорные события. ( см. Здесь )

  let holdBtn = $('#holdBtn')
  let holdDuration = 1000
  let holdTimer

  holdBtn.on('touchend', function () {
    // finish hold
  });
  holdBtn.on('touchstart', function () {
    // start hold
    holdTimer = setTimeout(function() {
      //action after certain time of hold
    }, holdDuration );
  });
0 голосов
/ 17 октября 2016

как это?

doc.addEeventListener("touchstart", function(){
    // your code ...
}, false);    
0 голосов
/ 12 июля 2012

Вы можете проверить время для определения щелчка или длительного нажатия [jQuery]

function AddButtonEventListener() {
try {
    var mousedowntime;
    var presstime;
    $("button[id$='" + buttonID + "']").mousedown(function() {
        var d = new Date();
        mousedowntime = d.getTime();
    });
    $("button[id$='" + buttonID + "']").mouseup(function() {
        var d = new Date();
        presstime = d.getTime() - mousedowntime;
        if (presstime > 999/*You can decide the time*/) {
            //Do_Action_Long_Press_Event();
        }
        else {
            //Do_Action_Click_Event();
        }
    });
}
catch (err) {
    alert(err.message);
}
} 
0 голосов
/ 24 мая 2012

Для меня это работа с этим кодом (с jQuery):

var int       = null,
    fired     = false;

var longclickFilm = function($t) {
        $body.css('background', 'red');
    },
    clickFilm = function($t) {
        $t  = $t.clone(false, false);
        var $to = $('footer > div:first');
        $to.find('.empty').remove();
        $t.appendTo($to);
    },
    touchStartFilm = function(event) {
        event.preventDefault();
        fired     = false;
        int       = setTimeout(function($t) {
            longclickFilm($t);
            fired = true;
        }, 2000, $(this)); // 2 sec for long click ?
        return false;
    },
    touchEndFilm = function(event) {
        event.preventDefault();
        clearTimeout(int);
        if (fired) return false;
        else  clickFilm($(this));
        return false;
    };

$('ul#thelist .thumbBox')
    .live('mousedown touchstart', touchStartFilm)
    .live('mouseup touchend touchcancel', touchEndFilm);
...