前端——Layui的导航栏与tab页联动

一、body

html 复制代码
<!--  导航栏  -->
    <div class="layui-side layui-bg-black">
        <div class="layui-side-scroll">
            <ul id="nav" class="layui-nav layui-nav-tree" lay-filter="stock">
                <li class="layui-nav-item layui-this"><a href="#wholeAnalysis" lay-id="wholeAnalysis">整体分析</a></li>
                <li class="layui-nav-item"><a href="#bkAnalysis" lay-id="bkAnalysis">aaaa</a></li>
                <li class="layui-nav-item"><a href="#gpAnalysis" lay-id="gpAnalysis">bbbb</a></li>
                <li class="layui-nav-item"><a href="#bkChance" lay-id="bkChance">cccc</a></li>
                <li class="layui-nav-item"><a href="#gpChance" lay-id="gpChance">dddd</a></li>
            </ul>
        </div>
    </div>

    <div class="layui-body">
        <!--  tab页  -->
        <div id="tab" class="layui-tab" lay-filter="stock" lay-allowClose="true">
            <ul class="layui-tab-title">
                <li class="layui-this" lay-id="wholeAnalysis">整体分析</li>
            </ul>
            <div class="layui-tab-content">
                <div class="layui-tab-item layui-show">
                    <iframe id="wholeAnalysis" src="wholeAnalysis" frameborder="0" height="100%" width="100%"></iframe>
                </div>
            </div>
        </div>
    </div>

二、JS

javascript 复制代码
// 导航栏点击
        element.on('nav(stock)', function (data) {
            const layId = this.getAttribute('lay-id')
            if (layId == null) {
                return 0;
            } else {
                //判断是否存在tab
                let exist = $("li[lay-id='" + layId + "']").length; 
                if (exist == 0) {
                    element.tabAdd('stock', {
                        title: this.innerHTML,
                        content: "<iframe id='" + layId + "' frameborder='0' src='" + layId + "' scrolling='auto' height='100%' width='100%'></iframe>",
                        id: layId
                    });
                }
                setIframeHeight(document.getElementById(layId));
                element.tabChange('stock', layId);
            }
        });

        // tab页点击
        element.on('tab(stock)', function () {
            let Len = $("#nav li a").length;
            let targetIndex;
            for (let i = 0; i < Len; i++) {
                if ($(this).context.textContent == $("#nav li a")[i].outerText) {
                    //tab内容和垂直导航相等时,记录下序号
                    targetIndex = i;
                }
            }
            // 更新layui-this样式类
            $("#nav").find('.layui-this').removeClass('layui-this');
            $("#nav li a").eq(targetIndex).parentsUntil("#nav").addClass("layui-this");
            location.hash = this.getAttribute('lay-id');
        });
相关推荐
能不能送我一朵小红花21 小时前
基于uniapp的PDA手持设备红外扫码方案
前端·uni-app
风止何安啊21 小时前
别被 JS 骗了!终极指南:JS 类型转换真相大揭秘
前端·javascript·面试
拉不动的猪21 小时前
深入理解 Vue keep-alive:缓存本质、触发条件与生命周期对比
前端·javascript·vue.js
|晴 天|21 小时前
WebAssembly:为前端插上性能的翅膀
前端·wasm
孟祥_成都1 天前
你可能不知道 react 组件中受控和非受控的秘密!
前端
火车叼位1 天前
ast-grep:结构化搜索与重构利器
前端
over6971 天前
深入理解 JavaScript 原型链与继承机制:从 instanceof 到多种继承模式
前端·javascript·面试
烂不烂问厨房1 天前
前端实现docx与pdf预览
前端·javascript·pdf
GDAL1 天前
Vue3 Computed 深入讲解(聚焦 Vue3 特性)
前端·javascript·vue.js
Moment1 天前
半年时间使用 Tiptap 开发一个和飞书差不多效果的协同文档 😍😍😍
前端·javascript·后端