【发布时间】:2021-02-09 18:13:23
【问题描述】:
我找到了一种在 Vue.js 中创建动画的新方法 - 2D 角色here is a picture 进度:您将在每个特定时间移动该图片中的每个角色。解决方案:你会看到角色在移动。
我创造了自己的角色。我想在numTotal > 0 之后更改这个角色的动画。正是我想要做的:我的主要动画被称为idle,当numTotal > 0想要将动画更改为angry,2秒后动画应该切换回我的动画idle
Vue.js
<div class="character" :style="inlineStyle"></div>
数据
data() {
return {
animationDelay: 2000,
angry: 'animation-name: angry',
idle: 'animation-name: idle',
currentAnimation: null,
afterAnimation: null,
animation: null,
}
},
计算
computed: {
inlineStyle() {
if (this.numTotal > 0) {
this.updateAnimation(this.animation, this.angry, this.idle)
return this.animation
} else {
this.animation = this.idle
return this.animation
}
}
},
方法
methods: {
updateAnimation(animation, currentAnimation, afterAnimation){
animation = currentAnimation
setTimeout(() => {
animation = afterAnimation
}, 500)
},
风格
.character {
background-image: url("http://huwe_final.test/images/character-animation.png?7b1c86288eb21d80e5981e0693e08d5e");
position: absolute;
z-index: 100;
width: 93%;
height: 747px;
margin-left: 3px;;
animation-iteration-count: infinite;
animation-timing-function: steps(24);
animation-duration: 1.2s;
}
@keyframes idle {
from { background-position: 0 0; }
to { background-position: -11782px 0; }
}
@keyframes angry {
from { background-position: 0 745px; }
to { background-position: -11782px 745px; }
}
我遇到的问题是我的setTimeout 无法正常工作,即使我在控制台动画中写入 - console.log(animation),我看到 animation 已更改为 angry,但在网站上动画是还是idle
有谁知道如何修复setTimeout?
感谢您的帮助!
【问题讨论】:
-
为什么不在超时时间里设置
this.animation?你可以创建一个stackoverflow.com/help/minimal-reproducible-example 吗? -
我将问题更新为更简单的方法。我将
this.animation放入超时内,因为我希望在 500 毫秒后将动画从angry更改为idle。这是我唯一知道如何切换动画的想法。 -
但是你只写“动画”而不是“this.aniation”这是我的问题,在超时之外你使用“this.animation”
-
现在我明白了。我已将它到处更改为
this.animation并改为计算我调用没有animation的方法。就是这样,我的代码在方法部分中的样子:updateAnimation(currentAnimation, afterAnimation){ this.animation = currentAnimation setTimeout(() => { this.animation = afterAnimation }, 500) console.log(this.animation) }但它仍然无法正常工作。这次只是把动画改成了angry并没有切换回来
标签: javascript html css laravel vue.js