2013-02-12 30 views
0

這可能是一個愚蠢的問題,但我有一個問題,不與代碼不工作 - 這是相當的代碼太長...jQuery的:更短的代碼(如果與VAR)

一切工作正常,但例如有沒有辦法縮短if/else? 或者是否有可能跟蹤4個不同的var但用更短的代碼?

var transitionState_N = '-'; 
var transitionState_X = '-'; 
var transitionState_Y = '-'; 
var transitionState_Z= '-'; 

// carousel 4way 
function carousel_4way_N (n, el, m) { 
    var carousel = '#carousel-4way-nav-' + n 
    var carousel_content = '#carousel-4way-' + n 
     if (transitionState_N == '-') 
      { 
      transitionState_N = '+'; 
      } 
      else 
      { 
      transitionState_N = '-'; 
      } 
     $(carousel_reset).hide(); 
     $(carousel).transition(
     {y: m + '=10',delay:200} 
     ); 
     }; 

function carousel_4way_X (n, el, m) { 
    var carousel = '#carousel-4way-nav-' + n 
    var carousel_content = '#carousel-4way-' + n 
     if (transitionState_X == '-') 
      { 
      transitionState_X = '+'; 
      } 
      else 
      { 
      transitionState_X = '-'; 
      } 
     $(carousel_reset).hide(); 
     $(carousel).transition(
     {y: m + '=10',delay:200} 
     ); 
     }; 

function carousel_4way_Y (n, el, m) { 
    var carousel = '#carousel-4way-nav-' + n 
    var carousel_content = '#carousel-4way-' + n 
     if (transitionState_Y == '-') 
      { 
      transitionState_Y = '+'; 
      } 
      else 
      { 
      transitionState_Y = '-'; 
      } 
     $(carousel_reset).hide(); 
     $(carousel).transition(
     {y: m + '=10',delay:200} 
     ); 
     }; 

function carousel_4way_Z (n, el, m) { 
    var carousel = '#carousel-4way-nav-' + n 
    var carousel_content = '#carousel-4way-' + n 
     if (transitionState_Z == '-') 
      { 
      transitionState_Z = '+'; 
      } 
      else 
      { 
      transitionState_Z = '-'; 
      } 
     $(carousel_reset).hide(); 
     $(carousel).transition(
     {y: m + '=10',delay:200} 
     ); 
     }; 

$('#carousel-4way-nav-1').click(function(event){ 
    $(carousel_reset_nav).not(this).transition(
    {y:0}); 
    return carousel_4way_N(1, this, (transitionState == '-') ? '+' : '-'); 
    event.preventDefault(); 
}); 

$('#carousel-4way-nav-2').click(function(event){ 
    $(carousel_reset_nav).not(this).transition(
    {y:0}); 
    return carousel_4way_X(2, this, (transitionState == '-') ? '+' : '-'); 
    event.preventDefault(); 
}); 

$('#carousel-4way-nav-3').click(function(event){ 
    $(carousel_reset_nav).not(this).transition(
    {y:0}); 
    return carousel_4way_Y(3, this, (transitionState == '-') ? '+' : '-'); 
    event.preventDefault(); 
}); 

$('#carousel-4way-nav-4').click(function(event){ 
    $(carousel_reset_nav).not(this).transition(
    {y:0}); 
    return carousel_4way_Z(4, this, (transitionState == '-') ? '+' : '-'); 
    event.preventDefault(); 
}); 
+2

你應該張貼在http這個問題: //codereview.stackexchange.com。 – kojiro 2013-02-12 20:46:18

+0

通常,如果我有這樣的代碼,我會查找實質上相同的部分,並將它們放入函數中,以便代碼只存在一次。 – Leeish 2013-02-12 20:47:14

+0

'event.preventDefault()'是死代碼(它在'return'之後)。此外,還有很多未使用的變量 – Alexander 2013-02-12 20:52:42

回答

2

三元運算符使它有點更具可讀性:

transitionState_N = (transitionState_N == '-') ? '+' : '-'; 

你的函數是真的重複。尋找經常重複的代碼並編寫一個函數來替換它。

+0

Lulz,一秒鐘! – 2013-02-12 20:46:17

+0

哈,我用它在我的點擊上,但不知道它是什麼,因爲這是用另一個stackoverflow用戶幫助完成的。我在哪裏可以找到關於此的文檔? – dyb 2013-02-12 21:12:42

0

這是我會做的: 爲一個,你可以分配click()函數到所有元素。然後,您可以獲取每個元素的id並提取最後一個數字。

$('#carousel-4way-nav-1, #carousel-4way-nav-2,#carousel-4way-nav-3, #carousel-4way-nav-4').click(function(event){ 
    $(carousel_reset_nav).not(this).transition(
    {y:0}); 
    return carousel_4way(($(this).attr('id')).substring(this.length -1), this, (transitionState == '-') ? '+' : '-'); 
    event.preventDefault(); 
}); 

現在,這一切都將調用相同的功能:

function carousel_4way(n, el, m) { 
    var carousel = '#carousel-4way-nav-' + n 
    var carousel_content = '#carousel-4way-' + n 
     switch(n){ 
      case 1: 
       transitionState_N = (transitionState_N == '-') ? '+' : '-'; 
      case 2: 
       transitionState_X = ... 
      ... 
     } 
    $(carousel_reset).hide(); 
    $(carousel).transition(
     {y: m + '=10',delay:200} 
    ); 
}; 

你可能需要在一個語法的工作,但你得到的總體思路

+0

非常好。我一定會執行這個。但是,你能解釋一下如何獲得一個var的多個變量嗎?因爲在這段代碼中有transitionState_N - 我需要也有_X _Y _Z,這些都需要單獨跟蹤。 – dyb 2013-02-13 13:04:36

+0

對不起,只是注意到它不是自我解釋(編輯上面的代碼),你仍然會有所有四個變量,你將通過switch語句 – 2013-02-13 14:39:46

+0

遍歷它們,現在我明白了;]!謝謝!!! – dyb 2013-02-15 12:24:12