Snap SVG:进出路径的动画

Snap SVG: Animating to and from a path

我已经写了一些代码,我认为它会动画到某个路径,然后通过回调恢复到原始路径。它动画到路径但停在那里,我做错了什么?

示例:jsfiddle

var speed = 250;

[].slice.call( document.querySelectorAll( '.arrow_button' ) ).forEach( function( el ) {

    var s = Snap( el.querySelector( 'svg' ) ),
        path = s.select( 'path' ),
        route = el.getAttribute( 'data-path-route' ),
        callback = function () {
            path.animate( { 'path' : path }, speed, mina.easeout );
        };

    el.addEventListener( 'click', function() {
        path.animate( { 'path' : route }, speed, mina.easein, callback() );
    } );

} );

主要有2个问题。

首先是您发出的是 callback() 而不是 callback。 您不想立即 运行 函数(除非它 returns 一个函数),您希望稍后在需要回调时 运行 它,因此请删除括号。

第二个是你需要存储路径 d 属性 以动画返回,这里称为 origPath。

所以代码看起来像...

var s = Snap( el.querySelector( 'svg' ) ),
    path = s.select( 'path' ),
    origPath = path.attr('d'),
    route = el.getAttribute( 'data-path-route' ),
    callback = function () {
            path.animate( { 'path' : origPath }, speed, mina.easeout     );
    };

    el.addEventListener( 'click', function() {
        path.animate( { 'path' : route }, speed, mina.easein, callback );
    } );

jsfiddle