js导航制作(纯js,带有隐藏和显示的滑动效果)

2023-05-16

简介:纯js制作导航,此导航只需要关系 appendHtml(arrays,bigNavi,0,navigationArr);函数的使用即可。

下面代码粘贴到本地即可使用。

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>主页</title>
    <link rel="stylesheet" href="css/index.css">
    <link rel="stylesheet" href="icon/iconfont.css">
</head>
<body>
    <!-- 主内容 -->
    <div class="continer">
        <!-- 项目标题 -->
        <div class="title">
            <span class="iconfont icon-jiantoushang"></span>
        </div>
        <!-- 项目头部 -->
        <div class="top">
           
        </div>
        <!-- 左侧导航栏 -->
        <div  class="left">
            <div class="middleman">
                <div class="hrefs">
                <ul id="bigNavigation">
                    <!-- 导航 -->
                </ul>
                </div>
            </div>
          
        </div>
        <!-- 点击导航栏要显示的 -->
        <div  class="main">
            <iframe  src=""  name="iframe_a"></iframe>
        </div>
    </div>
</body>
<script src="icon/iconfont.js"></script>
<script>

    // 画面加载完成
    window.onload=function(){
        // 数据存放
        let arrays=[
            {
                name:"一级导航1",
                children:[
                    {
                        name:"二级导航1",
                        children:[
                            {
                                name:"三级导航",
                            }
                        ]
                    },
                    {
                        name:"二级导航2",
                        children:[
                            {
                                name:"三级导航"
                            },
                            {
                                name:"三级导航"
                            },
                            {
                                name:"三级导航"
                            }
                        ]
                    },
                ]
            },
            {
                name:"一级导航2",
                children:[
                    {
                        name:"二级导航1",
                        children:[
                            {
                                name:"三级导航",
                            }
                        ]
                    },
                    {
                        name:"二级导航2",
                        children:[
                            {
                                name:"三级导航",
                                children:[
                                    {
                                    name:"四级导航",
                                    children:[
                                       {name:"五级导航"},
                                       {name:"五级导航"},
                                       {name:"五级导航"},
                                    ]
                                    },
                                    {
                                    name:"四级导航"
                                    } 
                                ]
                            },
                            {
                                name:"三级导航"
                            },
                            {
                                name:"三级导航"
                            }
                        ]
                    },
                ]
            }
        ];

          




        let  timer;//执行一次

        //js获取大导航
        let bigNavi=document.getElementById("bigNavigation");
        
        // 渲染ul 参数解释(arr:导航数据,element:UL导航顶级标签,pCssNum:指定css的数字,navigationArr:数组保存自定义的css样式)
        function  appendHtml(arr,element,pCssNum,navigationArr){
            //cssNum 代表导航级数
            let  cssNum=0;
            if(pCssNum)  cssNum = pCssNum;
            let cssName=navigationArr[cssNum];
            cssNum++; 

            for(let i=0;i<arr.length;i++){
                // 添加li 标签
                var  uli=document.createElement("li");
                uli.innerText=arr[i].name;
                uli.className=cssName;
                // 体现层级感
                if(arr[i].marginLeft){
                    initCss(uli);
                }
                element.appendChild(uli);
                // 监听元素的点击事件
                uli.onclick=function(event){
                        //阻止冒泡机制,阻止子元素事件向父元素触发
                        event.stopPropagation();
                        if(this.children && this.children.length){
                            
                            // 子元素扩展,父元素也要扩展
                            let  h=0;
                            let f=arr[i].flag;
                            for(let j=0;j<this.children.length;j++){ 
                                if(!f){
                                   this.children[j].style.height="50px";
                                }else{
                                    //子和孙子节点全部为0px
                                    let cna=childNodeAll(this);
                                    for(let k=0;k<cna.length;k++){
                                        cna[k].style.height="0px";
                                    }  
                                }
                                // 最后一次更改闭合状态
                                if(j == this.children.length-1){
                                    arr[i].flag=!f;
                                    //传递子数组
                                    arrFlagFalse(arr[i].children)
                                }
                            }
                        
                            if(this.parentNode.tagName != "UL"){
                                //根据自己子列改变自身高度
                                listener(this);
                            }
                        }
                }

                if(arr[i].children){
                    //有子类
                    arr[i].flag=false;//表示闭合状态
                    arr[i].children.forEach(item => {
                        item.marginLeft=1;
                    });
                   
                    appendHtml(arr[i].children,uli,cssNum,navigationArr);
                }
            }
           
        }
       

          

         //核心
          // 导航样式集合样式集合(你的导航有几个就填几个)
          let navigationArr=['navigationOne','navigationTwo','navigationThree','navigationFour','navigationFour'];
          //初始化导航
          appendHtml(arrays,bigNavi,0,navigationArr);


      
    }

    
    //元素初始化样式
    function  initCss(element){
        //基础设置
        element.style.overflow="hidden";
        element.style.transition="height 0.5s";
        element.style.height="0px";
        // 行高
        element.style.lineHeight='50px';
    }

    //获取所有子节点包括孙子节点
    function childNodeAll(element,nodes){
        let nodeAll=[];
        if(nodes) nodeAll=nodes;
        if(element.children && element.children.length){
           for(let i=0;i<element.children.length;i++){
             nodeAll.push(element.children[i]);
             childNodeAll(element.children[i],nodeAll);
           }
        }
        return nodeAll;
    }


    // 多级:监控子类高度变化 (默认高度20px)
    function  listener(event){
        if(!event) return;
        if(event.tagName == 'UL' || event.parentNode.tagName == 'UL' ) return
        if(event && event.children &&  event.children.length){
            //逻辑 我加上子标签的高度
            let itself=50; 
            for(let i=0; i< event.children.length;i++){
                itself+=parseInt(event.children[i].style.height);
            }
            event.style.height=`${itself}px`
        }
        listener(event.parentNode);
    }


    //如果关闭的是父级的父级,全都变成 false (合并状态)
    function arrFlagFalse(arrChildren) {
        if(!arrChildren) return;
        for(let i=0;i<arrChildren.length;i++){
            arrChildren[i].flag=false;
            arrFlagFalse(arrChildren[i].children)
        }
       
    }
