vue手写卡片切换,并且点击获取到卡片信息

需求:做一个卡片样式的列表,之后有一些基本信息,之后卡片选中后样式不一样,默认选中第一个卡片,点击卡片后可以获取到卡片的信息

一、效果

二、关键代码

index默认重0开始,activeTable默认为0,0-0等于0,但是有个!那就是取反的意思,那就是true ,就是点击的这个会有选中的active样式,也就是默认第一个会被选中,之后点击其他卡片只需要把index给赋值给activeTab就能实现了

  <div class="menu-list">
            <div v-for="(item, index) in menuTableData" :key="index">
                <div :class="{ active: !(index - activeTab), menus: 'menus' }" @click="menuClick(item, index)">
                    <div class="menu-avatar">
                        <i class="el-icon-star-off"></i>
                    </div>
                    <div class="menu-text">{{ item.name }}</div>
                </div>
            </div>
        </div>

三、完整代码

<template>
    <div style="width: 600px; margin-top: 50px">
        <div class="menu-list">
            <div v-for="(item, index) in menuTableData" :key="index">
                <!-- index==0,activeTable默认为0,0-0等于0,但是有个!那就是取反的意思,那就是true ,就是点击的这个会有选中的active样式-->
                <div :class="{ active: !(index - activeTab), menus: 'menus' }" @click="menuClick(item, index)">
                    <div class="menu-avatar">
                        <i class="el-icon-star-off"></i>
                    </div>
                    <div class="menu-text">{{ item.name }}</div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
export default {
    data() {
        return {
            menuTableData: [
                {
                    name: '李华'
                },
                {
                    name: '张三'
                },
                {
                    name: '李四'
                }
            ],
            activeTab: 0 //根据点击进行高亮
        };
    },
    mounted() {},
    methods: {
        menuClick(item, index) {
            this.activeTab = index;
            console.log(item, '点击菜单管理获取');
        }
    }
};
</script>

<style lang="scss" scoped>
.menu-list {
    height: calc(100vh - 360px);
    overflow: auto;
    display: flex;
    flex-direction: column;
    box-sizing: border-box;

    // 左侧主要样式
    .menus {
        /* 矩形 7 */
        width: 300px;
        height: 80px;
        background: rgb(255, 255, 255);
        box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.1);
        border-radius: 4px;
        margin: 20px 20px;
        display: flex;
        align-items: center;
        .menu-avatar {
            /* 椭圆形 */
            width: 43px;
            height: 43px;
            background: rgba(163, 241, 255, 0.4);
            border-radius: 50%;
            display: flex;
            justify-content: center;
            align-items: center;
            margin-left: 20px;
            i {
                font-size: 25px;
                color: #fff;
            }
        }
        .menu-text {
            /* 用户管理 */
            color: pink;
            font-family: 阿里巴巴普惠体;
            font-size: 18px;
            font-weight: 400;
            line-height: 22px;
            letter-spacing: -1px;
            text-align: left;
            margin-left: 20px;
        }
    }
    // 选中菜单管理列表后高亮
    .active {
        box-shadow: 0px 8px 8px 0px rgba(27, 19, 19, 0.1);
        .menu-avatar {
            background: rgb(156, 210, 241);
        }
        .menu-text {
            font-weight: 600;
        }
    }
}
</style>

文章到此结束希望对你有所帮助~

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Vue.js 中的过渡效果和动画来实现卡片的左右切换。以下是一个简单的实现示例: ```html <template> <div class="card-container"> <transition-group name="slide" tag="div"> <div v-for="(card, index) in cards" :key="index" class="card"> {{ card }} </div> </transition-group> <button @click="prevCard" class="prev-button">Prev</button> <button @click="nextCard" class="next-button">Next</button> </div> </template> <script> export default { data() { return { cards: ['Card 1', 'Card 2', 'Card 3', 'Card 4'], currentIndex: 0 }; }, methods: { prevCard() { if (this.currentIndex > 0) { this.currentIndex--; } }, nextCard() { if (this.currentIndex < this.cards.length - 1) { this.currentIndex++; } } } }; </script> <style> .card-container { position: relative; } .card { display: inline-block; width: 200px; height: 200px; background-color: #ccc; margin-right: 10px; } .slide-enter-active, .slide-leave-active { transition: all 0.5s; } .slide-enter, .slide-leave-to { transform: translateX(100%); } </style> ``` 这里使用了 `<transition-group>` 组件来包裹卡片,并添加了 `name="slide"` 属性,以便定义过渡动画的类名。 在 `methods` 中,`prevCard` 和 `nextCard` 方法分别用于切换到前一个和后一个卡片。通过更新 `currentIndex` 的值来改变当前显示的卡片。 在样式中,使用了 CSS 的 `transform` 属性来实现卡片的平移动画效果。 你可以根据自己的需求修改卡片的内容、样式和动画效果。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值