可重用的Jquery函数问题

时间:2012-08-17 01:54:34

标签: jquery jquery-ui function

我试图在看到重复之后优化我的代码。

以下是代码:

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');

这个区域:$ change:$ value - 是我在脚本中遇到麻烦的地方。我可以这样做吗?它们应该以字符串形式出现吗?

2 个答案:

答案 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);
        } 
    );
}

答案 1 :(得分:1)

我认为您正在尝试在文字中动态设置变量名称。在JavaScript中,您可以像objectname["variablename"] = value

那样执行此操作

实际上你可以做两件事:

  1. 您传递给animate()的第一个参数的文字可以被拉出
  2. $ container的jQuery评估可以拔出,完成一次,然后重复使用以加快速度。
  3. 虽然有些人可能会把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);
            } 
        );
    }