</script>
</html>

css部分

body{
    background-color:#CCFFFF;
    margin: 0px;
}


.continer{
    font-family: 'KaiTi', Courier, monospace;
    font-size: 1rem;
}


.continer div{
    position: absolute;
    border :1px solid rebeccapurple;
    
}



.continer .title{
    left: 0;
    top: 0;
    width: 13%;
    height: 10%;
}

/* 头块 */
.continer .top{
    left: 13%;
    top: 0;
    width: 86.86%;
    height: 10%;
}
/* 左侧导航栏 */
.continer .left{
    left: 0;
    top: 10%;
    width: 12.1%;
    height: 86.7%;
    padding: .7rem  0  .7rem  .7rem ;
    overflow: hidden;
    
}

.continer .left  .middleman {
    width: 90%;
    height:95%;
    overflow: auto;
}
/* 作用隐藏滚动条 适用于 Chrome Safari 浏览器  */
.continer .left  .middleman::-webkit-scrollbar{
    display: none;
}
.continer .left  .middleman  .hrefs{
    width: 90%;
    border: 1px solid red;
    
}
.continer .left  .middleman .hrefs ul{
    margin: 0px;
    padding: 0px;
    list-style-type: none;
}


/* .continer .left .hrefs ul li :hover{ 
    background-color: aqua;
} */


.continer .main{
    left: 13%;
    top: 10%;
    width: 86.86%;
    height: 89.7%;
}
.continer .main iframe{
    width: 99.6%;
    height: 99.6%;
}


/* 导航样式 */
/* 导航高度不要再css样式中添加,会被style覆盖 */
.navigationOne{
    background-color: red;
    font-size: 22px;
    text-align: left;
    line-height: 50px;
}
.navigationTwo{
    background-color: rgb(0, 17, 255);
    font-size: 19px;
    text-align: center;
    
   
}
.navigationThree{
    background-color: rgb(0, 255, 213);
    font-size: 15px;
}

.navigationFour{
    background-color: rgb(187, 26, 152);
    font-size: 13px;
}


