为什么下面的工作?

<something>.stop().animate(
    { 'top' : 10 }, 10
);

然而这是行不通的:

var thetop = 'top';
<something>.stop().animate(
    { thetop : 10 }, 10
);

更清楚地说:目前我还不能将CSS属性作为变量传递给动画函数。


当前回答

你可以这样做:

var thetop = 'top';
<something>.stop().animate(
    new function() {this[thetop] = 10;}, 10
);

其他回答

我已经使用下面的方法来添加一个具有“动态”名称的属性到对象:

var key = 'top';
$('#myElement').animate(
   (function(o) { o[key]=10; return o;})({left: 20, width: 100}),
   10
);

Key是新属性的名称。

传递给animate的属性对象将是{left: 20, width: 100, top: 10}

这只是使用了其他答案所推荐的必需的[]符号,但是代码行数更少!

2020年更新/ example.com ...

一个更复杂的例子,使用括号和字面量…您可能需要做一些事情,例如使用vue/axios。把文字用括号括起来,所以

['…]']

{
    [`filter[${query.key}]`]: query.value,  // 'filter[foo]' : 'bar'
}

您可以为ES5执行以下操作:

var theTop = 'top'
<something>.stop().animate(
  JSON.parse('{"' + theTop + '":' + JSON.stringify(10) + '}'), 10
)

或提取为一个函数:

function newObj (key, value) {
  return JSON.parse('{"' + key + '":' + JSON.stringify(value) + '}')
}

var theTop = 'top'
<something>.stop().animate(
  newObj(theTop, 10), 10
)

在变量周围加上方括号对我来说很好。试试这个

var thetop = 'top';
<something>.stop().animate(
    { [thetop] : 10 }, 10
);

使用ECMAScript 2015,你现在可以直接在对象声明中使用括号表示:

var obj = {
  [key]: value
}

其中key可以是返回值的任何类型的表达式(例如变量)。

你的代码看起来是这样的:

<something>.stop().animate({
  [thetop]: 10
}, 10)

在被用作键之前,top将被计算。