2013-10-06 2 views
4

* = - действительный оператор присваивания javascript. Почему я не могу использовать его для анимации значений свойств? Код ниже не работает. Все, что я хочу сделать, это удвоить ширину и высоту.Множество значений CSS-значений с помощью jQuery с использованием * =

$('div.box').animate({ 
    'width' : '*=2', 
    'height' : '*=2', 
}, 'slow'); 

ответ

6

Это не работает просто потому, что никто не реализовал еще. Если вы хотите это сделать (и сделать мир jQuery немного лучше), просто take a look at the "Contribut to jQuery".page.

Чтобы решить вашу проблему сейчас: вы должны сделать расчет самостоятельно - что-то вроде следующего (не проверял, но вы должны получить идею):

Для одного элемента:

var element = $('#animate'); 
element .animate({ 
    'width' : element.width()*2, 
    'height' : element.height()*2, 
}, 'slow'); 

для нескольких элементов:

$('.animate').each(function(){ 
    var element = $(this); 
    element .animate({ 
    'width' : element.width()*2, 
    'height' : element.height()*2, 
    }, 'slow'); 
}); 
+0

@Italy: Хорошая точка, я изменил это. – oezi

+0

Это хороший ответ, за исключением политического заявления о том, что мир будет лучше, если вы бесполезно раздуваете библиотеку с ненужными функциональными возможностями и что в ответе полностью отсутствуют какие-либо капиталы ... – Sumurai8

+0

Вы правы в отношении капиталов (я in), но я должен не согласиться с «бесполезным вздутием» - jQuery реализует синтаксис для '+ =' и '- =' (http://api.jquery.com/animate/#animation-properties), поэтому добавление '* =' и '/ =' сделает его функциональность более последовательной (и большинство людей, которых я знаю как последовательность). – oezi

1

Фундаментально, потому что вы пытаетесь передать это выражение буквально, а не результатов выражения. jQuery не имеет никакой обработки в себе, чтобы понять разницу. И почему? jQuery не должен иметь в себе весь интерпретатор Javascript. Это серьезное раздувание.

Ближайший вы собираетесь получить это:

var divbox = $('div.box'); 
divbox.animate({ 
    width: (divbox.width() * 2) + 'px', 
    height: (divbox.height() * 2) + 'px' 
}); 
+2

нет необходимости ' 'px'' – Itay

+2

это не будет работать должным образом, если селектор возвращает несколько элементов с различными размерами. – oezi

+3

_ «И почему это должно быть?» _ - Ну, jQuery уже может обрабатывать анимации для ''+ ='' и '' - = '', поэтому не так уж и большой прыжок удивлять насчет' '* =''. .. – nnnnnn

Смежные вопросы