注意:程序中没提供更改高度的方式,可以自行更改。
铭记:时刻保持一个学习的心。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js导航制作(纯js,带有隐藏和显示的滑动效果) 的相关文章

  • HBase Java Api

    任务目标 1 了解HBase语言的基本语法 2 了解HBase开发的原理 3 了解HBase Java API的使用 相关知识 HBase与Hadoop一样 xff0c 都是用Java编写的 xff0c 所以HBase对Java支持是必须的
  • 浅谈jQuery属性获取

    浅谈jQuery的属性获取 基本标签设置与基本css xff0c 附图下所示 上述代码如下图 xff1a 一 js的一些属性获取 1 var div 61 document getElementById first 这时候找到第一个div
  • 使用RGB-D摄像机的机器人目标跟踪和避障控制设计

    Control Design for Robotic Human Following and Obstacle Avoidance Using an RGB D Camera 摘要1 介绍2 系统总体架构3 算法介绍3 1 用户识别和定位3
  • Linux网络编程之PHP聊天室Workerman-chat

    云服务器上搭建 34 PHP聊天室框架 34 一 简介 xff1a 在服务器上搭建PHP聊天室框架 workerman chat 具体步骤 1 准备云服务器 购买阿里云服务器 可选购买其他云服务器 xff0c 如 xff1a 腾讯云 华为云
  • keil 下载安装 保姆级教程

    一 前言 最近被安排开发一个单片机的项目 xff0c 回头想了一下 xff0c 自己上次弄单片机的时候 xff0c 还都是在大学期间 xff0c 到现在也有三四年没有碰过了 xff0c 大部分的知识点都忘了 xff0c 所以又重新的把以前的
  • 从CSDN博客下载的图片如何无损去水印

    如果你想下载别人CSDN博客文章中很好看的图片 xff0c 但却有水印 想要下载去水印的图片 xff0c 可以先鼠标右击该图片 xff0c 选择复制图片地址 https img blog csdnimg cn 202009161408079
  • 不要再使用 Gitee 当图床了,官方已经开启防盗链了

    如果你正在使用或打算使用 Gitee 作为图床 xff0c 那么请不要这么做或打消该念头 近日 xff0c Gitee 官方已经开启防盗链 正在使用 Gitee 当图床的小伙伴或许已经发现所有的图片都已经变成了 Gitee 的 Logo 了
  • 基于BP神经网络的人脸朝向识别

    一 数字图像处理 1 1 问题假设 所给的全部人脸图像都未出现损坏等问题 xff1b 人脸的朝向仅分为5类 xff1a 左 中左 中间 中右 右 xff0c 其他朝向不予考虑 xff1b 对于题目中所给的人脸图像 xff0c 不考虑人脸的复
  • ::在c++中的意思

    在c 43 43 中 一 作用域符号 xff1a xff1a 前面是类名称 xff0c 后面一般是该类的成员名称 例类A中包含member1 A member1 二 全局作用域符号 用于区分全局变量和局部变量 xff1a xff1a cha
  • linux下cannot execute binary file: Exec format error解决办法

    对于linux下cannot execute binary file Exec format error明确说明是执行文件格式错误 xff0c 可能情况 xff1a 1 使用错误的命令 xff0c 如gcc c hello c o hell
  • PX4/Pixhawk---uORB深入理解和应用(最新版)

    1 简介 ps 第1章简介是参考 uORB深入理解和应用 1 1 PX4 Pixhawk的软件体系结构 PX4 Pixhawk的软件体系结构主要被分为四个层次 xff0c 这可以让我们更好的理解PX4 Pixhawk的软件架构和运作 xff
  • 深拷贝和浅拷贝的区别

    1 简单理解 深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体 xff0c 而不是引用 假设B复制了A xff0c 修改A的时候 xff0c 看B是否发生变化 xff1a 如果B跟着也变了 xff0c 说明是浅拷贝 xff0c
  • Linux系统下搭建PX4/Pixhawk原生固件编译环境

    对于新版本的固件V1 11 3 在pixhawk官网可以找到开发环境的搭建 xff0c 这里把开发环境链接贴出来 xff1a https docs px4 io master zh dev setup dev env linux ubunt
  • Pixhawk无人机飞行模式详解 (PX4源码)

    我帮大家把飞行模式控制量与特点总结一下 xff0c 方便看代码 xff0c 如下所示 xff1a 辅助模式 Position Mode 位置模式 xff08 定点模式 xff09 横滚俯仰控制角度 xff0c 油门控制上下速度 xff0c
  • pixhawk无人机避障

    本人最近用树莓派结合PX4做无人机避障 xff0c 使用激光雷达 xff0c 有没有一起的小伙伴 xff0c 我们一起交流 xff01 私信我 xff0c
  • 目录前导符不一致解决办法

    最近弄毕业设计 xff0c 写完论文以后发现生成的目录后面的前导码省略号数目 间距不一致 xff0c 非常的难看 xff0c 于是经过仔细研究找到了解决办法 xff1a 首先是问题所在 xff0c 请看下图 xff1a 首先在word中打开
  • 几种编码方式(RZ、NRZ、NRZI、曼彻斯特编码)

    在数字电路中 xff0c 组成一连串信息的基元就是0和1 xff0c 无论是在CPU DSP MCU甚至是个数字计数器中 xff0c 数字电路在其中能够处理的信息也只有0和1 xff0c 而对于任何外界的信息 xff0c 计算机都能通过两个
  • WIN10运行软件,窗口不显示 解决办法

    win10 运行软件后 xff0c 不显示窗口 今天遇到个问题 xff0c 我打开软碟通之后 xff0c 任务栏显示它已经打开了 xff0c 但是窗口就是不显示 xff0c 如下图 xff1a 用alt 43 tab 查看 xff0c 也能
  • 变频器的四大组成部分和工作原理

    随着电子技的发展变频器已经有了很大的变化 xff0c 但其基本原理并没有发生改变 变频器的主要部分有四个 xff1a 整流器 中间电路 逆变器 控制电路 1 xff09 整流器 通用变频器的整流电路是由三相桥式整流桥组成 它的功能是将工频电
  • Pytorch中torch的操作合集

    tensor的基本操作 PyTorch系例 torch Tensor详解和常用操作 这里最重要的概念是索引出来的结果与原数据共享内存 xff0c 也即修改一个 xff0c 另一个也会跟着修改 tensor的广播机制 Pytorch xff1

