Jquery移动滑动两次左击

时间:2013-01-15 02:46:53

标签: jquery cordova jquery-mobile swipe

我有一个非常简单的用例。

在页面init上加载一个html。

 $(document).on('pageinit',function(){
                window.localStorage.setItem("page",'intro_1');                              
                $('#navigation_main').load('html/intro_1.html');

            });

在滑动时只需更改dom。

 var flag = 0;
              $("body").bind("swipeleft",function(event) {
                flag +=1;                               
                page = window.localStorage.getItem("page"); 
                alert(flag);            
                switch(page){
                    case 'intro_1':                         
                        window.localStorage.setItem("page",'intro_2');
                        $('#navigation_main').load('html/intro_2.html');                        
                        break;  

                    case 'intro_2':
                        window.localStorage.setItem("page",'challenges');
                        $('#navigation_main').load('html/challenges.html');                     
                        break;  

                    case 'challenges':
                        window.localStorage.setItem("page",'risk_areas');
                        $('#navigation_main').load('html/risk_areas.html');                     
                        break;

                    default:
                        window.localStorage.setItem("page",'intro_1');                              
                        $('#navigation_main').load('html/intro_1.html');
                        break;  
                }

            });

现在向左滑动两次,导致后续页面被加载。我怎么能阻止这个?

2 个答案:

答案 0 :(得分:3)

您可以尝试使用$("body").one代替$("body").bind,以便只调用一次。

答案 1 :(得分:2)

我认为你有多次绑定事件,可以通过几种方式解决。

  1. 在绑定事件之前使用 $(body).unbind(); 。 Unbind将删除所有已绑定的事件。不幸的是,这不是一个好的预防措施,因为你经常绑定/取消绑定,从而导致大量的处理开销。

  2. 有一种替代方法可以使用事件绑定/解除绑定,生存/死亡和开/关。在再次绑定之前不使用解绑定,而是使用jQuery事件过滤器,它可以用于标识事件是否已经绑定。不要忘记从下面发布的链接下载它(它不是jQM的标准部分)。

    http://www.codenothing.com/archives/2009/event-filter/

    这是我的用法示例:

    $('#carousel div:Event(!click)').each(function(){
        //If click is not bind to #carousel div do something
    });
    

    我正在使用每个因为我的旋转木马div有许多内部块但原则是相同的。如果#carousel内部div元素没有click事件,则添加该事件。在您的情况下,这将阻止多个事件绑定。