Проблема передачи строкового значения в анимированную функцию Jquery - PullRequest
2 голосов
/ 05 июня 2011

Эй, мне интересно, в чем разница между этими двумя кодами? Первый работает, а второй нет?

First >>
for (i=0; i<$sequencingArray.length; i++){
...
$($sequencingArray[i]).delay(i*100).animate({'margin-left':$masterWidth});
...
}

Second >>
$propToAnimate = 'margin-left';
for (i=0; i<$sequencingArray.length; i++){
...
$($sequencingArray[i]).delay(i*100).animate({$propToAnimate:$masterWidth});
...
}

Ответы [ 2 ]

6 голосов
/ 05 июня 2011

Это рабочее решение ...

$propToAnimate = {'margin-left': $masterWidth};
$($sequencingArray[i]).delay(i*100).animate($propToAnimate);

«Нельзя использовать переменную в качестве имени свойства внутри литерала объекта.» отсюда

0 голосов
/ 05 июня 2011

Когда вы используете {'margin-left':$masterWidth} или {$propToAnimate:$masterWidth}, вы создаете объект.Поэтому нам нужно знать, что мы делаем, когда создаем объект с использованием синтаксиса Object Initializer ({k0:v0, k1:v1}).

Наиболее важно для вашего случаяоба делают одно и то же - создают объект с одним свойством prop.Не имеет значения, если вы уже сказали var prop = 'different' в другом месте, prop просто обрабатывается как буквальное имя при использовании в {prop:20} и не оценивается.версия вашего кода работает, использовать синтаксис a['prop'] для объектов.Так что-то вроде:

var prop = 'margin-left';
var obj = {}; // Create a new object with no propeties
obj[prop] = masterWidth; // Add a new property to obj (using the value of the variable prop as the name of the new property)

Тогда у вас будет obj['margin-left'] == masterWidth.И вы можете использовать этот объект в функции анимации ... animate(obj);

Надеюсь, я не слишком запутался!

...