账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    使用vue过渡动画过程中遇到的问题,大家共同探讨一下
    • 东京的樱花在巴黎飘落2018-06-22 00:00
    • 10
    61
    0

    这里主要要完成的效果是:当前元素左移消失(过程中透明度逐渐为0),新元素紧随其后左移到上一个元素的位置(透明度在移动的过程中从0到1)。这里出现的问题是两个div并未紧贴着完成动画,而是一直保持这距离,使得整个效果过于生硬。

    以下是全部源代码:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
        <style>
            .d {
                position: relative;
                border: 1px solid red;
                width: 30px;
                height: 30px;
            }
            @keyframes show {
                0% {
                    opacity: 0;
                    transform: translateX(30px);
                }
                100% {
                    opacity: 1;
                    transform: translateX(0);
                }
            }
            @keyframes hide {
                0% {
                    opacity: 1;
                    transform: translateX(0);
                }
                100% {
                    opacity: 0;
                    transform: translateX(-30px);
                }
            }
            .show-enter-active {
                animation: show 2s;
            }
            .show-leave-active {
                animation: hide 1s;
            }
            .show-enter, .show-leave-to {
                opacity: 0;
            }
            .wrap {
                display: flex;
            }
        </style>
        <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
    </head>
    <body>
    <div id="app">
        <p>{{ message }}</p>
        <div class="wrap">
            <transition name="show">
                <div class="d" v-for="item in list" :key="item.id" v-if="count === item.id">
                    {{ item.text }}
                </div>
            </transition>
        </div>
        <button @click="add">add</button>
    </div>
    
    <script>
        new Vue({
            el: '#app',
            data () {
                return {
                    message: 'Hello Vue.js!',
                    count: 0,
                    list: [
                        {id: 0, text: 'aaa'},
                        {id: 1, text: 'bbb'},
                        {id: 2, text: 'ccc'}
                    ]
                }
            },
            methods: {
                add: function () {
                    if (this.count < this.list.length - 1) {
                        this.count += 1;
                    } else {
                        this.count = 0;
                    }
                }
            }
        })
    </script>
    </body>
    </html>
    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    扫一扫访问手机版

    回答动态

    师傅被妖怪抓走了:发布了悬赏问题火爆全网的“元宇宙”到底是什么?预计能赚取 1积分收益
    酒后略带风情:发布了悬赏问题Android内存中Graphics与Code占用过高预计能赚取 10积分收益
    扛起拖把扫天下:发布了悬赏问题typescript如何导出接口配置?求解,谢谢!预计能赚取 10积分收益
    发布了悬赏问题Vue 如何改变返回页面的路径?如让B页面只能返回到A页面.预计能赚取 11积分收益
    发布了悬赏问题vue H5移动端;底部bottom固定定位,安卓弹起键盘导致页面变形如何解决?预计能赚取 10积分收益
    发布了悬赏问题请问为什么tomcat8.5 GET请求中文正常,POST请求还需要设置UTF-8.预计能赚取 10积分收益
    发布了悬赏问题vue2.5+ts创建以及引入jq的方法预计能赚取 11积分收益
    情场浪女:发布了悬赏问题import ggplot时报错module 'pandas' has no attribute 'tslib'预计能赚取 10积分收益
    见心书画许老师18753375161:发布了悬赏问题echarts3 legend禁止点击事件,允许悬浮事件预计能赚取 11积分收益
    aa_92cb0bd09f:发布了悬赏问题codewar上的一个问题预计能赚取 11积分收益