Долгое время между событием do и обработкой его с помощью jquerymobile / phonegap - PullRequest
0 голосов
/ 04 ноября 2011

Я разрабатываю приложение, используя phonegap и jquerymobile / jquery. Во время разработки у меня было только виртуальное устройство iOS, и теперь, когда я тестирую приложение на реальном устройстве, я вижу, что время между щелчком на элементе и обработкой этого события очень велико. Например, если я щелкну по значку, появится значок загрузчика, но этот значок сначала появляется в момент окончательной загрузки следующей страницы (очень скоро отображается загрузчик).

Я давно работаю с Javascript и всегда концентрируюсь на быстром выполнении, но это очень странно.

Приложение имеет около 10 просмотров в одном файле HTML. А при нажатии на элемент показывается только следующая часть этих файлов.

Кто-нибудь знает о решениях для решения "ошибок", подобных этим?

Заранее спасибо.

1 Ответ

3 голосов
/ 04 ноября 2011

Задержка клика на iPhone - это функция, используемая для различения кликов и прокрутки.Когда вы привязываетесь к событию click, iOS ждет около 300 мс, чтобы решить, нажали ли вы на объект или пытаетесь прокрутить страницу.

Вы можете использовать событие vclick jQuery Mobile, которое срабатывает намного быстрее, однако выВероятно, возникают ситуации, когда событие vclick запускается дважды подряд, что может привести к щелчку нескольких элементов.Вот пример кода того, как использовать vclick события и захватывать только событие, инициированное первым:

$(function () {

    //setup a function to check if a vclick event has fired within the last 500ms
    function check_vclick () {

        //if a vclick event has fired in the last 500ms then return false
        if (do_vclick == false) return false;

        //otherwise set a flag to disallow vclicks for 500ms
        do_vclick = false;

        //setup a timeout to allow vclicks in 500ms
        setTimeout(function () {
            do_vclick = true;
        }, 500);

        //return true so the event handler knows it's ok to run its code
        return true;
    }

    //setup a flag to allow/disallow vclick events from firing
    var do_vclick = true;

    //bind an event handler to the vclick event for an element
    $('#link_id').bind('vclick', function () {
        if (check_vclick()) {
            //run the code associated with the element, if it's a link referencing a pseudo-page on the same HTML document, you can do something like this
            $.mobile.changePage($(this.href));
        }
    });
});

Вот ссылка на документацию для $.mobile.changePage(): http://jquerymobile.com/demos/1.0rc2/docs/api/methods.html

Вот ссылка на документацию для vclick (обратите внимание на примечания в разделе событий виртуальной мыши): http://jquerymobile.com/demos/1.0rc2/docs/api/events.html

...