Подтвердить что ты не робот

JQuery mobile - для каждого события прямого трансляционного события должно существовать эквивалентное событие click?

Я заменил jQuery live click events на jQuery для мобильных событий, чтобы повысить отзывчивость.

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

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

Например, ('click', 'tap')

4b9b3361

Ответ 1

Ответ Билли невероятно завершен и на самом деле хорошо работал несколько раз, когда я его использовал. Кроме того, однако, вы можете посмотреть плагин 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 () { ...

Ответ 2

Вы можете связать несколько событий в один вызов следующим образом:

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

$(function(){
    $('selector').bind('vclick', function(e){
        alert('test');    
        return false;
    });
});

Ответ 5

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

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

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

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