|
|
1
tao
3 年前
您发布的代码有几个问题,每个问题都会破坏动画:
-
这个
<svg>
在
<button>
(至少在Chrome中)
-
这个
@keyframe
格式不正确。您的动画来自
opacity: 0
到
transform: 1
。
变换:1
无效,并且即使是,也无法将一个属性动画化为另一个属性。动画进行到一半时,我们应该期待什么?
opacform: 0.5
?
您可能希望从
不透明度:0
到
opacity: 1
-
你没有设置
不透明度:0
在…上
.{x}-enter-active
类。对于那些有拖延的人来说,这是必要的,因为当他们被拖延的时候,他们会得到任何东西
opacity
元素具有,默认情况下为
1
。
看到它工作:
const {
createApp
} = Vue
createApp({
data() {
return {
show: false
}
}
}).mount('#app')
.svg svg {
height: 2rem;
width: auto;
}
.forwardOne-enter-active,
.forwardTwo-enter-active,
.forwardThree-enter-active {
animation: .2s fade-in;
opacity: 0;
}
.forwardOne-leave-active,
.forwardTwo-leave-active,
.forwardThree-leave-active {
animation: .2s fade-in reverse;
}
.forwardTwo-enter-active,
.forwardTwo-leave-active {
animation-delay: .3s;
}
.forwardThree-enter-active,
.forwardThree-leave-active {
animation-delay: .6s;
}
@keyframes fade-in {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
<div id="app">
<button class="right" @click="show = !show">
Click
</button>
<button class="svg">
<svg fill="#000" viewBox="0 0 24 24" stroke="3px">
<Transition name="forwardThree">
<path v-show="show" d="M15.14,5.46V18.57l8.32-6.64ZM15.87,7l6.42,5-6.42,5.12Z"/>
</Transition>
<Transition name="forwardTwo">
<path v-show="show" d="M15.51,11.37l-.37-.28L7.86,5.43V18.54l7.28-5.81.73-.58v-.49ZM8.6,17V6.92l6.41,5Z"/>
</Transition>
<Transition name="forwardOne">
<path v-show="show" d="M8.23,11.41l-.37-.29L.54,5.43V18.54l7.32-5.85.37-.29.37-.3v-.41ZM1.28,17V6.92l6.41,5Z"/>
</Transition>
</svg>
</button>
</div>
这里有一种方法
avoid the CSS class boilerplate
,使用SCSS和创造性选择器。
旁注:
-
使用类选择器来安装你的应用程序是不正常的。与其说它不起作用,不如说Vue将该选择器视为ID选择器(它将应用程序安装在与选择器匹配的第一个元素中)。
如果您有多个此类元素,则应用程序将仅安装在第一个元素中。通过使用类选择器,没有IDE或代码验证器会警告您选择器的双重性,作为开发人员,您可能想了解它。
在我看来,使用类选择器装载Vue应用程序就像
using dots in class names
。它是有效的,但它很脆弱,因此对未来的微妙错误和头痛是一个公开的邀请。
-
从技术上讲,在FF中开发是不够的:
-
以大多数用户用来查看它的任何方式进行开发都更有意义。这样,如果其他浏览器对它的呈现方式不同,你就会向更少的用户提供“不同”的体验。
-
如果你的用户是开发者(就像上面的问题一样),Chrome用户的比例会高于65%(接近100%),这正是因为上面的原因。这意味着大多数看过你的代码的SO用户都认为它已经完全崩溃了——(在Chrome中尝试一下)。
我喜欢Mozilla,我使用他们的一些产品。但在开发时使用Firefox是没有意义的(当然,除非我正在开发针对FF用户的东西)。
|