2012-08-17 17 views
0

我正在嘗試優化我的代碼後看到一些重複。可重複使用的jquery函數問題

下面是代碼:

function show($div, $change, $value){ 
    var $container = "#" + $div; 
    var $class = $div + "-" + "hidden"; 

    //alert($class + $container + $change + $value); 

    $($container).addClass($class); 
    $($container).animate({ 
     $change: $value 
    }, 1000, function(){ 
      $($container).removeClass($class); 
     } 
    ); 
} 

show('header', 'top', '0'); 
show('nav', 'left', '0'); 
show('wrapper', 'opacity', '0'); 

此區域:$變化:$值 - 在這裏我有腳本的麻煩。我可以這樣做嗎?他們是否應該像串一樣進來?

回答

2
function show($div, $change, $value){ 
    var $container = "#" + $div; 
    var $class = $div + "-" + "hidden"; 

    //alert($class + $container + $change + $value); 

    $($container).addClass($class); 

    var animation = {}; // create another object 
    animation[$change] = $value; // and set its property 

    $($container).animate(animation, 1000, function(){ 
      $($container).removeClass($class); 
     } 
    ); 
} 
+0

geez我只注意到$是多麼令人困惑的$啓動變量是。剛剛來自PHP的土地,所以有點卡在那裏...我會嘗試。你能解釋一下動畫對象以及它如何設置屬性。我不太明白。 – EZDC 2012-08-17 02:00:07

+0

@ user980988:它只是一個普通的javascript對象'var foo = {};'<---你知道這意味着什麼嗎? – zerkms 2012-08-17 02:08:31

1

我想你想動態設置變量名稱的文字。在JavaScript中,你可以做到這一點,像這樣objectname["variablename"] = value

實際上有兩個事情可以做,在這裏:

  1. 字面上要傳遞給動畫(第一個參數)可以拉出
  2. $容器的jQuery評估可以被拉出,完成一次,然後重用來加快速度。

儘管有些人可能會提到2過早優化的例子,但我認爲它使您的代碼更具可讀性。

function show($div, $change, $value){ 

    var $container = "#" + $div; 
    var $class = $div + "-" + "hidden"; 

    //alert($class + $container + $change + $value); 

    var animation = {}; //declare a literal 
    animation[$change] = $value; //create a name-value pair based on args 

    var jqContainer = $($container); //extract multiple jQuery evaluations 
    jqContainer.addClass($class); 
    jqContainer.animate(animation, 1000, function(){ 
      jqContainer.removeClass($class); 
     } 
    ); 
}