zoukankan      html  css  js  c++  java
  • js 导航栏多项点击显示下拉菜单代码

    js 导航栏多项点击显示下拉菜单代码

    <!DOCTYPE html>
    <html>
    <head>
        <title>Dropdown</title>
        <!--<link rel="stylesheet" href="style.css">-->
        <!--<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>-->
        <!--<script src="js/jquery.min.js"></script>-->
        <meta charset="utf-8" />
        <style type="text/css">
            body {
                font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
            }
            ul {
                list-style-type: none;
                margin: 0;
                padding: 0;
                overflow: hidden;
                background-color: #333;
            }
            li {
                float: left;
            }
            li a, .dropbtn {
                display: inline-block;
                color: white;
                text-align: center;
                padding: 14px 16px;
                text-decoration: none;
            }
            li a:hover, .dropdown:hover .dropbtn {
                background-color: #1f75cf;
            }
            li.dropdown {
                display: inline-block;
            }
            .dropdown-content {
                display: none;
                position: absolute;
                background-color: #fafafa;
                min- 160px;
                box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
            }
            .dropdown-content a {
                color: black;
                padding: 12px 16px;
                text-decoration: none;
                display: block;
                text-align: left;
            }
            .dropdown-content a:hover {
                color: white;
                background-color: #1f75cf;
            }
            .show {
                display: block;
            }
        </style>
    </head>
    <body>
    <ul>
        <li class="dropdown">
            <a id="a" href="javascript:void(0)" class="dropbtn" onclick="showList(this)">标题 A</a>
            <div class="dropdown-content" id="dropdown-a">
                <a href="#">下拉 1</a>
                <a href="#">下拉 2</a>
                <a href="#">下拉 3</a>
            </div>
        </li>
        <li class="dropdown">
            <a id="b" href="javascript:void(0)" class="dropbtn" onclick="showList(this)">标题 B</a>
            <div class="dropdown-content" id="dropdown-b">
                <a href="#">下拉 1</a>
                <a href="#">下拉 2</a>
                <a href="#">下拉 3</a>
            </div>
        </li>
    </ul>
    <script type="text/javascript">
        function showList(o) {
            //1.把其他的二级ul都隐藏,
    //        hideList("dropdown-content" + o.id);
            //把其他的二级ul隐藏方式1
            hideList("dropdown-" + o.id);
            //把其他的二级ul隐藏方式2
    //        hideList('');
    
    
            //2.再切换自己的show。
    
    //        document.getElementById("dropdown-" + o.id).classList.toggle("show");
            var drop = document.getElementById("dropdown-" + o.id);
            if (drop.classList.contains('show')) {
                drop.classList.remove('show');
    //            alert("yichu");
            }else{
                drop.classList.add('show');
    //            alert("xianshi");
            }
        }
    
        //隐藏不是自己对应的下拉div。
        function hideList(option) {
            var dropdowns = document.getElementsByClassName("dropdown-content");
    
            for (var i = 0; i < dropdowns.length; i++) {
                var openDropdown = dropdowns[i];
                if (openDropdown.id != option) {
                    if (openDropdown.classList.contains('show')) {
                        openDropdown.classList.remove('show');
                    }
                }
            }
        }
       
    
    
        window.onclick = function(e) {
            if (!e.target.matches('.dropbtn')) {
                hideList("");
            }
        }
    </script>
    </body>
    
    </html>

    实现效果

    这里要实现的效果是,点击id为a的元素弹出dropdown-a的div元素,点击id为b的元素弹出dropdown-b的div元素。

    实现思路  (showList方法的实现过程)

    注意事项:这里有个设计点,每一个弹出的下拉div(有dropdown-*类的div)同时有id和class。class是为了方便使用for循环对他们操作,比如这里将他们进行隐藏。第二个是为了写css,每个下拉列表的css都是一样的。

    1.思路是使用js,获得所有的有dropdown-content类的元素。

    2.第二步有2种做法,如果没有强迫症的话就随便选一种就可以了。个人比较喜欢第二种。强迫症对于这2种如果不是很明白的话,可以使用上面的注释调的alert函数调试一下。选择第一种hidelist(“”),你会发现在执行第3步之前,所对应的dropdown-content永远是隐藏的,由隐藏切换到显示。所以你点击的时候,永远都是alert显示。这就是这2种做法的区别。

      2-1.先把所有的弹出层(dropdown-content)隐藏。函数hideList('');

      2-2.第二种就是,判断是否是点击的a链接所对应的那个dropdown-content,其余的全部隐藏。函数hideList("dropdown-" + o.id);

    3.最后一步就是使用toggle方法切换所对应dropdown-content元素的显示或隐藏状态。

    4.还有一个就是当下拉菜单展开的时候,点击窗体其他地方会把它隐藏的效果。跟模态框是一样的。代码在最后那几行。

    这里举个不生动的例子,假如是动物园的个体表演。有猴子,狮子,灰熊...,每次出来一个表演。便于理解showlist(“”)方法。这里举例的第二步是hidelist(“”)函数;

    1.表演还没开始,就先全部关起来。(全部隐藏起来)

    2.然后点名,让猴子表演。就把猴子的笼子打开。猴子就被大家看到了。(显示猴子)

    3.然后点名让狮子表演。(又一次的点击事件)

    4.全部隐藏

    5.展示狮子

    以此循环。。。

    转载于:https://www.cnblogs.com/mzzone/p/10994867.html

  • 相关阅读:
    IOS 开发 网络发展史(基础知识)
    加密详解
    IOS对接支付的流程
    App混合开发浅谈
    swift语法100
    2015年最新Android基础入门教程目录第二章:Android UI(User Interface)详解(已完结 40/40)
    2015年最新Android基础入门教程目录第一章:环境搭建与开发相关(已完结 10/10)
    Reactive开发
    tensorflow 安装
    Mask RCNN笔记
  • 原文地址:https://www.cnblogs.com/dabaixiong/p/12202424.html
Copyright © 2011-2022 走看看