мне нужно анимировать атрибут элемента SVG, который не имеет аналога CSS -
Как мне этого добиться?
Или я могу использовать альтернативу, например, если бы я мог анимировать
, используя CSS top
или аналогичный.
Есть опыт?
Спасибо, Ондра
. Обратите внимание, это не дубликат . Как я могу анимировать значение атрибута (не свойство стиля) с помощью jQuery? ? поскольку речь идет о HTML.
См. Также jQuery под SVG
В конце я выполнил ручную анимацию, как в перетаскиваемом SVG с использованием JQuery и Jquery-svg .
Решение jQuery все еще приветствуется.
В любом случае, это привело меня к другой проблеме - несоответствию единиц. evt.clientX
в пикселях, но circle.cx.baseVal.value
в некоторых относительных единицах. Поэтому, когда я делаю
onmousedown="
this.moving=true;
this.pt0 = {x: evt.clientX, y: evt.clientY};
this.origPos = {x: this.cx.baseVal.value, y: this.cy.baseVal.value};
"
onmouseup="this.moving=false;"
onmouseout="this.moving=false;"
onmouseover="this.moving=false;"
onmousemove="if( this.moving ){
this.cx.baseVal.value = this.origPos.x + (evt.clientX - this.pt0.x);
}
и получаю
В 3 раза больше «собственного» размера SVG, тогда круг перемещается в 3 раза быстрее, чем указатель.
Я даже пытался
this.origPos = {
x: this.cx.baseVal.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX),
y: this.cy.baseVal.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX)
};
...
this.cx.baseVal.newValueSpecifiedUnits(
SVGLength.SVG_LENGTHTYPE_PX, this.origPos.x + (evt.clientX - this.pt0.x) );
Но convertToSpecifiedUnits ()
возвращает undefined
, что, по-видимому, является недостатком в реализации http: // www. w3.org/TR/SVG/types.html#InterfaceSVGLength.
Сам jQuery может не соответствовать вашим требованиям для простого перетаскивания svg (в настоящее время), поэтому вам придется либо заставить его делать то, что вы хотите, либо использовать другую структуру js. Я бы порекомендовал, например, взглянуть на рафаэль .
Значения из event.clientX / Y не в пользовательских единицах, их необходимо преобразовать. См., Например, http://www.codedread.com/code.php#dragsvg для примера перетаскивания объектов svg.