Animation SVG动画未按预期设置属性

Animation SVG动画未按预期设置属性,animation,svg,snap.svg,Animation,Svg,Snap.svg,我正在尝试为SVG元素视口的更改设置动画。单击SVG中的特定椭圆时,视口将发生更改,以便在椭圆上放大。根据我对W3C动画规范的解释,当使用fill=“freeze”时,to属性中的值将保持不变。但是,当我使用console.log(“动画后:+canvas.getAttribute(“viewBox”))视图框与之前相同(动画确实放大)。有关额外信息,单击椭圆时会添加。这是如何将动画添加到的代码 var canvassnap=Snap(画布); var动画=“”; var parse=Snap.

我正在尝试为SVG元素视口的更改设置动画。单击SVG中的特定椭圆时,视口将发生更改,以便在椭圆上放大。根据我对W3C动画规范的解释,当使用
fill=“freeze”
时,
to
属性中的值将保持不变。但是,当我使用
console.log(“动画后:+canvas.getAttribute(“viewBox”))视图框与之前相同(动画确实放大)。有关额外信息,单击椭圆时会添加
。这是如何将动画添加到
的代码

var canvassnap=Snap(画布);
var动画=“”;
var parse=Snap.parse(动画);
canvassnap.add(解析);

我没有正确理解规范吗?

SVG对每个属性都有两个值,一个是基值,您可以使用getAttribute或通过element.viewBox.baseVal获得,另一个是动画值,您可以通过element.viewBox.animVal获得

如果元素不是SMIL动画的主题,则animVal==baseVal

SMIL动画只影响animVal,用于渲染的是animVal

var canvassnap=Snap(canvas);
var animation = '<animate id="smoothpan" attributeName="viewBox" begin="0s" dur="'+duration+'ms" from="0 0 1280 720" to="'+minX+' '+minY+' '+(maxX-minX)+' '+(maxY-minY)+'" fill="freeze" />';
var parse = Snap.parse(animation);
canvassnap.add(parse);