Jaki jest najlepszy sposób obsługi zdarzeń longtap i double-tap na urządzeniach mobilnych za pomocą jQuery?

Szukam najlepszego rozwiązania do dodawania zarówno zdarzeń "doubletap", jak i "longtap" do użycia z funkcjami live(), bind() i trigger () jQuery. Mam własne szybkie rozwiązanie, ale jest trochę popsute. Czy ktoś ma pluginy, które poleciłby, lub własne, którymi chciałby się podzielić?

Author: Luke Dennis, 2011-03-31

7 answers

Został zgłoszony do jQuery jako błąd, ale ponieważ doubletapping nie jest tym samym co doubleclicking, nie ma wysokiego priorytetu. Jednak mastermind Raul Sanchez zakodował rozwiązanie jquery dla doubletap, którego prawdopodobnie możesz użyć! Oto link , działa na mobilnym Safari.

Jest łatwy w użyciu:
$('selector').doubletap(function() {});

-edit -

I jest wtyczka longtap tutaj ! Możesz zobaczyć demo na iPadzie lub iPhonie tutaj .

 21
Author: rsplak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-06 20:54:22

Odpowiedź Rsplaka jest dobra. Sprawdziłem ten link i działa dobrze.

Implementuje jednak tylko funkcję doubletap jQuery

Potrzebowałem niestandardowego zdarzenia doubletap , do którego mógłbym powiązać/delegować. tj.

$('.myelement').bind('doubletap', function(event){
    //...
});
To jest ważniejsze, jeśli piszesz kręgosłup.aplikacja js style, w której dzieje się wiele wiązań zdarzeń. Więc wziąłem pracę Raula Sancheza i przekształciłem ją w "jQuery special event".

Spójrz tutaj: https://gist.github.com/1652946 może się komuś przydać.

 11
Author: asgeo1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-21 14:42:32

Wystarczy użyć wielotouchowej biblioteki JavaScript, takiej jak Hammer.js . Następnie możesz napisać kod w stylu:

canvas
    .hammer({prevent_default: true})
    .bind('doubletap', function(e) { // Also fires on double click
        // Generate a pony
    })
    .bind('hold', function(e) {
        // Generate a unicorn
    });

Obsługuje tap, double tap, swipe, hold, transform (TJ, pinch) i przeciągnij. Zdarzenia dotykowe uruchamiane są również wtedy, gdy występują równoważne działania myszy, więc nie trzeba pisać dwóch zestawów procedur obsługi zdarzeń. Oh, I potrzebujesz wtyczki jQuery, jeśli chcesz być w stanie pisać w jquery sposób, jak ja.

napisałem bardzo podobną odpowiedź na to pytanie ponieważ jest również bardzo popularny, ale niezbyt dobrze odpowiedział.

 6
Author: David Johnstone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:53:25

Możesz również użyć jQuery Finger , który obsługuje również delegację zdarzeń:

Dla longtap :

// direct event
$('selector').on('press', function() { /* handle event */ });

// delegated event
$('ancestor').on('press', 'selector', function() { /* handle event */ });

Dla double tap :

// direct event
$('selector').on('doubletap', function() { /* handle event */ });

// delegated event
$('ancestor').on('doubletap', 'selector', function() { /* handle event */ });
 6
Author: ngryman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-01 23:06:42

Oto dość podstawowy zarys funkcji, którą możesz rozszerzyć dla longtap:

$('#myDiv').mousedown(function() {
    var d = new Date;
    a = d.getTime();
});

$('#myDiv').mouseup(function() {
    var d = new Date;
    b = d.getTime();

    if (b-a > 500) {
        alert('This has been a longtouch!');
    }
});

Długość czasu może być określona przez blok if w funkcji mouseup. To prawdopodobnie może być wzmocnione na dobry interes. Mam jsFiddle ustawiony dla tych, którzy chcą się nim bawić.

EDIT: właśnie zdałem sobie sprawę, że to zależy od mousedown i mouseup bycia wystrzelonym z dotknięciem palca. Jeśli tak nie jest, to zastąp odpowiednią metodę... Nie jestem że zna się na rozwoju mobilnym.

 2
Author: eykanal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-06 21:01:39

Na podstawie najnowszych dokumentów jquery napisałem Zdarzenie doubletap

Https://gist.github.com/attenzione/7098476

 0
Author: Attenzione,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-22 10:45:30
 function itemTapEvent(event) {
    if (event.type == 'touchend') {
        var lastTouch = $(this).data('lastTouch') || {lastTime: 0},
            now       = event.timeStamp,
            delta     = now - lastTouch.lastTime;

            if ( delta > 20 && delta < 250 ) {
                if (lastTouch.timerEv)
                  clearTimeout(lastTouch.timerEv);
                return;
            } else
                $(this).data('lastTouch', {lastTime: now});

            $(this).data('lastTouch')['timerEv'] = setTimeout(function() {
                $(this).trigger('touchend');
            }, 250);
    }
    }

    $('selector').bind('touchend', itemTapEvent);
 0
Author: tdjprog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-17 02:07:06