Почему следующее работает?
<something>.stop().animate(
{ 'top' : 10 }, 10
);
Принимая во внимание, что это не работает:
var thetop = 'top';
<something>.stop().animate(
{ thetop : 10 }, 10
);
Сделать это еще более ясным: В данный момент я не могу передать свойство CSS анимационной функции как переменная.
{thetop: 10}
- допустимый литерал объекта. Код создаст объект со свойством с именем thetop
, имеющим значение 10. Оба следующих элемента одинаковы:
obj = { thetop : 10 };
obj = { "thetop" : 10 };
В ES5 и ранее вы не можете использовать переменную в качестве имени свойства внутри литерал объекта. Единственный вариант - сделать следующее:
var thetop = "top";
// create the object literal
var aniArgs = {};
// Assign the variable property name with a value of 10
aniArgs[thetop] = 10;
// Pass the resulting object to the animate method
<something>.stop().animate(
aniArgs, 10
);
ES6 определяет ComputedPropertyName как часть грамматики для объектных литералов, что позволяет писать такой код:
var thetop = "top",
obj = { [thetop]: 10 };
console.log(obj.top); // -> 10
Вы можете использовать это новый синтаксис в последних версиях каждого основного браузера.