Javascript raphael viewbox动画缩放

Javascript raphael viewbox动画缩放,javascript,svg,raphael,Javascript,Svg,Raphael,我正在用javascript和Raphael库构建一种javascript映射。 我可以在单击时缩放对象,但我希望它设置动画(如缓慢潜入等)。有没有办法做到这一点而不必重新发明轮子 Raphael动画通过设置元素属性的动画来工作。当您调用element.animate时,您将提供最终的对象参数、到达该参数所需的时间,如果您不希望它是线性的,还可能提供一个缓和函数 例如,为了放大/缩小一个圆,你可以考虑这个例子: 设置圆的变换属性的动画。若要缩放贴图,应将所有元素放置在一个组中,并设置组的变换特性

我正在用javascript和Raphael库构建一种javascript映射。
我可以在单击时缩放对象,但我希望它设置动画(如缓慢潜入等)。有没有办法做到这一点而不必重新发明轮子

Raphael动画通过设置元素属性的动画来工作。当您调用element.animate时,您将提供最终的对象参数、到达该参数所需的时间,如果您不希望它是线性的,还可能提供一个缓和函数

例如,为了放大/缩小一个圆,你可以考虑这个例子:

设置圆的变换属性的动画。若要缩放贴图,应将所有元素放置在一个组中,并设置组的变换特性的动画,同时考虑最终的缩放和平移


有关transform属性的更多信息,请参见。

没有理由不能为svg对象的viewbox设置动画——Raphael根本不提供这种开箱即用的功能。然而,创建插件相当简单。例如:

Raphael.fn.animateViewBox = function animateViewBox( x, y, w, h, duration, easing_function, callback )
{
    var cx = this._viewBox ? this._viewBox[0] : 0,
        dx = x - cx,
        cy = this._viewBox ? this._viewBox[1] : 0,
        dy = y - cy,
        cw = this._viewBox ? this._viewBox[2] : this.width,
        dw = w - cw,
        ch = this._viewBox ? this._viewBox[3] : this.height,
        dh = h - ch,
        self = this;;
    easing_function = easing_function || "linear";

    var interval = 25;
    var steps = duration / interval;
    var current_step = 0;
    var easing_formula = Raphael.easing_formulas[easing_function];

    var intervalID = setInterval( function()
        {
            var ratio = current_step / steps;
            self.setViewBox( cx + dx * easing_formula( ratio ),
                             cy + dy * easing_formula( ratio ),
                             cw + dw * easing_formula( ratio ),
                             ch + dh * easing_formula( ratio ), false );
            if ( current_step++ >= steps )
            {
                clearInterval( intervalID );
                callback && callback();
            }
        }, interval );
}
安装此插件后实例化的任何论文都可以使用animateViewBox,使用的方法与Raphael内置的animate方法完全相同。例如

var paper = Raphael( 0, 0, 640, 480 );
paper.animateViewBox( 100, 100, 320, 240, 5000, '<>', function()
    {
        alert("View box updated!  What's next?" );
    } );
var-paper=Raphael(0,060480);
paper.animateViewBox(1001003202405000',函数()
{
警报(“视图框已更新!下一步是什么?”);
} );

演示已开始。

请看类似的问题:我的意思是“动画化(…)”,因此我可以做的不仅仅是平滑的缩放。我认为您应该再次返回并查看Joan的链接--@patrics answer(如果您问我的话,它同样值得接受!)非常符合您的要求。添加缓和功能也会非常简单…太棒了!但现在我遇到了一个新问题。我很高兴看到新问题很容易解决!这只适用于一个对象,对于多个对象,它们只会增长,但不会移动。是的,它只适用于一个对象,但是你可以将所有的东西组合成一个对象
var paper = Raphael( 0, 0, 640, 480 );
paper.animateViewBox( 100, 100, 320, 240, 5000, '<>', function()
    {
        alert("View box updated!  What's next?" );
    } );