Я нашел способ использовать вызов jQuery, не сталкиваясь с проблемой, что атрибут сбрасывается до 0, когда анимация начинается, как некоторые другие ответы здесь
Допустим, мы хотим анимировать атрибут width
и height
элемента тега img с идентификатором image
. Чтобы оживить его от его текущего значения до 300, мы могли бы сделать это:
var animationDiv= $("<div></div>"); //we don't add this div to the DOM
var image= $("img#image");
//could use any property besides "top" and "left", but the value must be valid, that means concatenating a "px" to numerical attributes if they don't have it already (and removing them in the step callback if they do)
animationDiv.css("left", image.attr("width"));
animationDiv.css("top", image.attr("height"));
animationDiv.animate(
{
left: 300,
top: 300
},
{
duration: 2500,
step: function(value, properties) {
if (properties.prop == "left")
image.attr("width", value + "px")
else
image.attr("height", value + "px")
}
}
)
В этом подходе мы используем div, который не находится внутри DOM, и анимируем значения в нем, затем мы используем значения div CSS для анимации нашего элемента. Не очень красиво, но выполняет свою работу, если вам нужно остановить анимацию, вы можете вызвать .stop()
на animationDiv.
jsfiddle