Vue实验报告4 Tab栏与按钮实现动态切换

一、实验要求

(1)

        编写一个登录页面,使用Tab栏实现“账号登录”和“二维码登录”这两种方式的切换,并通过transition组件结合animate.css实现切换时的动画效果

        编写一个登录界面,最上面是并排的两个按钮——“账号登录”和“二维码登录”,点击账号登录,下方会出现账号密码的文本和文本输入框,还有登录和取消两个按钮(不必实现具体功能),而点击二维码登录下方则会出现一个二维码图片和“请扫描二维码登录”这行文本,并通过transition组件结合animate.css实现切换时的动画效果

(2)

        实现单击一个按钮后,切换盒子的展开和收起状态

二、实验结果

(1)

结果展示:

代码展示:

<!DOCTYPE html>
<html lang="cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录界面</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css">
    <script src="app.js"></script>
    <style>
        .slide-fade-enter-active,
        .slide-fade-leave-active {
            transition: all 0.5s;
        }

        .slide-fade-enter,
        .slide-fade-leave-to {
            transform: translateX(15%);
            opacity: 0;
        }

        .slide-fade-enter-to,
        .slide-fade-leave {
            transform: translateX(0);
            opacity: 1;
        }

        .biaoti {
            color: gray;
        }
    </style>
</head>

<body>
    <div id="app">
        <div>
            <button @click="showAccountLogin">账号登录</button>
            <button @click="showQRcodeLogin">二维码登录</button>
        </div>

        <transition name="slide-fade" mode="out-in">
            <div v-if="loginType === 'account'" key="account">
                <h2>账号登录</h2>
                <label for="username">账号:</label>
                <input type="text" id="username" v-model="username">
                <br>
                <label for="ps">密码:</label>
                <input type="password" id="ps" v-model="password">
                <br>
                <button @click="login">登录</button>
                <button @click="cancel">取消</button>
            </div>

            <div v-else key="qrcode">
                <h2>二维码登录</h2>
                <img src="111.png" alt="二维码">
                <p class="biaoti">请扫描二维码登录</p>
            </div>
        </transition>
    </div>
    <script>
        new Vue({
            el: '#app',
            data: {
                loginType: 'account',
                username: '',
                password: ''
            },
            methods: {
                // 切换到账号登录
                showAccountLogin() {
                    this.loginType = 'account';
                },
                // 切换到二维码登录
                showQRcodeLogin() {
                    this.loginType = 'qrcode';
                },
                // 执行登录操作
                login() {
                    // 这里可以添加实际的登录逻辑,例如通过API发送登录请求
                    // 暂时使用alert显示登录成功,并展示用户名和密码
                    alert('登录成功 用户名:' + this.username + ', 密码: ' + this.password);
                },
                // 取消登录,清空用户名和密码
                cancel() {
                    this.username = '';
                    this.password = '';
                }
            }
        });
    </script>
</body>

</html>

(2)

结果展示:

代码展示:

<!DOCTYPE html>
<html lang="cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>盒子展开和收起</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css">
    <style>
        .hezi {
            background-color: red;
            height: 400px;
            width: 100px;
            margin: 50px;
        }
    </style>
</head>

<body>
    <div id="app">
        <div v-if="ss === 'zhankai'">
            <button @click="showZhan">展开</button>
        </div>

        <div v-else>
            <button @click="showShou">收起</button>
        </div>
        <div class="hezi" v-if="ss === 'shou'"></div>
    </div>

    <script>
        new Vue({
            el: '#app',
            data: {
                ss: 'zhankai'
            },
            methods: {
                showZhan() {
                    this.ss = 'shou';
                    hezi.visible = 'true';
                },
                showShou() {
                    this.ss = 'zhankai';
                    hezi.visible = 'false'
                }
            }
        })
    </script>
</body>

</html>

三、实验总结

1.mode的区别(很关键,不然效果完全不一样):

(1)in-out 模式:默认情况下,在这种模式下,新元素的进场动画会在旧元素的出场动画之前播放。先进再出

(2)out-in 模式:与 in-out 相反,旧元素的出场动画会在新元素的进场动画之前播放。先出再进

2.label标签中的for和input标签中的id建立联系,之后提供一个更大的点击范围。

3.key有助于提高渲染,有助于Vue识别项目并提高DOM的更新的性能。

4.v-model用于双向绑定div和vue对象的数据,即起id或class这样类似人类姓名的作用

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值