tab左侧栏导航

该代码示例展示了如何在Vue.js应用中创建一个包含左右两个滚动视图的布局。左侧视图用于显示分类列表,右侧视图则展示所选分类的子项。当用户点击左侧的分类时,右侧的滚动视图会更新为相应的子分类内容。同时,使用了动态计算高度和点击事件处理函数来实现交互效果。
摘要由CSDN通过智能技术生成

<template>


    <view class="scroll-view-container">

//左边

        <scroll-view class="left-scroll-view" scroll-y :style="{height: wh + 'px'}">

            <block v-for="(item,index) in cateList" :key="index">
                <view @click="activeChanged(index)" :class="['left-scroll-view-item', index === active ? 'active':'']">
                    {{item.cat_name}}
                </view>
            </block>


        </scroll-view>

    //右边
        <scroll-view class="right-scroll-view" scroll-y :style="{height: wh + 'px'}" :scroll-top="scrollTop">
            <view class="cate-lv2" v-for="(item2,index2) in cateLevel2" :key="index2">
                <!-- 二级分类标题 -->
            

                <image :src="item2.image"></image>
                <view class="cate-lv2-title">{{item2.title}}</view>

            </view>
        </scroll-view>

        <MyTabbar></MyTabbar>

    </view>

</template>

<script>
    import MyTabbar from '../../components/tabBar.vue'
    import {
        API
    } from '../../api/index.js'
    export default {
        data() {
            return {
                // 窗口的可用高度 = 屏幕高度 - navigationBar高度 - tabBar 高度
                wh: 0,
                // 分类数据列表
                cateList: [],
                active: 0,
                // 二级分类列表
                cateLevel2: [],
                // 滚动条距离顶部的距离
                scrollTop: 0
            }
        },
        components: {
            MyTabbar
        },
        onLoad() {
            // 获取当前系统的信息
            const sysInfo = uni.getSystemInfoSync()
            // 为 wh 窗口可用高度动态赋值
            this.wh = sysInfo.windowHeight - 50,

                this.zuopin()
        },
        methods: {
            zuopin() {
                API.zuopin({}).then(e => {

                    this.cateList = e.data
                    this.cateLevel2 = e.data[0].list
                    console.log(e);
                    console.log(this.cateList);
                    console.log(this.cateLevel2);
                })
            },
            activeChanged(index) {
                // 选中项改变的事件处理函数
                this.active = index
                this.cateLevel2 = this.cateList[index].list
                // 让 scrollTop 的值在 0 与 1 之间切换
                this.scrollTop = this.scrollTop === 0 ? 1 : 0
            },
        }
    }
</script>

<style lang="scss">
    .scroll-view-container {
        display: flex;

        .left-scroll-view {
            width: 120px;

            .left-scroll-view-item {
                line-height: 60px;
                background-color: #f7f7f7;
                text-align: center;
                font-size: 12px;

                // 激活项的样式
                &.active {
                    background-color: #ffffff;
                    position: relative;

                    // 渲染激活项左侧的红色指示边线
                    &::before {
                        content: ' ';
                        display: block;
                        width: 3px;
                        height: 30px;
                        background-color: #c00000;
                        position: absolute;
                        left: 0;
                        top: 50%;
                        transform: translateY(-50%);
                    }
                }
            }
        }

        .cate-lv2-title {
            font-size: 12px;
            font-weight: bold;
            text-align: center;
            padding: 15px 0;
        }

        .cate-lv3-list {
            display: flex;
            flex-wrap: wrap;

            .cate-lv3-item {
                width: 33.33%;
                display: flex;
                flex-direction: column;
                justify-content: center;
                align-items: center;

                image {
                    width: 60px;
                    height: 60px;
                }

                text {
                    font-size: 12px;
                }
            }
        }
    }
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒜苔肉丝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值