JavaScript模拟实现新浪下拉菜单效果

思考:首先在CSS布局上就出错了,导致后面设置JS时就有很大的问题

<!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>Document</title>
    <style>
        .nav {
            background-color: rgb(235, 225, 225);
            line-height: 30px;
            height: 30px;
            position: relative;
        }

        ul {
            margin: 0px 0px;
            padding: 0 0 0 0;
        }

        .nav1 li,
        .nav2 li,
        .nav3 li {
            display: block;
            padding-left: 10px;
            height: 20px;
            padding-top: 5px;
            padding-bottom: 5px;
            border: 1px solid orange;
            margin-top: -1px;
        }

        .nav1,
        .nav2,
        .nav3 {
            display: none
        }

        .nav1 {
            background-color: white;
            width: 80px;
            position: absolute;
            top: 0px;
            left: 0px
        }

        .nav2 {
            background-color: white;
            width: 100px;
            position: absolute;
            top: 0px;
            left: 80px
        }

        .nav3 {
            background-color: white;
            width: 120px;
            position: absolute;
            top: 0px;
            left: 160px
        }

        .nav div {
            width: 80px;
            text-align: center;
            line-height: 30px;
            float: left
        }

        .tort {
            position: relative;
            left: 0px
        }

        .se {
            background-color: rgb(201, 192, 192);
            color: orange
        }

        ul li:hover {
            background-color: orange;
        }
    </style>
</head>

<body>
    <div class="nav">
        <div>微博</div>
        <div>博客</div>
        <div>邮箱</div>
    </div>
    <div class="tort">
        <div class="nav1">
            <ul>
                <li>私信</li>
                <li>评论</li>
                <li>@我</li>
            </ul>
        </div>
        <div class="nav2">
            <ul>
                <li>博客评论</li>
                <li>未读提醒</li>
            </ul>
        </div>
        <div class="nav3">
            <ul>
                <li>免费邮箱</li>
                <li>VIP邮箱</li>
                <li>企业邮箱</li>
                <li>新浪客户邮箱</li>
            </ul>
        </div>
    </div>
    <script>
        //获得导航栏元素
        var nav = document.querySelector('.nav')
            //注册下拉事件点击的时候,对应的下拉菜单就是显示的(一一对应)因此需要索引号
            //给na.children即下面的所有li设置自定义属性
            //用不着,因为下面下拉菜单都进行了分别命名,但这样就不能用循环了
        nav.children[0].setAttribute('data-index', '0')
        nav.children[1].setAttribute('data-index', '1')
        nav.children[2].setAttribute('data-index', '2')
        var nav1 = document.querySelector('.nav1')
        var nav2 = document.querySelector('.nav2')
        var nav3 = document.querySelector('.nav3')
            //获取下拉菜单子元素
            //应该用data-index来获取
            // var tort = document.querySelector('.tort')
            // nav1.setAttribute('data-idn', '0')
            // nav2.setAttribute('data-idn', '1')
            // nav3.setAttribute('data-idn', '2')

        // var nn =
        // console.log(nn)
        //添加事件
        for (var i = 0; i < nav.children.length; i++) {
            nav.children[i].onmouseover = function() {
                this.className = 'se'
            }
            nav.children[i].onmouseout = function() {
                    this.className = ''
                }
                //添加下拉菜单显示属性

        }
        // nav.children[0].onmouseover = function() {
        //     nav1.style.display = 'block'
        //     nav2.style.display = ''
        //     nav3.style.display = ''
        // }
        // nav.children[1].onmouseover = function() {
        //     nav2.style.display = 'block'
        //     nav1.style.display = ''
        //     nav3.style.display = ''
        // }
        // nav.children[2].onmouseover = function() {
        //     nav3.style.display = 'block'
        //     nav2.style.display = ''
        //     nav1.style.display = ''
        // }
    </script>

</body>

</html>

导航栏里面的li都要有鼠标经过的效果,所以需要循环注册事件

<!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>Document</title>
    <style>
        .nav li {
            list-style: none;
        }

        .nav>li>a:hover {
            background-color: #eee;
        }

        .nav ul {
            display: block;
            position: absolute;
            top: 41px;
            left: 0px;
            width: 100%;
            border-left: 1px solid #fecc5b;
            border-right: 1px solid #fecc5b
        }

        .nav ul li {
            border-bottom: 1px solid #fecc5b;
        }

        .nav ul li a:hover {
            background-color: #fff5da;
        }

        .m1 {
            position: absolute;
            top: 0px;
            left: 0px;
        }

        .m1 {
            position: absolute;
            top: 0px;
            left: 20px;
        }
    </style>
</head>

