jQuery, SVG: Как анимировать значение атрибута (не свойство стиля)?

мне нужно анимировать атрибут элемента 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.

8
задан Community 23 May 2017 в 11:53
поделиться

1 ответ

Сам jQuery может не соответствовать вашим требованиям для простого перетаскивания svg (в настоящее время), поэтому вам придется либо заставить его делать то, что вы хотите, либо использовать другую структуру js. Я бы порекомендовал, например, взглянуть на рафаэль .

Значения из event.clientX / Y не в пользовательских единицах, их необходимо преобразовать. См., Например, http://www.codedread.com/code.php#dragsvg для примера перетаскивания объектов svg.

2
ответ дан 6 December 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: