Используя этот аккуратный маленький плагин, http://ricostacruz.com/jquery.transit, очень похож на jQuery, встроенный в поддержку:
$('.some-element').css({propname1: 'value1', propname2: 'value2'});
Он работает так:
$('.some-element').transition({ x: '40px', y: '40px' });
и я могу использовать переменную для значений свойств, подобных этой (это работает):
var xVal = '40px',
yVal = '40px';
$('.some-element').transition({ x: xVal, y: yVal });
но мне нужно указать "тип" преобразования через переменную как это (это не работает):
<div class="some-element" data-ca-type1="x" data-ca-type2="y"></div>
var xVal = '40px',
yVal = '40px',
target = $('.some-element'),
type1 = target.data('caType1'),
type2 = target.data('caType2');
target.transition({ type1: xVal, type2: yVal });
Вы можете использовать []
для массивов и объектов для установки значений динамических свойств.
transitionData = {};
transitionData[type1] = xVal;
transitionData[type2] = yVal;
target.transition(transitionData);
Я предпочитаю встраивать такие вещи, которые можно сделать, создавая анонимную функцию:
target.transition(new function () {
this[type1] = xVal;
this[type2] = yVal;
}());
Хотя обычно я бы просто сохранил данные о переходе непосредственно в [data-*]
как JSON, воспользовавшись автоматическим [data-*]
jQuery с .data()
:
<div data-ca='{"x":"40px","y":"40px"}'></div>
JS:$('[data-ca]').each(function () {
$(this).transition($(this).data('ca'));
});
В объектном литерале имена свойств всегда являются литералами. Вам нужно использовать синтаксис массива для создания свойств с вычисленными именами свойств:
var x_val = '40px',
y_val = '40px',
target = $('.some-element'),
type1 = target.data('caType1'),
type2 = target.data('caType2'),
options = {};
options[type1] = x_val;
options[type2] = y_val;
target.transition(options);
Сначала вам нужно создать пустой объект (или объект с нединамическими ключами), а затем использовать квадратную нотацию для установки значений для динамических клавиш. Что-то вроде этого:
var xVal = '40px',
yVal = '40px',
target = $('.some-element'),
type1 = target.data(caType1),
type2 = target.data(caType2);
var options = {}
options[type1] = xVal;
options[type2] = yVal;
target.transition(options);
При создании объекта с использованием синтаксиса объектного литерала ключи всегда обрабатываются как строковые значения. {x: 0}
эквивалентно {"x": 0}
или {'x': 0}
, поэтому, даже если у вас есть переменная x
движок JavaScript не знает, что он должен использовать значение x
а не строка "x"
в качестве ключа.
var x-val
является синтаксической ошибкой, вы не можете иметь-
в имени переменной.class=".some-element"
должен бытьclass="some-element"
чтобы вы могли выбрать его с помощью.