<body>
    <ul class="nav">
        <li>
            <a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >微博</a>
            <ul class="m1">
                <li><a href="">私信</a>
                </li>
                <li><a href="">评论</a></li>
                <li><a href="">@我</a></li>

            </ul>
        </li>
        <li>
            <a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >微博</a>
            <ul>
                <li><a href="">私信</a>
                </li>
                <li><a href="">评论</a></li>
                <li><a href="">@我</a></li>
            </ul>
        </li>
        <li>
            <a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >微博</a>
            <ul class="m1">
                <li><a href="">私信</a>
                </li>
                <li><a href="">评论</a></li>
                <li><a href="">@我</a></li>
            </ul>
        </li>
        <li>
            <a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >微博</a>
            <ul>
                <li><a href="">私信</a>
                </li>
                <li><a href="">评论</a></li>
                <li><a href="">@我</a></li>
            </ul>
        </li>
    </ul>
    <script>
        //获取元素
        var nav = document.querySelector('.nav')
        var lis = nav.children
            //循环注册事件
        for (var i = 0; i < lis.length; i++) {
            lis[i].onmouseover = function() {
                this.children[1].style.display = 'block'

            }
            lis[i].onmouseout = function() {
                this.children[1].style.display = ''

            }
        }
    </script>
</body>

</html>

未完成

注意用节点的方式获取元素

总归是完成了,对于js设置的时候,不太合理。

<!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>Document</title>
    <style>
        li {
            list-style: none;
            height: 20px;
            line-height: 20px;
        }

        a {
            text-decoration: none;
            color: black
        }

        .nav0,
        .nav1,
        .nav2 {
            position: relative;
            width: 80px;
            height: 82px;
            padding-left: 0px;
            float: left
        }

        .nav0>li,
        .nav1>li,
        .nav2>li {
            background-color: rgb(221, 216, 216);
            text-align: center;
        }

        .navv0,
        .navv1,
        .navv2 {
            position: absolute;
            top: 20px;
            left: 0px;
            border-top: 0px;
            padding-left: 0px;
            width: 80px;
            margin-top: -1px;
            display: none
        }

        .navv1 {
            width: 100px
        }

        .navv2 {
            width: 120px
        }

        .navv0 li,
        .navv1 li,
        .navv2 li {
            border-bottom: 1px solid orange;
            border-left: 1px solid orange;
            border-right: 1px solid rgb(240, 169, 28);
            padding-left: 5px
        }

        li:hover a {
            /* 注意改变的是链接里面的文字颜色 */
            color: orange
        }

        .nav0>li:hover,
        .nav1>li:hover,
        .nav2>li:hover {
            /* 冒号hover前面不要加空格 */
            background-color: rgb(138, 129, 129);
        }

        .navv0>li:hover,
        .navv1>li:hover,
        .navv2>li:hover {
            /* 冒号hover前面不要加空格 */
            background-color: rgb(236, 232, 203);
        }
    </style>
</head>

<body>

    <ul class="nav0">
        <li><a href="">微博</a></li>
        <ul class="navv0">
            <li><a href="">私信</a></li>
            <li><a href="">评论</a></li>
            <li><a href="">@我</a></li>
        </ul>
    </ul>
    <ul class="nav1">
        <li><a href="">博客</a></li>
        <ul class="navv1">
            <li><a href="">博客评论</a></li>
            <li><a href="">未读提醒</a></li>

        </ul>
    </ul>
    <ul class="nav2">
        <li><a href="">邮箱</a></li>
        <ul class="navv2">
            <li><a href="">免费邮箱</a></li>
            <li><a href="">VIP邮箱</a></li>
            <li><a href="">企业邮箱</a></li>
            <li><a href="">新浪客户邮箱</a></li>

        </ul>
    </ul>
    <script>
        //鼠标放在第一个大的nav中时,下拉栏就显示,离开第一个大nav时后,下拉菜单就不显示,这需要对第一个nav的盒子大小有要求,需要刚好把内容
        //获取元素
        var nav0 = document.querySelector('.nav0')
        var navv0 = document.querySelector('.navv0')
            //这三部分一起使用才行,首先鼠标放在nav里面的第一个导航栏里面,下来菜单需要出现,鼠标点在第一个下拉菜单时候,要保持出现,当鼠标离开整个nav的时候,下拉菜单隐藏
        nav0.children[0].onmouseover = function() {
            navv0.style.display = 'block'
                // this.style.backgroundColor = 'rgb(211,211,211)' //没必要这样写,直接写hover属性即可
                // this.style.color = 'red'

        }
        navv0.onmouseover = function() {
            navv0.style.display = 'block'
                // nav0.children[0].style.backgroundColor = 'rgb(211,211,211)'
        }
        nav0.onmouseout = function() {
                navv0.style.display = ''
                    // nav0.children[0].style.backgroundColor = 'rgb(221, 216, 216)'
            }
            // for (var i = 0; i < navv0.children; i++) {
            //     navv0.children[i].onmouseover = function() {
            //         console.log(11)
            //             // this.style.backgroundColor = 'orange'
            //     }
            // }

        var nav1 = document.querySelector('.nav1')
        var navv1 = document.querySelector('.navv1')
        nav1.children[0].onmouseover = function() {
            navv1.style.display = 'block'
                // this.style.backgroundColor = 'rgb(211,211,211)'

        }
        navv1.onmouseover = function() {
            navv1.style.display = 'block'
                // nav1.children[0].style.backgroundColor = 'rgb(211,211,211)'
        }
        nav1.onmouseout = function() {
            navv1.style.display = ''
                // nav1.children[0].style.backgroundColor = 'rgb(221, 216, 216)'
        }

        var nav2 = document.querySelector('.nav2')
        var navv2 = document.querySelector('.navv2')
        nav2.children[0].onmouseover = function() {
            navv2.style.display = 'block'
                // this.style.backgroundColor = 'rgb(211,211,211)'

        }
        navv2.onmouseover = function() {
            navv2.style.display = 'block'
                // nav1.children[0].style.backgroundColor = 'rgb(211,211,211)'
        }
        nav2.onmouseout = function() {
            navv2.style.display = ''
                // nav1.children[0].style.backgroundColor = 'rgb(221, 216, 216)'
        }
    </script>
