2016-04-17 8 views
3

Es gibt ein seltsames Verhalten in Chrome, wo die Animation letzten Frame weiterhin besteht, nachdem es keine Animation mehr geben sollte. Das funktioniert gut in Firefox.webkit - SVG-Animation Transformation bleibt bestehen, nachdem es nicht sollte

(Versuchen Sie, den Kreis schwebt dann schweben-out)

Demo playground

* { margin: 0; padding: 0; } 
 

 
@keyframes foo { 
 
    50% { transform: scale(2); } 
 
} 
 

 
svg { 
 
    width: 100%; 
 
    height: 400px; 
 
} 
 

 
circle:hover { animation: 2s foo infinite; } 
 

 
.point { 
 
    stroke-width: 1px; 
 
    stroke-opacity: .2; 
 
    fill-opacity: .5; 
 
    transition-property: opacity, fill; 
 
    fill: red; 
 
    stroke: red; 
 
} 
 

 
.point.stroke { 
 
    fill-opacity: .3; 
 
}
<svg> 
 
    <g transform="translate(65, 70)"> 
 
     <circle class="point stroke" r="25"/> 
 
     <circle class="point" r="25"/> 
 
    </g> 
 
</svg>

+0

Verstehe nicht ganz zu lösen. Die Animation ist eine unendliche Animation und so wiederholt sie die Animation und wenn ich den Mauszeiger verscheuche, geht sie in den Originalzustand über. Verwenden von Chrome 51.0.2704.4 dev-m. – Harry

+0

@Harry - welcher Browser? es tut das nicht für mich und meinen Kumpel hier getestet auf 3 Computern (Windows/Chrome). Es ist unendlich, solange Sie den Kreis schweben und den ursprünglichen Zustand anzeigen sollten, sobald Sie den Mauszeiger verlassen haben. – vsync

+0

Sticks für mich in Chrome 50 –

Antwort

0

transform:scale(1) als Standard-CSS für die .stroke setzen scheint diese

0

Ihr Problem zu beheben, geben dem Kreis eine Standard-Transformation, die es zurück gehen sollte wenn der Hover-Status beendet ist. Zum Beispiel:

.point { 
    ... 
    transform: scale(1); 
} 

* { margin: 0; padding: 0; } 
 

 
@keyframes foo { 
 
    50% { transform: scale(2); } 
 
} 
 

 
svg { 
 
    width: 100%; 
 
    height: 400px; 
 
} 
 

 
circle:hover { animation: 2s foo infinite; } 
 

 
.point { 
 
    stroke-width: 1px; 
 
    stroke-opacity: .2; 
 
    fill-opacity: .5; 
 
    fill: red; 
 
    stroke: red; 
 
    transform: scale(1); 
 
} 
 

 
.point.stroke { 
 
    fill-opacity: .3; 
 
}
<svg> 
 
    <g transform="translate(65, 70)"> 
 
     <circle class="point stroke" r="25"/> 
 
     <circle class="point" r="25"/> 
 
    </g> 
 
</svg>

+0

haha ​​ich habe das vor 5 minuets entdeckt :) so seltsam, dass es 'none' als Wert für' transform' nicht akzeptiert. Es akzeptiert dies für Nicht-SVG-Elemente .. Danke, dass Sie sich die Zeit genommen haben, mit diesem bizarren Bug zu helfen. – vsync

Verwandte Themen