首页 > 其他分享 >使用hbuilder实现左右菜单联动功能

使用hbuilder实现左右菜单联动功能

时间:2023-10-19 10:47:20浏览次数:32  
标签:菜单 bigclassimg name img https hbuilder 联动 net png

<template>

    <view class="cbcd">
        <scroll-view scroll-y scroll-with-animation class="u-tab-view menu-scroll-view" :scroll-top="scrollTop">
            <view v-for="(item,index) in tabbar" :key="index" :class="[current==index ? 'u-tab-item-active' : 'u-tab-item']"
                :data-current="index" @tap.stop="swichMenu(index)">
                <text>{{item.name}}</text>
            </view>
        </scroll-view>
        
        <block v-for="(item,index) in tabbar" :key="index">
            <scroll-view scroll-y v-if="current==index">
                <view>
                    <view>
                        <view>
                            <text>{{item.name}}</text>
                        </view>
                        <view>
                            <view v-for="(item1, index1) in item.foods" :key="index1">
                                <image :src="item1.icon" mode=""></image>
                                <view>{{item1.name}}</view>
                            </view>
                        </view>
                    </view>
                </view>
            </scroll-view>
        </block>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                tabbar: [{
                        name: "人员详情",
                        foods: [{
                                name: ".net",
                                icon: "https://img.tnblog.net/bigclassimg/1net.png"
                            },
                            {
                                name: "java",
                                icon: "https://img.tnblog.net/bigclassimg/2CORE.png"
                            },
                            {
                                name: "python",
                                icon: "https://img.tnblog.net/bigclassimg/2CORE.png"
                            }
                        ]
                    },
                    {
                        name: "位置监控",
                        foods: [{
                                name: ".net",
                                icon: "https://img.tnblog.net/bigclassimg/1net.png"
                            },
                            {
                                name: "java",
                                icon: "https://img.tnblog.net/bigclassimg/python.png"
                            }
                        ]
                    },
                    {
                        name: "健康监控",
                        foods: [{
                                name: ".net",
                                icon: "https://img.tnblog.net/bigclassimg/1net.png"
                            },
                            {
                                name: "java",
                                icon: "https://img.tnblog.net/bigclassimg/mobile.png"
                            }
                        ]
                    },
                    {
                        name: "视频监控",
                        foods: [{
                                name: ".net",
                                icon: "https://img.tnblog.net/bigclassimg/1net.png"
                            },
                            {
                                name: "java",
                                icon: "https://img.tnblog.net/bigclassimg/2CORE.png"
                            }
                        ]
                    },
                    {
                        name: "就医记录",
                        foods: [{
                                name: ".net",
                                icon: "https://img.tnblog.net/bigclassimg/1net.png"
                            },
                            {
                                name: "java",
                                icon: "https://img.tnblog.net/bigclassimg/python.png"
                            }
                        ]
                    },
                    {
                        name: "报警信息",
                        foods: [{
                                name: ".net",
                                icon: "https://img.tnblog.net/bigclassimg/1net.png"
                            },
                            {
                                name: "java",
                                icon: "https://img.tnblog.net/bigclassimg/mobile.png"
                            }
                        ]
                    },
                    {
                        name: "周期报告",
                        foods: [{
                                name: ".net",
                                icon: "https://img.tnblog.net/bigclassimg/1net.png"
                            },
                            {
                                name: "java",
                                icon: "https://img.tnblog.net/bigclassimg/2CORE.png"
                            }
                        ]
                    }
                ],
                scrollTop: 0, //tab标题的滚动条位置
                current: 0, // 预设当前项的值
                menuHeight: 0, // 左边菜单的高度
                menuItemHeight: 0, // 左边菜单item的高度
            }
        },
        methods: {
            // 点击左边的栏目切换
            async swichMenu(index) {
                if (index == this.current) return;
                this.current = index;
                // 如果为0,意味着尚未初始化
                if (this.menuHeight == 0 || this.menuItemHeight == 0) {
                    await this.getElRect('menu-scroll-view', 'menuHeight');
                    await this.getElRect('u-tab-item', 'menuItemHeight');
                }
                // 将菜单菜单活动item垂直居中
                this.scrollTop = index * this.menuItemHeight + this.menuItemHeight / 2 - this.menuHeight / 2;
            },
            // 获取一个目标元素的高度
            getElRect(elClass, dataVal) {
                new Promise((resolve, reject) => {
                    const query = uni.createSelectorQuery().in(this);
                    query.select('.' + elClass).fields({
                        size: true
                    }, res => {
                        // 如果节点尚未生成,res值为null,循环调用执行
                        if (!res) {
                            setTimeout(() => {
                                this.getElRect(elClass);
                            }, 10);
                            return;
                        }
                        this[dataVal] = res.height;
                    }).exec();
                })
            }
        }
    }
</script>

