You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中如何让Div跟随滑动过渡动画同步移动?

问题解决:让按钮与文本同步滑动

问题根源在于当前代码中,按钮的位置变化是flex布局因新元素(状态文本)加入而瞬间重排导致的,而状态文本的动画是独立的transform过渡,两者没有同步,所以呈现出按钮先跳走、文本再滑入的效果。

解决方案

通过给flex布局中的填充元素(.filler)添加flex-grow属性的过渡,让按钮的位置变化拥有和文本一致的动画时长,同时保持文本的滑入动画,实现两者同步移动。

修改后的完整代码

HTML

<div id="app">
    <div class="container" :class="{ 'has-status': toggle }">
        <div class="filler"></div>
        <button v-on:click="SlideIn">Test</button>
        <transition name="slide">
            <div v-if="toggle">Status update</div>
        </transition>
    </div>
</div>

CSS

.container {
    width: 200px;
    height: auto;
    display: flex;
}

.filler{
    flex-grow: 1;
    /* 给填充元素添加flex-grow过渡,同步按钮位置变化 */
    transition: flex-grow 1s ease;
}

/* 当显示状态文本时,填充元素收缩 */
.container.has-status .filler {
    flex-grow: 0;
}

.slide-leave-active,
.slide-enter-active {
    transition: transform 1s ease;
}
.slide-enter {
    transform: translate(100%, 0);
}
.slide-leave {
    transform: translate(-100%, 0);
}

JavaScript

var app = new Vue({
    el: "#app",
    data: {
        toggle: false
    },
    methods: {
        SlideIn: function () {
            this.toggle = !this.toggle;
        }
    }
});

效果说明

当点击按钮时,.filler会从占满剩余空间平滑收缩到0,带动按钮同步左移;同时状态文本保持原有的右侧滑入过渡,两者动画时长一致,最终实现按钮与文本一同滑动汇合的效果。

内容的提问来源于stack exchange,提问作者Tadhg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:35:27