2016-04-29 7 views
0

Ich bin ziemlich neu bei snap.svg. Ich habe ein Balkendiagramm mit rechteckigen Elementen, die vertikal wachsen. Ich habe Probleme, sie zu animieren, von 0 Höhe zu etwas wie 200 zu gehen. Sie alle animieren von oben nach unten. Ich brauche sie von Grund auf.Animiere die Höhe eines Rechtecks, um nach oben zu gehen, nicht nach unten

Das ist mein js ..

var s = Snap(".performance_chart"); 

Snap.load("images/performance.svg", function(f) { 

    bar1 = f.select(".bar1").animate({height:202.43}, 1000, mina.linear); 

    s.append(f); 

}); 

Und das sind einige Beispiele für die <rect> Bars auf der Karte. Der erste <rect> ist auf height=0 so kann ich es von 0.

<rect class="bar bar1" x="108.3" y="246.08" width="55.21" height="0"/> 
<rect class="bar bar2" x="252.89" y="251.52" width="55.21" height="77.67"/> 
<rect class="bar bar3" x="308.09" y="112.25" width="55.21" height="216.93"/> 
<rect class="bar bar4" x="395.5" y="237.85" width="55.21" height="91.34"/> 

Start animieren Ich habe Dinge gelesen, um die y-Achse mit einem transform Attribut zu kippen, aber nichts, was ich getan habe, scheint die Art und Weise zu arbeiten, Ich brauche es.

+0

belebte die y zur gleichen Zeit wie die Höhe. –

+0

Ich bin nicht vertraut mit der Bibliothek snap.svg, aber in "reguläre Svg" definieren die 'x' und' y' Attribute die _top linken Ecke des Rechtecks. Wenn Sie also die Höhe verringern möchten, müssen Sie y um denselben Wert erhöhen. – user3297291

Antwort

1

Die x und y Attribute repräsentieren die oben links Ecke Ihres Rechtecks. Verringert die Spitzenposition durch den gleichen Wert wie die Höhe zunimmt:

bar1 = f.select(".bar1") 
    .animate({ 
    height:202.43, 
    y: 246.08 - 202.43 
    }, 1000, mina.linear); 

height + y für den Stab bleiben, um gleich muss ihre Position zu halten. Hier ein Beispiel:

<div style="display: inline-block; background: #eee;"> 
 
    <h2>Start</h2> 
 
    <svg height="50" width="50" viewBox="0 0 100 100"> 
 
    <rect width="10" height="30" x="45" y="70"></rect> 
 
    </svg> 
 
</div> 
 

 
<div style="display: inline-block"> 
 
    <h2>End</h2> 
 
    <svg height="50" width="50" viewBox="0 0 100 100"> 
 
    <rect width="10" height="70" x="45" y="30"></rect> 
 
    </svg> 
 
</div>

+0

Ok, das ist irgendwie nah dran. Sie wachsen alle von unten nach oben, aber die Unterseite der Bar ist nicht dort, wo sie sein muss. Jeder Balken ist von der Unterseite gleich der Höhe. Zum Beispiel, wenn meine Bar zu 100 hoch animiert, ist es auch 100 oben, wo es sich befinden sollte. – Dustin

+0

Ich denke, ich habe es jetzt herausgefunden. Die Animation von y sollte 329,19 sein - die Höhe. 329.19 ist die Position des unteren Teils des Diagramms. – Dustin

+0

Die Höhe + y vorher muss gleich der Höhe + y nachher sein. Ich habe auch ein Beispiel in die Antwort aufgenommen. Freut mich zu hören, dass du es herausgefunden hast. – user3297291