2012-03-15 49 views
3

我需要一个导航菜单来反映基于点击和滑动的页面更改。要执行此操作,我必须在刷卡时触发点击。问题是,当我这样做,我不能再使用:更改使用触发器时的jQuery Mobile转换('点击')

$.mobile.changePage(prevpage, { transition : 'realslide', reverse : true }); 

随着作为重要组成部分的财产reverse:true。 'swipeleft'可以有一个正常的转换,但'swiperight'需要反向转换,我不能在HTML中使用data-transition="reverse",因为它取决于滑动方向。

目前这是我的代码的样子(由用户Jasper提供)。我不知道我在哪里可以在反向过渡配合

$(function(){ 
    var $nav = $('#nav').children().children(), 
     totNav = $nav.length; 

    $(document).on('swipeleft', '.ui-page', function() { 

     var next = ($nav.filter('.active').index() + 1); 

     if (next === totNav) 
      return; 

     $nav.eq(next).children().trigger('click'); 

    }).on('swiperight', '.ui-page', function() { 

     var prev = ($nav.filter('.active').index() - 1); 

     if (prev === -1) 
      return; 

     $nav.eq(prev).children().trigger('click'); 

    }).on('click', '#nav a', function(e) { 
     $(this).parent().addClass("active").siblings().removeClass("active"); 
    }); 
}); 

这个问题是这样的一个延伸。Update menu in jQuery Mobile based on swipe event

编辑: 谢谢大家对你的帮助!这是我的最终解决方案:

<script> 
    $(function(){ 

     var $nav = $('#nav').children().children(), 
      totNav = $nav.length; 

     $(document).on('swipeleft', '.ui-page', function() { 

      var next = ($nav.filter('.active').index() + 1); 
      var $elem = $nav.eq(next).children(); 

      if (next === totNav) 
       return; 

      $.mobile.changePage.defaults.reverse = false; 

      $elem.trigger('click'); 

     }).on('swiperight', '.ui-page', function() { 

      var prev = ($nav.filter('.active').index() - 1); 
      var $elem = $nav.eq(prev).children(); 

      if (prev === -1) 
       return; 

      $.mobile.changePage.defaults.reverse = true; 

      $elem.trigger('click'); 

     }).on('click', '#nav a', function(e) { 

      var prev = $nav.filter('.active').index(); 

      $(this).parent().addClass("active").siblings().removeClass("active"); 

      var now = $nav.filter('.active').index(); 

      if (prev > now) 
       $.mobile.changePage.defaults.reverse = true; 
      else 
       $.mobile.changePage.defaults.reverse = false; 

     }); 

    }); 
    </script> 

回答

4

Okey,这个解决方案可能有点骇人,但它的工作原理。

之前触发,你可以设置默认页面过渡的情况下被逆转,那么以后触发其设置为默认值。我还没有尝试过,但我想可能是这样来实现:

$(function(){ 
    var $nav = $('#nav').children().children(), 
     totNav = $nav.length; 

    $(document).on('swipeleft', '.ui-page', function() { 

     var next = ($nav.filter('.active').index() + 1); 
    $.mobile.changePage.defaults.reverse = true; // Reverse transition 
     $nav.eq(next).children().trigger('click'); 
    $.mobile.changePage.defaults.reverse = false; // Dont reverse 


    }).on('swiperight', '.ui-page', function() { 

     var prev = ($nav.filter('.active').index() - 1); 
     $nav.eq(prev).children().trigger('click'); 

    }).on('click', '#nav a', function(e) { 
     $(this).parent().addClass("active").siblings().removeClass("active"); 
    }); 
}); 
+0

+1似乎并没有太多的hackish给我 – shanabus 2012-03-15 15:34:24

+0

我不能相信工作。文档说,这些默认设置必须在jquery mobile使用'$(document).bind(“mobileinit”,function(){});'加载之前设置,所以我认为它们不可能是随时更改。 – bafromca 2012-03-15 15:54:47