在事件之间很长时间并使用jquerymobile / phonegap处理它

时间:2011-11-04 15:23:18

标签: javascript jquery jquery-mobile cordova

我使用phonegap和jquerymobile / jquery开发了一个应用程序。 在开发过程中我只有一个虚拟的iOS设备,现在因为我在一个真实的设备上测试应用程序,我看到,点击一个元素和处理这个事件之间的时间很长。 例如,如果我单击一个图标,则会显示一个加载器图标,但此图标首先出现在下一页最终加载的时刻(显示加载程序的时间非常短)。

我使用Javascript开发很长一段时间并始终专注于高性能执行,但这很奇怪。

App在一个HTML文件中有大约10个视图。点击一个元素只显示这些文件的下一部分。

有没有人知道解决这些“错误”的解决方案?

提前致谢。

1 个答案:

答案 0 :(得分:3)

iPhone上的点击延迟是用于区分点击和滚动的功能。当您绑定到click事件时,iOS会等待大约300毫秒来决定您是单击对象还是尝试滚动页面。

你可以使用jQuery Mobile的vclick事件,它的触发速度要快得多,但是你可能会遇到连续两次触发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