<style scoped>
    .cbcd{
        display: flex;
    }
    .u-wrap {
        height: calc(100vh);
        /* #ifdef H5 */
        height: calc(100vh - var(--window-top));
        /* #endif */
        display: flex;
        flex-direction: column;
    }

    .u-search-box {
        padding: 18rpx 30rpx;
    }

    .u-menu-wrap {
        flex: 1;
        display: flex;
        overflow: hidden;
    }

    .u-search-inner {
        background-color: rgb(234, 234, 234);
        border-radius: 100rpx;
        display: flex;
        align-items: center;
        padding: 10rpx 16rpx;
    }

    .u-search-text {
        font-size: 26rpx;
        // color: $u-tips-color;
        color: #909399;
        margin-left: 10rpx;
    }

    .u-tab-view {
        width: 250rpx;
        height: 100%;
    }

    .u-tab-item {
        height: 110rpx;
        background: #f6f6f6;
        box-sizing: border-box;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 26rpx;
        color: #444;
        font-weight: 400;
        line-height: 1;
    }

    .u-tab-item-active {
        position: relative;
        color: #000;
        font-size: 30rpx;
        font-weight: 600;
        height: 110rpx;
        background: #fff;
        box-sizing: border-box;
        display: flex;
        align-items: center;
        justify-content: center;
        font-weight: 400;
        line-height: 1;
    }
/* 
    .u-tab-item-active::before {
        content: "";
        position: absolute;
        // border-left: 4px solid $u-type-primary;
        height: 32rpx;
        left: 0;
        top: 39rpx;
    } */

    .u-tab-view {
        height: 100%;
    }

    .right-box {
        background-color: rgb(250, 250, 250);
    }

    .page-view {
        padding: 16rpx;
    }

    .class-item {
        margin-bottom: 30rpx;
        background-color: #fff;
        padding: 16rpx;
        border-radius: 8rpx;
    }

    .item-title {
        font-size: 26rpx;
        // color: $u-main-color;
        color: #303133;
        font-weight: bold;
    }

    .item-menu-name {
        font-weight: normal;
        font-size: 24rpx;
        color: #303133;
        // color: $u-main-color;
    }

    .item-container {
        display: flex;
        flex-wrap: wrap;
    }

    .thumb-box {
        width: 33.333333%;
        display: flex;
        align-items: center;
        justify-content: center;
        flex-direction: column;
        margin-top: 20rpx;
    }

    .item-menu-image {
        width: 120rpx;
        height: 120rpx;
    }
</style>

 

标签:菜单,bigclassimg,name,img,https,hbuilder,联动,net,png
From: https://www.cnblogs.com/le-cheng/p/17774151.html

相关文章

  • 视频监控管理平台EasyCVR二级菜单隐藏后,鼠标悬浮时菜单名称不显示该如何解决?
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、视频能力灵活,能对外分发RTMP、RTSP、HTTP-......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(9) -- 实现系
    在WPF应用端开发,它的界面类似于Winform端,因此我们也需要对系统的菜单进行动态配置,这样才能把系统的功能弹性发挥到极致,通过动态菜单的配置方式,我们可以很容易的为系统新增所需的功能,通过权限分配的方式,可以更有效的管理系统的菜单分配到不同的角色用户,本篇随笔介绍在WPF应用端中实......
  • odoo中怎么为菜单配置权限组
      上面的需求是:为 ”设计识图“ 这个菜单添加权限:只有在设置>用户和公司>用户组中,会有一个名为“辅助组-设计识图”打钩后,才会显示这个菜单项: 实现上面的需求共三步:  1、在本模块的security目录下的\security\ir.model.access.csv下为模型添加权限(如果......
  • el-menu三级菜单示例
    <el-menudefault-active="0"class="el-menu-demo"mode="horizontal"background-color="#545c64"active-text-color="#ffd04b"text-color="#fff"router@select="handleSelect">......
  • js_下来菜单自动补全
    <scripttype="text/javascript">   //需要添加的数据内容,可以通过ajax请求获取   //定义加载部品番号的函数   functionloadcities(){       varurl="rawedge.aspx?action=get_matnrlist";       $.get(url,function(data){    ......
  • 微信小程序商城分类滚动列表锚点(左菜单右列表)
    1、TestScroll.wxml<viewclass="content-box"><!--左侧分类--><scroll-viewscroll-yscroll-with-animationclass="left"style="width:245rpx;height:100%;background:#f2f2f2;"scroll-into-view='{{leftId}}&#......
  • 关于vant移动端的样式使用hbuilderX打包成app时数据请求失败的问题
    项目使用的是vant4,在使用hbuilderX打包时,发现请求后端失败,然后在网上查了一下说是因为在apk中不存在跨域的问题,所以不需要进行代理设置那就取消代理试试吧(注:我这里使用的是cli3):api.js中写入exportconstlogin=(data)=>{//登录  returnaxiosPost('http://xxx.xxx.......
  • HBuilder快捷键
    快捷键打开/关闭左侧工作区Ctrl+B格式化alt+shift+f开启多个窗口alt+shift+3清空控制台cls关闭当前标签Ctrl+F4或Ctrl+W新打开一个编辑器ctrl+shift+n折叠所有代码ctrl+k,ctrl+0展开所有代码ctrl+k,ctrl+j在浏览器中打开当前html文件Shift+Alt+B单行注释C......
  • 2023-02-09-使用simple_term_menu创建更好的python菜单
    +++title="用simple_term_menu创建更好的python菜单"description=""date=2023-02-09T16:25:24+08:00featured=falsecomment=truetoc=truereward=truecategories=[""]tags=["python","menu"]seri......
  • 【Unity】 ScriptableObject ——生成多个ScriptableObject作为子对象,可以点击展开并
     官方是这么介绍ScriptabelObject的: “ScriptableObject是一个可独立于类实例来保存大量数据的数据容器。ScriptableObject的一个主要用例是通过避免重复值来减少项目的内存使用量。如果项目有一个预制件在附加的MonoBehaviour脚本中存储不变的数据,这将非常有用。每次实......