Mozilla中的动画无法正常工作 [英] Animation in mozilla doesn't work properly
问题描述
我没有询问变形起源。我问为什么动画在mozilla上不起作用
我坚持在Mozilla上做一些动画svg。我在 Chrome 中尝试过的动画效果非常好,但当我在mozilla上测试时效果不佳。
我不能共享svg,因为这里共享的代码行数有限,所以我不能共享svg。请从演示中查看。
这是 DEMO
CSS
.trans-animate {
-webkit-transform:translate(-24%,9%);
transform:translate(-24%,9%);
-webkit-animation:wavedash 6s缓解无限;
动画:wavedash 6s缓解无限;
}
@ -webkit-keyframes wavedash {
0%{
-webkit-transform:translate(-28%,9%);
transform:translate(-28%,9%);
}
50%{
-webkit-transform:translate(-42%,9%);
transform:translate(-42%,9%);
}
100%{
-webkit-transform:translate(-20%,9%);
transform:translate(-20%,9%);
}
}
.trans-animate2 {
-webkit-transform:translate(-38%,2%);
transform:translate(-38%,2%);
-webkit-animation:wavedash2 10s缓解无限;
动画:wavedash2 10s缓解无限;
}
@ -webkit-keyframes wavedash2 {
0%{
-webkit-transform:translate(-28%,2%);
transform:translate(-28%,2%);
}
50%{
-webkit-transform:translate(-5%,2%);
transform:translate(-5%,2%);
}
100%{
-webkit-transform:translate(8%,2%);
transform:translate(8%,2%);
.dolphin-loca {
/ * transform:translate(-166%,69%); * /
-webkit-动画:海豚8s缓和无限;
动画:海豚8s缓解无限;
}
@ -webkit-keyframes dolphin {
0%{
-webkit-transform:translate(-172%,40%);
transform:translate(-172%,40%);
}
50%{
-webkit-transform:translate(-172%,-36%);
transform:translate(-172%,-36%);
}
65%{
-webkit-transform:translate(-172%,-36%);
transform:translate(-172%,-36%);
}
80%{
-webkit-transform:translate(-172%,-36%);
transform:translate(-172%,-36%);
}
100%{
-webkit-transform:translate(-172%,40%);
transform:translate(-172%,40%);
}
}
.text-dolphin {
-webkit-animation:dolphin-button 8s free-out infinite;
动画:海豚按钮8s缓出无限;
}
@ -webkit-keyframes dolphin-button {
0%{
-webkit-transform:translate(-172%,40%);
transform:translate(-172%,40%);
opacity:0;
}
50%{
-webkit-transform:translate(-123%, - 60%);
transform:translate(-123%, - 60%);
opacity:0;
}
65%{
-webkit-transform:translate(-123%,-60%);
transform:translate(-123%, - 60%);
opacity:1;
}
78%{
-webkit-transform:translate(-123%,-60%);
transform:translate(-123%,-60%);
opacity:1;
}
85%{
-webkit-transform:translate(-162%,-60%);
transform:translate(-162%,-60%);
opacity:0;
}
100%{
-webkit-transform:translate(-172%,40%);
transform:translate(-172%,40%);
opacity:0;
}
}
.closeEye {
-webkit-animation:eye 1.5s cubic-bezier(.17,.67,.48,.84)无限;
animation:eye 1.5s cubic-bezier(.17,.67,.48,.84)无限;
}
@ -webkit-keyframes eye {
0%{
-webkit-transform:translateY(0px)scaleY(1);
transform:translateY(0px)scaleY(1);
}
10%{
-webkit-transform:translateY(265px)scaleY(0.05);
transform:translateY(265px)scaleY(0.05);
}
15%{
-webkit-transform:translateY(170px)scaleY(0.4);
transform:translateY(170px)scaleY(0.4);
}
25%{
-webkit-transform:translateY(85px)scaleY(0.7);
transform:translateY(85px)scaleY(0.7);
}
30%{
-webkit-transform:translateY(85px)scaleY(0.7);
transform:translateY(85px)scaleY(0.7);
}
35%{
-webkit-transform:translateY(170px)scaleY(0.4);
transform:translateY(170px)scaleY(0.4);
}
40%{
-webkit-transform:translateY(255px)scaleY(0.1);
transform:translateY(255px)scaleY(0.1);
}
100%{
-webkit-transform:translateY(0px)scaleY(1);
transform:translateY(0px)scaleY(1);
}
}
是您的动画无法在Firefox上运行的两个原因。
-
主要原因是您有
@ -webkit-keyframes
规则,这些规则可以在Chrome中使用,但是没有@keyframes
规则,这是Firefox需要的。第二个原因与transform-origin
之间的差异有关。 Firefox和Chrome。 The primary reason is that you have
@-webkit-keyframes
rules, which work in Chrome, but you have no@keyframes
rules, which Firefox needs. You need to include both variants.The second reason is related to the
transform-origin
difference between Firefox and Chrome.
SVG文件中的百分比与视口大小(SVG的大小)有关。这就是Firefox所做的。因此, translate(-172%,40%)
会让海豚的方式离开SVG的边缘。
Chrome正在计算相对于海豚尺寸的百分比。这是不正确的行为。
如果您希望您的动画在两个浏览器中都能正常工作,则需要在中使用绝对像素值,转换
规则(例如 100px
)。
.dolphin-loca {-webkit-animation:dolphin 8s ease-out infinite;动画:dolphin 8s缓解无限;} @ - webkit-keyframes dolphin {0%{transform:translate(-300px,100px); } 50%{transform:translate(-300px,-100px); } 65%{transform:translate(-300px,-100px); } 80%{transform:translate(-300px,-100px); } 100%{transform:translate(-300px,100px); }} @ keyframes dolphin {0%{transform:translate(-300px,100px); } 50%{transform:translate(-300px,-100px); } 65%{transform:translate(-300px,-100px); } 80%{transform:translate(-300px,-100px); } 100%{transform:translate(-300px,100px); }
< svg x =0pxy = 0pxwidth =1600pxheight =450.39pxviewBox =0 0 1600 450.39> < g id =Layer_7class =dolphin-loca> < path id =XMLID_29_fill =#0083B7d =M805.419,255.439c0-44.307-28.647-75.028-71.876-79.144 c1.21-4.736,2.37-7.935-2.083-7.935c-3.665,0- 8.222,3.306-11.537,7.72c-44.529,2.807-74.611,34.122-74.611,79.359 c0,12.658,2.772,23.054,7.724,31.504c-4.966,9.543-5.992,22.504-1.546,28.282c5.617,7.3, 8.705-3.645,17.415-11.529 c15.167,10.519,32.232,14.748,56.46,14.748c2.102,0,4.185-0.033,6.248-0.098c-0.163,6.328-2.354,13.155-7.468,20.396 c-3.842- 5.743-20.614-27.065-47.537-8.519c-1.583,1.09,17.322,28.912,44.758,12.288c-0.328,0.717-0.755,2.152,1.434,1.581c-4.001,6.03-9.983,19.613,5.826,32.179c1。 107,0.88,16.966-18.865-2.171-34.437c5.641-3.797,16.995-12.42,26.062-25.462 c13.228-2.205,20.431-6.272,29.324-12.662c8.699,7.883,11.786,18.811,17.4,11.515 c4.446-5.778,3.42-18.739-1.546-28.282 C802.648,278.493,805.419,268.097,805.419,255.439z M725.366,314.436c-44.229,0-74.917-14.978-74.917-59.207 s30.688-74.401,74.917-74.401 c44.229,0,74.917,30.172,74.917,74.401S769.595,314.436,725.366,314.436z/> < / svg>
I didn't asked about transform origin. I asked why the animation doesn't work on mozilla
I'm stuck doing some animation svg on Mozilla. What I have tried in Chrome the animation worked perfectly fine, but when I tested on mozilla it's doesn't work well. I have put the vendor prefix, still the animation doesn't work properly.
I can't share the svg because the line of code to share here is limited, So please check it out from the demo.
Here is the DEMO
CSS
.trans-animate {
-webkit-transform: translate(-24%,9%);
transform: translate(-24%,9%);
-webkit-animation: wavedash 6s ease-out infinite;
animation: wavedash 6s ease-out infinite;
}
@-webkit-keyframes wavedash {
0% {
-webkit-transform: translate(-28%,9%);
transform: translate(-28%,9%);
}
50% {
-webkit-transform: translate(-42%,9%);
transform: translate(-42%,9%);
}
100% {
-webkit-transform: translate(-20%,9%);
transform: translate(-20%,9%);
}
}
.trans-animate2 {
-webkit-transform: translate(-38%,2%);
transform: translate(-38%,2%);
-webkit-animation: wavedash2 10s ease-out infinite;
animation: wavedash2 10s ease-out infinite;
}
@-webkit-keyframes wavedash2 {
0% {
-webkit-transform: translate(-28%,2%);
transform: translate(-28%,2%);
}
50% {
-webkit-transform: translate(-5%,2%);
transform: translate(-5%,2%);
}
100% {
-webkit-transform: translate(8%,2%);
transform: translate(8%,2%);
}
}
.dolphin-loca {
/*transform: translate(-166%,69%);*/
-webkit-animation: dolphin 8s ease-out infinite;
animation: dolphin 8s ease-out infinite;
}
@-webkit-keyframes dolphin {
0% {
-webkit-transform: translate(-172%,40%);
transform: translate(-172%,40%);
}
50% {
-webkit-transform: translate(-172%, -36%);
transform: translate(-172%, -36%);
}
65% {
-webkit-transform: translate(-172%, -36%);
transform: translate(-172%, -36%);
}
80% {
-webkit-transform: translate(-172%, -36%);
transform: translate(-172%, -36%);
}
100% {
-webkit-transform: translate(-172%,40%);
transform: translate(-172%,40%);
}
}
.text-dolphin {
-webkit-animation: dolphin-button 8s ease-out infinite;
animation: dolphin-button 8s ease-out infinite;
}
@-webkit-keyframes dolphin-button {
0% {
-webkit-transform: translate(-172%,40%);
transform: translate(-172%,40%);
opacity: 0;
}
50% {
-webkit-transform: translate(-123%, -60%);
transform: translate(-123%, -60%);
opacity: 0;
}
65% {
-webkit-transform: translate(-123%, -60%);
transform: translate(-123%, -60%);
opacity: 1;
}
78% {
-webkit-transform: translate(-123%, -60%);
transform: translate(-123%, -60%);
opacity: 1;
}
85% {
-webkit-transform: translate(-162%, -60%);
transform: translate(-162%, -60%);
opacity: 0;
}
100% {
-webkit-transform: translate(-172%,40%);
transform: translate(-172%,40%);
opacity: 0;
}
}
.closeEye {
-webkit-animation: eye 1.5s cubic-bezier(.17,.67,.48,.84) infinite;
animation: eye 1.5s cubic-bezier(.17,.67,.48,.84) infinite;
}
@-webkit-keyframes eye {
0% {
-webkit-transform: translateY(0px) scaleY(1);
transform: translateY(0px) scaleY(1);
}
10% {
-webkit-transform: translateY(265px) scaleY(0.05);
transform: translateY(265px) scaleY(0.05);
}
15% {
-webkit-transform: translateY(170px) scaleY(0.4);
transform: translateY(170px) scaleY(0.4);
}
25% {
-webkit-transform: translateY(85px) scaleY(0.7);
transform: translateY(85px) scaleY(0.7);
}
30% {
-webkit-transform: translateY(85px) scaleY(0.7);
transform: translateY(85px) scaleY(0.7);
}
35% {
-webkit-transform: translateY(170px) scaleY(0.4);
transform: translateY(170px) scaleY(0.4);
}
40% {
-webkit-transform: translateY(255px) scaleY(0.1);
transform: translateY(255px) scaleY(0.1);
}
100% {
-webkit-transform: translateY(0px) scaleY(1);
transform: translateY(0px) scaleY(1);
}
}
There are two reasons your animation doesn't work on Firefox.
Percentages in SVG files are relative to the viewport size (the dimensions of the SVG). That's what Firefox does. So translate(-172%,40%)
is putting the dolphin way off the edge of the SVG.
Chrome is calculating percentages relative to the dimensions of the dolphin. That is not the correct behaviour.
If you want your animation to work in both browsers, you need to switch to using absolute pixel values in your transform
rules (eg. 100px
).
.dolphin-loca {
-webkit-animation: dolphin 8s ease-out infinite;
animation: dolphin 8s ease-out infinite;
}
@-webkit-keyframes dolphin {
0% {
transform: translate(-300px, 100px);
}
50% {
transform: translate(-300px, -100px);
}
65% {
transform: translate(-300px, -100px);
}
80% {
transform: translate(-300px, -100px);
}
100% {
transform: translate(-300px, 100px);
}
}
@keyframes dolphin {
0% {
transform: translate(-300px, 100px);
}
50% {
transform: translate(-300px, -100px);
}
65% {
transform: translate(-300px, -100px);
}
80% {
transform: translate(-300px, -100px);
}
100% {
transform: translate(-300px, 100px);
}
}
<svg x="0px" y="0px" width="1600px" height="450.39px" viewBox="0 0 1600 450.39">
<g id="Layer_7" class="dolphin-loca" >
<path id="XMLID_29_" fill="#0083B7" d="M805.419,255.439c0-44.307-28.647-75.028-71.876-79.144 c1.21-4.736,2.37-7.935-2.083-7.935c-3.665,0-8.222,3.306-11.537,7.72c-44.529,2.807-74.611,34.122-74.611,79.359 c0,12.658,2.772,23.054,7.724,31.504c-4.966,9.543-5.992,22.504-1.546,28.282c5.617,7.3,8.705-3.645,17.415-11.529 c15.167,10.519,32.232,14.748,56.46,14.748c2.102,0,4.185-0.033,6.248-0.098c-0.163,6.328-2.354,13.155-7.468,20.396 c-3.842-5.743-20.614-27.065-47.537-8.519c-1.583,1.09,17.322,28.912,44.758,12.288c-0.328,0.717-0.755,2.152,1.434,1.581 c-4.001,6.03-9.983,19.613,5.826,32.179c1.107,0.88,16.966-18.865-2.171-34.437c5.641-3.797,16.995-12.42,26.062-25.462 c13.228-2.205,20.431-6.272,29.324-12.662c8.699,7.883,11.786,18.811,17.4,11.515c4.446-5.778,3.42-18.739-1.546-28.282 C802.648,278.493,805.419,268.097,805.419,255.439z M725.366,314.436c-44.229,0-74.917-14.978-74.917-59.207 s30.688-74.401,74.917-74.401c44.229,0,74.917,30.172,74.917,74.401S769.595,314.436,725.366,314.436z" />
</g>
</svg>
这篇关于Mozilla中的动画无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!