gpt4 book ai didi

javascript - Vue.js 在播放 Enter 后动态更改离开过渡

转载 作者:行者123 更新时间:2023-11-28 03:10:15 26 4
gpt4 key购买 nike

我有一个动态过渡,告诉我的元素向左或向右移动(它是一个 slider 元素)。由于默认情况下 Vue 只允许我执行一个转换,因此我使用动态转换属性:

<transition v-bind:name="'slider-' + slideDirection">

现在,此 slider 具有进入和离开过渡,可根据其出现或离开的方向进行调整。一切看起来都很好,但是..

当元素满足出现条件时,enter 和 Enter-to 转换始终正确执行。但是如果在元素出现后更改了 left 和 left-to 转换,则不会获得更新的方向。

这是一个 fiddle ,显示了我的意思:

https://jsfiddle.net/nxLmdk9q/4/

在这个例子中,一切正常,除了一旦你改变方向,元素就会获得之前的离开方向动画。

我该如何解决这个问题?

最佳答案

看起来您的幻灯片转换在 SlideDirection 更新之前就开始了。尝试使用 nextTick 函数,以便幻灯片过渡等待方向更新。

更新了示例。

new Vue({
el: "#app",
data: {
slideDirection: "right",
counter: 0
},
methods: {
moveRight: function() {
this.slideDirection = "right";
this.$nextTick(() => {
this.counter++;
})

},
moveLeft: function() {
this.slideDirection = "left";
this.$nextTick(() => {
this.counter--;
})
},
}
})
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}

#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
display: flex;
flex-direction: column;
width: 300px;
height: 150px;
}

div#slider {
position: relative;
}

div#slider div:nth-child(even) {
background: green;
}

div#slider div:nth-child(odd) {
background: red;
}

div {
padding: 30px;
width: 100%;
height: 100%;
position: absolute;
}

div:odd {
background: blue;
}

.slider-right-enter {
opacity: 0;
transform: translatex(100%);
}

.slider-right-enter-to {
opacity: 1;
transition: all 0.5s ease-out;
}

.slider-right-leave-to {
opacity: 0;
transform: translatex(-100%);
transition: all 0.5s ease-out;
}

.slider-left-enter {
opacity: 0;
transform: translatex(-100%);
}

.slider-left-enter-to {
opacity: 1;
transition: all 0.5s ease-out;
}

.slider-left-leave-to {
opacity: 0;
transform: translatex(100%);
transition: all 0.5s ease-out;
}
<div id="app">

<div id="slider">
<transition v-bind:name="'slider-' + slideDirection">
<div v-if='counter == 0'>
0
</div>
</transition>

<transition v-bind:name="'slider-' + slideDirection">
<div v-if='counter == 1'>
1
</div>
</transition>

<transition v-bind:name="'slider-' + slideDirection">
<div v-if='counter == 2'>
2
</div>
</transition>

<transition v-bind:name="'slider-' + slideDirection">
<div v-if='counter == 3'>
3
</div>
</transition>

</div>

<div>

<button @click="moveLeft">
&#x3C;&#x3C;
</button>
<button @click="moveRight">
&#x3E;&#x3E;
</button>
</div>
</div>

关于javascript - Vue.js 在播放 Enter 后动态更改离开过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60200582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com