2016-08-26 6 views
0

私はこのような単純なSVGファイルを持っている:Snap.svg:縮尺変更されたグループ滞在を維持する方法は?

<svg id="mySVG" /*other attributes"*/>  
    <group id="mixUps"> 
    <ellipse /*ellipse atributtes blabla*/ /> 
    <path /*this is a star-shaped path*/ /> 
    <rect /*rect attributes*/ /> 
    /* 
    Basically this is just a simple SVG group containing an ellipse, a path and a rectangle 
    */ 
    </g> 
</svg> 

をしてから、スクリプトファイルには、私はこのグループが、それはmouseoverイベントで元のサイズだし、それがマウスアウトで元のサイズだに戻す倍スケーリングすることにしたいです。

<script> 
var mySvg = Snap("#mySvg"); 
var mixUps = mySvg.select("#mixUps"); 

function mixCursor(evt){ 
    if(evt.type==="mouseover"){ 
     mixUps.animate({transform:"s2"}, 250); 
    }else if(evt.type==="mouseout"){ 
     mixUps.animate({transform:"s1"}, 250); 
    } 
} 

mixUps.mouseover(mixCursor); 
mixUps.mouseout(mixCursor); 
</script> 

は、しかし、最初のmouseoverイベントで、何とか翻訳グループは、左上隅に(移動)、およびそこにとどまり、これはなぜですか?このグループを拡大縮小すると、その位置にとどまるようにする方法は?

ファイルhereを貼り付けました。

答えて

2

はあなたがTHEN新しい変換元の変換したいので、それ以外の場合は、上書きされてしまいます、初期にはそれが所定の位置にあります変換含める必要があるので、代わりに

mixUps.animate({transform: 's2'}, 250); 

使用の

mixUps.animate({transform: this.transform() + 's2'}, 250); 

jsfiddle

元の変換を保存しておけば後で元の変換に戻すことができます。

jsfiddle

mixUps.data('originalTransform', mixUps.transform()) 
... 
mixUps.animate({transform: this.data('originalTransform') + 's2'}, 250); 
... 
mixUps.animate({transform: this.data('originalTransform') }, 250); 
+0

素敵@Ianおかげで、私は補正のほんの少しを追加したい:最新jsfiddleに、あなたはこのラインを持っています。var BB = mixUps.getBBox();イベントハンドラ関数で私たちがその行を持っていれば、グループは最初のmouseoverイベント(私はOperaとFirefoxのオンライン版でテストした)でちょっと変わった動作をします。その行を削除すれば、すべて正常に動作します。 – Rickard

+0

私はそれらが必要ではなかったので、古いコードのちょっとしたものを更新しました。私はそれがなぜ影響を与えるのかはわかりません(それはChromeではありませんでした)。 – Ian

関連する問題