</body>

</html>

到此这篇关于JavaScript模拟实现新浪下拉菜单效果的文章就介绍到这了,更多相关JavaScript下拉菜单内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 原生JS实现悬停下拉菜单

    JS实现悬停下拉菜单,这个是前端面试中遇到的场景题,原理就是修改菜单样式的display属性的属性值从none=>block,具体实现见下,重点关注下面几个部分. 给每个section设置浮动. 将可继承属性设置在section父盒子上,字体相关的属性. 设置悬停时,悬停在section父盒子上,子元素head背景改变:也可以直接悬停在head类,写作`.head:hover`.但是会出现一个问题就是当鼠标悬停在li上的时候head会变回最初的样子,因此推荐将hover放在section上. 但

  • 原生js实现下拉菜单

    下拉菜单在实际生活中也挺常见的,它实现的js代码与tab选卡,手风琴几乎一样,在此不过多赘述. 我仿照苏宁易购官网写了一个下拉菜单,实现代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initi

  • Javascript仿新浪游戏频道鼠标悬停显示子菜单效果

    本文实例讲述了Javascript仿新浪游戏频道鼠标悬停显示子菜单效果,分享给大家供大家参考.具体如下: 这里演示使用JS实现的网页栏目分类菜单,从新浪游戏频道扣下来的,操作方式类似于滑动门的效果,鼠标无需点击,只需把鼠标放在一级主菜单上,就可显示出二级分类菜单,这弹出的这个二级菜单中,实际上又重新进行了分类,可以说整体上,这是一款支持三级分类的网站菜单,目前新浪游戏还在用的效果哦. 先来看运行效果截图: 在线演示地址如下: http://demo.jb51.net/js/2015/js-gam

  • javascript实现下拉菜单效果

    用Javascript实现下拉菜单,供大家参考,具体内容如下 正在学习大前端中,有代码和思路不规范不正确的地方往多多包涵,感谢指教 下拉菜单,或者侧拉菜单在实际开发当中非常的实用 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{ padd

  • JavaScript实现下拉菜单的显示隐藏

    本文实例为大家分享了JavaScript实现下拉菜单显示隐藏的具体代码,供大家参考,具体内容如下 有时需要这种页面效果: 鼠标移动到元素上面时,实现下拉菜单 鼠标移开元素后,下拉菜单不见了 实现思路 1.一个盒子里包含上下两部分,下面部分为子菜单,先设置为隐藏:display: none; 2.当鼠标移动到盒子上:触发事件- - -onmouseover ,js设置下面部分子菜单的display值为- - -block,使子菜单显示 3.鼠标移开盒子:触发事件- - -onmouseout ,j

  • JS实现新浪博客左侧的Blog管理菜单效果代码

    本文实例讲述了JS实现新浪博客左侧的Blog管理菜单效果代码.分享给大家供大家参考,具体如下: 这里介绍新浪博客左侧的Blog管理菜单,我们变通一下,如果你在设计程序,那么本款菜单用到后台管理中想必应该很合适吧,图片是调用新浪的,用了比较多的图片,你用的时候最好是下载到本地,以免新浪哪天改版了,你就傻了. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-sina-blog-left-menu-style-codes/ 具体代码如下: <ht

  • JavaScript模拟实现新浪下拉菜单效果

    思考:首先在CSS布局上就出错了,导致后面设置JS时就有很大的问题 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport"

  • JavaScript实现网页下拉菜单效果

    JavaScript(js)网页–下拉菜单制作 在网页的设计中,经常会出现二级下拉菜单,当鼠标经过时,显示二级菜单,鼠标离开时隐藏.例如新浪网 鼠标放到微博.博客或邮箱上面时,会出现一个二级菜单,鼠标离开则隐藏. 设计简单的下拉菜单栏 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewpor

  • js+CSS实现模拟华丽的select控件下拉菜单效果

    本文实例讲述了js+CSS实现模拟select控件的下拉菜单效果.分享给大家供大家参考.具体如下: 这是一个JS+CSS技术实现的Select控件效果,模拟出来的,比默认的Select更漂亮,有了这个模板,你修改Select就更方便了,由此你也可以将其制作成CSS下拉菜单,在兼容性方面暂未测试,在IE8下没问题. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-css-select-control-style-codes/ 具体代码如下:

  • JS模拟bootstrap下拉菜单效果实例

    本文实例讲述了JS模拟bootstrap下拉菜单效果.分享给大家供大家参考,具体如下: 模拟bootstrap下拉菜单 在工作中要切一个效果:点击导航栏,则出现下列菜单,但是当点击其他地方的时候,就隐藏子菜单,效果有点类似于bootstrap 的"下拉菜单" 由于bootstrap的子菜单的样式与设计不同,因此需要自己写一个类似的效果 当点击某个控件的时候,则显示出下拉菜单,但是,当点击空白的地方的时候怎么让其自动隐藏呢? 起初的想法,给body绑定一个onclick事件,当点击空白的

  • JavaScript实现非常简单实用的下拉菜单效果

    本文实例讲述了JavaScript实现非常简单实用的下拉菜单效果.分享给大家供大家参考.具体如下: 这是一款实用的JS下拉菜单,鼠标移上菜单就显示出二级菜单,是从其它网站上整理下来的,修改花了不少时间,现在去除了一些无用代码,更简洁了,而且代码兼容性似乎也表现不错,这款两级下拉菜单,基本是由CSS和JavaScript共同实现的,真的挺简洁实用. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-css-down-show-menu-code

  • JavaScript实现带箭头标识的多级下拉菜单效果

    本文实例讲述了JavaScript实现带箭头标识的多级下拉菜单效果.分享给大家供大家参考.具体如下: 这是一个支持多级显示的JS菜单,鼠标移向带有小三角的菜单项,可下拉出二级子菜单项,在该主菜单的上方会显示标记,指引当前的位置,本菜单代码使用了一个JS类,可根据代码地址自行下载,这个菜单未在网上测试,用在自己的网站里可能要修改代码. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-focus-m-select-menu-nav-codes/

  • JavaScript实现HTML导航栏下拉菜单

    JavaScript实现HTML导航栏下拉菜单[悬浮显示] 前端界面进行设计时,我们会遇到鼠标悬浮在某选项上,然后就会凭空显示出菜单出来,这种设计的确受到了很多人的青睐.其实纯css也是可以实现的,但是会有一些限制,必须如要显示的菜单需要作为鼠标悬浮元素的子元素,选择器优先级等等.废话不多说,直接看效果! 样式有点丑. 代码实现(JavaScript) 1.获取要悬浮的对象和菜单对象 //获取需要悬浮的对象 let show = document.getElementById("show&quo

  • HTML+CSS+JavaScript实现下拉菜单效果

    本文实例为大家分享了HTML+CSS+JavaScript实现下拉菜单效果的具体代码,供大家参考,具体内容如下 实现思路: HTML 方面,导航栏的每个 <li> 元素里面包含 <a> 和 <ul> ,将 <li> 设置为相对定位, 将 <ul> 设置为绝对定位,并将 <ul> 的 display 属性设置为 none .通过 js 给导航栏的每个 <li> 添加事件监听器,当鼠标覆盖 <li> 时,令 <

  • jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码

    本文实例讲述了jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码.分享给大家供大家参考.具体如下: 这里介绍的是一款黑红带渐变的网站下滑导航菜单,基于jquery实现的下滑线导航菜单,鼠标经过主菜单的时候,下滑线就会自动跟向哪里,如果该菜单有两级子菜单,则同样会显示下滑菜单,带渐变效果.菜单操作很灵敏,使用有自定义的封装插件SuperSlide.2.1.js,所在使用时请自行下载这个JS插件. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015

  • jquery实现简单的二级导航下拉菜单效果

    本文实例讲述了jquery实现简单的二级导航下拉菜单效果.分享给大家供大家参考.具体如下: jQuery代码实现的二级导航菜单效果,非常简洁,喜欢简洁风格的朋友您可以下载哦.菜单最多支持两级,CSS的配合也是挺重要的,不多说了,要代码的就直接复制吧. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-2jxl-menu-codes/ 具体代码如下: <title>jquery二级导航菜单</title> <styl

随机推荐