jQuery,SVG:如何设置属性值(不是样式属性)的动画?

前端之家收集整理的这篇文章主要介绍了jQuery,SVG:如何设置属性值(不是样式属性)的动画?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要为SVG元素的属性设置动画,该元素没有CSS对应物 –
< circle cx =“...”/>我怎样才能做到这一点?

或者,我可以使用替代方案,例如如果我可以动画< g />使用CSS的顶级或类似.

有经验吗?

谢谢,Ondra

请注意,这不是How can I animate an attribute value (not style property) with jQuery?的重复,因为那是关于HTML的.

另见jQuery under SVG

更新

最后,我做了一个手动动画,如SVG draggable using JQuery and 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);
 }

并且< embed>比SVG的“自有”尺寸大3倍,然后圆圈比指针移动快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框架.我建议你看一下 raphaël.

event.clientX / Y中的值不是用户单位,需要转换它们.有关拖动svg对象的示例,请参见例如http://www.codedread.com/code.php#dragsvg.

猜你在找的jQuery相关文章