如何使用 vuejs 为更改后的元素设置动画?
How can I animate the changed element with vuejs?
使用Vuejs 页面部分元素数据发生变化
但是,用户不理解此更改。
例如,我通过点击一个按钮来制作一个计数器。我将数据作为 {{counter}} 打印到 span 元素。
但是这个变化并没有被用户注意到。我怎样才能给它各种动画?
我尝试组合 css 我发现有我想要的动画,但没有成功。
Vuejs 文档说你可以用 toggleCss 做到这一点,但这不是我想要的。
var app=new Vue({
el: "#app",
data: {
myCount:0
}
,
methods: {
btnCount() {
this.myCount+=1
}
}
})
<div id='app'>
<button @click='btnCount'>
+++++
</button>
<span class='myAnimSpan'>{{myCount}}</span>
</div>
span:hover {
animation: shake 0.5s;
}
@keyframes shake {
0% { transform: translate(1px, 1px) rotate(0deg); }
10% { transform: translate(-1px, -2px) rotate(-1deg); }
20% { transform: translate(-3px, 0px) rotate(1deg); }
30% { transform: translate(3px, 2px) rotate(0deg); }
40% { transform: translate(1px, -1px) rotate(1deg); }
50% { transform: translate(-1px, 2px) rotate(-1deg); }
60% { transform: translate(-3px, 1px) rotate(0deg); }
70% { transform: translate(3px, 1px) rotate(-1deg); }
80% { transform: translate(-1px, -1px) rotate(1deg); }
90% { transform: translate(1px, 2px) rotate(0deg); }
100% { transform: translate(1px, -2px) rotate(-1deg); }
}
Jsfiddle : https://jsfiddle.net/au4x031g/
您可以使用 Vue 转换(参见 https://v3.vuejs.org/guide/transitions-enterleave.html#transitioning-single-elements-components)。
使用带有 name
的 <transition>
标签和带有 key
的元素(对该键的每次更改都会触发转换更新)
<transition name="shaketext">
<span class='myAnimSpan' :key="myCount">{{myCount}}</span>
</transition>
name
属性 用于 css 事件的 enter/leave 声明,例如:
.shaketext-enter-active {
animation: shake 0.9s;
}
.shaketext-leave-to, .shaketext-leave-active{
display: none;
}
此外,要使转换起作用,跨度元素应该是块元素(例如display:inline-block
)
.myAnimSpan {
display: inline-block;
}
使用Vuejs 页面部分元素数据发生变化
但是,用户不理解此更改。
例如,我通过点击一个按钮来制作一个计数器。我将数据作为 {{counter}} 打印到 span 元素。
但是这个变化并没有被用户注意到。我怎样才能给它各种动画?
我尝试组合 css 我发现有我想要的动画,但没有成功。
Vuejs 文档说你可以用 toggleCss 做到这一点,但这不是我想要的。
var app=new Vue({
el: "#app",
data: {
myCount:0
}
,
methods: {
btnCount() {
this.myCount+=1
}
}
})
<div id='app'>
<button @click='btnCount'>
+++++
</button>
<span class='myAnimSpan'>{{myCount}}</span>
</div>
span:hover {
animation: shake 0.5s;
}
@keyframes shake {
0% { transform: translate(1px, 1px) rotate(0deg); }
10% { transform: translate(-1px, -2px) rotate(-1deg); }
20% { transform: translate(-3px, 0px) rotate(1deg); }
30% { transform: translate(3px, 2px) rotate(0deg); }
40% { transform: translate(1px, -1px) rotate(1deg); }
50% { transform: translate(-1px, 2px) rotate(-1deg); }
60% { transform: translate(-3px, 1px) rotate(0deg); }
70% { transform: translate(3px, 1px) rotate(-1deg); }
80% { transform: translate(-1px, -1px) rotate(1deg); }
90% { transform: translate(1px, 2px) rotate(0deg); }
100% { transform: translate(1px, -2px) rotate(-1deg); }
}
Jsfiddle : https://jsfiddle.net/au4x031g/
您可以使用 Vue 转换(参见 https://v3.vuejs.org/guide/transitions-enterleave.html#transitioning-single-elements-components)。
使用带有 name
的 <transition>
标签和带有 key
的元素(对该键的每次更改都会触发转换更新)
<transition name="shaketext">
<span class='myAnimSpan' :key="myCount">{{myCount}}</span>
</transition>
name
属性 用于 css 事件的 enter/leave 声明,例如:
.shaketext-enter-active {
animation: shake 0.9s;
}
.shaketext-leave-to, .shaketext-leave-active{
display: none;
}
此外,要使转换起作用,跨度元素应该是块元素(例如display:inline-block
)
.myAnimSpan {
display: inline-block;
}