jQuery mobile - для каждого живого события касания должно быть эквивалентное событие щелчка? - PullRequest
26 голосов
/ 04 июня 2011

Я заменил события живого клика jQuery на события мобильного крана jQuery, чтобы повысить отзывчивость.

У меня такое чувство, что это плохая идея по причинам совместимости.

Необходимо ли иметь оба события, и есть ли способ записать их для одной и той же функции?

Например («щелкнуть», «нажать»)

Ответы [ 5 ]

34 голосов
/ 04 июня 2011

Ответ Билли невероятно полон и на самом деле работал довольно хорошо, когда я несколько раз использовал его. Кроме того, вы можете захотеть взглянуть на плагин vmouse в JQuery Mobile , это попытка абстрагировать события мыши:

 // This plugin is an experiment for abstracting away the touch and mouse
 // events so that developers don't have to worry about which method of input
 // the device their document is loaded on supports.

- https://github.com/jquery/jquery-mobile/blob/master/js/vmouse.js

Я играл с ним в проекте, над которым я работаю, в наши дни он кажется довольно отзывчивым. Чтобы использовать, что-то вроде:

$('selector').bind('vclick', function () { ...

или

$('selector').bind('vmousedown', function () { ...
30 голосов
/ 04 июня 2011

Вы можете связать несколько событий за один звонок, как это:

$('selector').bind('click tap',function(){ ... })

Это может быть хорошо в некоторых браузерах / мобильных устройствах, однако это может привести к тому, что события будут срабатывать дважды на некоторых устройствах, которые запускают касание и щелчок.

Вы можете исправить это, выполнив какое-то обнаружение устройства / функции и добавив соответствующий обработчик только так ...

$('selector').bind( myCustomDetectionFunction() ? 'click' : 'tap' ,function(){ ... })

Кроме того, я думаю, touchstart и mousedown - лучшие события для выбора. Это связано с тем, что после касания событие щелчка не срабатывает до тех пор, пока не пройдет задержка, поскольку система дает возможность для второго касания сделать его двойным щелчком или превратить его в жест смахивания и так далее. Событие touchstart запускается немедленно, как и mousedown, поэтому должно быть более отзывчивым.

10 голосов
/ 03 июля 2012

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

https://github.com/cargomedia/jquery.touchToClick

4 голосов
/ 07 декабря 2011

Кажется, в jQuery mobile уже есть событие, которое делает именно это:

$(function(){
    $('selector').bind('vclick', function(e){
        alert('test');    
        return false;
    });
});
2 голосов
/ 29 мая 2014

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

Чтобы получить только плагин vmouse, используйте jQuery Mobile Download Builder .Включите его после jQuery, но перед любыми сценариями, которые будут зависеть от этого плагина.

Соответствующее событие vclick , основное использование выглядит следующим образом:

$(".selector").on( "vclick", function( event ) {
    // To execute
});
...