2017-10-11 166 views
0

我是新来的,请耐心等待。 我有参数的简单功能,我使用jQuery:Javascript以不同参数多次调用相同功能

function AnimateValues(a, b, c, d){ 
    return $(a).stop().animate({b : c}, d); 
} 

现在,我想调用它需要的,例如当:

AnimateValues('#div1', 'opacity', 1, 500); 
AnimateValues('#div2', 'opacity', 0, 500); 
AnimateValues('#div3', 'top', 20, 500); 
... 

但似乎只有最后一个是执行。 帮助将不胜感激。

+0

您是否正在循环调用函数,或者如上所示实际连续三次调用函数 – Mobius

+0

您可以发布您调用函数的HTML代码吗? –

+4

'只有最后一个被执行'没有意义,因为你的代码不应该像你期望的那样工作,因为'{b:c}'不会使用参数'b'的值作为键为对象,但名称为'b'本身。所以它永远不会动画'top'或'opactiy'。 –

回答

0

你需要在[]中包装b参数,否则它只是字符串键。

function AnimateValues(a, b, c, d){ 
 
    return $(a).stop().animate({[b] : c}, d); 
 
} 
 

 
AnimateValues('#div1', 'opacity', 1, 500); 
 
AnimateValues('#div2', 'opacity', 0, 500); 
 
AnimateValues('#div3', 'top', 20, 500);
div { 
 
    position: relative; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="div1">Div1</div> 
 
<div id="div2">Div2</div> 
 
<div id="div3">Div3</div>

+0

它的工作原理,thx的帮助。 +1为你,但我是未成年人,我不能投票:) – pitinca

+0

不客气。 –

+0

另一次,请使用通过在JavaScript中使用金徽章授予的dup-to *关闭*重复问题,而不是提供答案给他们。 – Makyen

0

这是不是一个真正的回答你的问题,因为,only the last one is executed没有意义。

因为{b : c}不会使用参数b的值作为对象的键值,而是使用名称b本身,所以您的代码不适用于您所期望的任何方式。因此,它永远不会动画topopactiy

如果你可以使用ES6功能,那么你可以写[b]代替b这将使用值OB b关键。

function AnimateValues(a, b, c, d){ 
    return $(a).stop().animate({[b] : c}, d); 
} 

或者

function AnimateValues(a, b, c, d){ 
    var params = {}; 
    params[b] = c; 
    return $(a).stop().animate(params, d); 
} 

但正如我所说,这不能解释你的only the last one is executed