随机推荐

  • torch.tensor 内存共享机制

    tensor属于可变数据类型 xff0c 因此变量的值存储在堆中 xff0c 变量名存储在栈中 xff0c 当进行变量赋值时 xff0c 就是让栈中的变量指向堆 xff0c 如下面代码 xff1a span class token keyw
  • 熵 KL散度 交叉熵的理解

    熵 KL散度 交叉熵的概念 xff1a 理解二分类交叉熵 可视化的方法解释对数损失交叉熵公式推导 xff1a 理解交叉熵作为损失函数在神经网络中的作用熵 KL散度 交叉熵的关系 xff1a KL散度与交叉熵区别与联系训练过程中三者的应用 x
  • Docker数据目录迁移解决方案

    介绍 在docker的使用中随着下载镜像越来越多 xff0c 构建镜像 运行容器越来越多 数据目录必然会逐渐增大 xff1b 当所有docker镜像 容器对磁盘的使用达到上限时 xff0c 就需要对数据目录进行迁移 如何避免 xff1a 1
  • Git 三剑客 ———— git gui 可视化工具

    目录 页面介绍Unstaged changesStaged Changes xff08 Will Commit xff09 File DisplayCommand Set Repository 操作区Edit 操作区Branch 操作区Co
  • 数组对象转json格式

    1 数组转化成JSON对象后 xff0c key值是索引 xff0c value是数组对应的值 数组也可以转化成JSON对象 var jStr3 61 34 10 20 30 40 50 60 34 var j3 61 JSON parse
  • JS——DOM的结点操作

    H5自定义属性 自定义属性目的 目的 xff1a 是为了保存并且使用数据 有些数据可以把保存到页面中而不用保存到数据库 可以通过getAttribute获取 自定义属性 xff1a data 开头 这是一种规范 dataset xff1a
  • SecureCRT连接Linux

    在将SecureCRT连接Linux上时遇到一些问题 xff0c 记录如下 第一步 xff0c 我们要在在linux上安装openssh server服务 xff0c 并确认打开了22监听端口 在linux上操作命令如下 xff1a apt
  • Linux下添加虚拟串口,接收和发送数据

    之前写的那虚拟串口有点问题 xff0c 只能读取 xff0c 不能接收 今天再来改一下 将python的内容改为如下 xff1a 先新建一个文档 xff0c 内容如下 usr bin env python coding 61 utf 8 i
  • fatal: The remote end hung up unexpectedly解决办法

    今天在写完代码后 xff0c 准备提交到GitHub上 xff0c 结果得到了下面的结果 xff0c 记录一下 百度了之后 xff0c 发现大部分是有两种说法 一种是说提交的文件太大 xff0c 解决办法如下 link 一种是说管理员将项目
  • 简单了解几种常见的网络通信协议

    常见的网络协议有 TCP IP协议 UDP协议 HTTP协议 FTP协议 Telnet协议 SMTP协议 NFS协议等 这里主要简述一下前三种协议 一 TCP IP协议 1 什么是TCP IP协议 xff1f TCP IP传输协议 xff0
  • 路径规划算法总结

    路径规划算法 1 Dijkstra算法 从物体所在的初始点开始 xff0c 访问图中的结点 迭代检查 待检查节点集中的节点 xff0c 该节点从初始节点向外扩展 xff0c 直到达到目标节点 xff0c 该算法能够保证找到一条从初始点到目标
  • chmod +x 与chmod 777 的超详细解说

    在linux中使用man命令查看chmod的大纲我们可以得出以下有用的信息 xff1a chmod OPTION MODE MODE FILE chmod OPTION OCTAL MODE FILE chmod OPTION refere
  • 无线路由模块有什么作用?MT76X8系列方案在工业物联网模块中的应用

    说起WiFi路由模块 xff0c 或许有像小编在接触物联网之前一样 xff0c 会想到这是用在路由器产品上的 xff0c 是上网用的 小编在加入bojingnet后 xff0c 接触到物联网WiFi方案定制的各种知识耳濡目染 xff0c 也
  • (深蓝学院)多传感器融合定位作业1

    1 作业描述 请搭好代码环境 xff0c 下载数据集并播放数据集 xff0c 在 rviz 上显示点云 2 数据集下载 Kitti 数据集 xff08 bag xff09 3 实现步骤 3 1 环境搭建 VirtualBox 虚拟机安装 U
  • SLAM--intel realsense2在ORB SLAM2 和 ORB SLAM3下建图和重定位(ubuntu 20.04, opencv 4.2.0 以上)

    用intel 的realsense相机实现orb slam2 和 orb slam3 ubuntu 20 04系统 链接地址 ORB SLAM2 可建图 xff0c github https github com zouyuelin ORB
  • QGC常见故障处理思路图

  • JAVA语言使用的前提,JDK安装,环境变量配置以及简单使用(带图解)。

    JAVA语言使用的前提 xff0c JDK安装 xff0c 环境变量配置以及简单使用 xff08 带图解 xff09 想要使用java语言 xff0c 肯定要先给自己的电脑上安装一个Java语言的翻译官 1 首先我们要下载JDK xff08
  • eclipse工具下载与安装(带图片)

    eclipse工具下载与安装 eclipse官网下载 直接上图 1 1 1 2 1 3 1 4 1 5 1 6 2 1 下载完之后解压到D盘的文件夹中即可 xff0c 解压完成后找到eclipse exe 应用程序 双击运行 2 2 选择文
  • Collection集合(集合概念的简单理解及数据结构的简单理解)

    Collection集合 xff08 简单理解 xff09 Collection接口 xff1a 是单列集合最顶层的接口 定义了所有单列集合中的共性方法 xff0c 但是里面没有带索引 xff08 下标 xff09 的方法 List 接口
  • js导航制作(纯js,带有隐藏和显示的滑动效果)

    简介 xff1a 纯js制作导航 xff0c 此导航只需要关系 appendHtml arrays bigNavi 0 navigationArr 函数的使用即可 下面代码粘贴到本地即可使用 HTML span class token op