удаление задержки onclick для веб-приложений для Android - PullRequest
2 голосов
/ 15 марта 2012

Привет, я создаю веб-приложение.Чтобы убрать задержку включения, я нашел этот скрипт на http://cubiq.org/remove-onclick-delay-on-webkit-for-iphone Код в основном -

function NoClickDelay(el) {
this.element = el;
if( 'ontouchstart' in window ){  
    console.log("===================touch supported :P")
    this.element.addEventListener('touchstart', this.handleEvent, false);
}                              
}

NoClickDelay.prototype = {
handleEvent: function(e) {
     switch(e.type) {
        case 'touchstart': this.onTouchStart(e); break;
        case 'touchmove': this.onTouchMove(e); break;
        case 'touchend': this.onTouchEnd(e); break;
    }
},

onTouchStart: function(e) {

    //e.preventDefault(); //removed to let the page scroll
    this.moved = false;

    this.element.addEventListener('touchmove', this, false);
    this.element.addEventListener('touchend', this, false);
},

onTouchMove: function(e) {

    this.moved = true;
},

onTouchEnd: function(e) {
    this.element.removeEventListener('touchmove', this, false);
    this.element.removeEventListener('touchend', this, false);

    if( !this.moved ) {
        // Place your code here or use the click simulation below
        var theTarget = document.elementFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY);
        if(theTarget.nodeType == 3) theTarget = theTarget.parentNode;

        var theEvent = document.createEvent('MouseEvents');
        theEvent.initEvent('click', true, true);
        theTarget.dispatchEvent(theEvent);
    }
}
};

Мой вопрос заключается в том, что это работает на iphone / ipad, но не на Android.Что мешает ему работать в Android и что я могу сделать, чтобы добиться аналогичного поведения в Android и других устройствах ???пожалуйста, помогите.

Ответы [ 4 ]

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

У нас была та же проблема, и мы решили ее немного другим подходом. Мы смогли это исправить для iPhone и Android. Клики будут срабатывать немедленно, а отложенные события будут игнорироваться. Может быть, вы можете использовать это:

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

1 голос
/ 28 марта 2012

В вашей ссылке есть кто-то, прокомментировавший решение Android (я не пробовал):

У Android та же проблема с запаздывающими кликами. Ваша демонстрационная версия не работает на Android, если я не закомментирую окно. Нажмите ниже, поэтому я считаю, что свойство DOM видно только на iOS.

function NoClickDelay(el) {
this.element = el;
// if (window.Touch) not available on android
this.element.addEventListener(‘touchstart’, this, false);
}

С вышеуказанным изменением Android получает сенсорное событие без задержек!

0 голосов
/ 10 октября 2014

<meta name="viewport" content="width=device-width, user-scalable=no">

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

0 голосов
/ 23 июля 2014

touchToClick или fastclick не работает в моем случае.

У меня было много кода на событиях onclick, и я на самом деле использую Tappy:

Событие onClick в веб-просмотре Android слишком медленное

...