2012-03-15 23 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