返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript模拟实现新浪下拉菜单效果
  • 755
分享到

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

2024-04-02 19:04:59 755人浏览 泡泡鱼
摘要

思考:首先在CSS布局上就出错了,导致后面设置js时就有很大的问题 <!DOCTYPE html> <html lang="en"> <head&

思考:首先在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 {
            
            background-color: rgb(138, 129, 129);
        }
        
        .navv0>li:hover,
        .navv1>li:hover,
        .navv2>li: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下拉菜单内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript模拟实现新浪下拉菜单效果

本文链接: https://lsjlt.com/news/141866.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript模拟实现新浪下拉菜单效果
    思考:首先在CSS布局上就出错了,导致后面设置JS时就有很大的问题 <!DOCTYPE html> <html lang="en"> <head&...
    99+
    2024-04-02
  • HTML+JS模拟实现QQ下拉菜单效果
    功能: 1、点击我的好友会展开下拉出具体的好友 2、再次点击,会折叠内容 3、首次点击某个具体的好友,只有当前这个好友高亮 4、再次点击这个好友时,高亮状态就会消失 主要练习:js绑...
    99+
    2024-04-02
  • javascript实现简单下拉菜单效果
    本文实例为大家分享了 javascript实现简单下拉菜单的具体代码,供大家参考,具体内容如下 效果: 思路:比较复杂的是样式的编写,首先是ul里面含有3个li,每个li...
    99+
    2022-11-13
    js 下拉菜单
  • HTML+CSS+JavaScript实现下拉菜单效果
    本文实例为大家分享了HTML+CSS+JavaScript实现下拉菜单效果的具体代码,供大家参考,具体内容如下 实现思路: HTML 方面,导航栏的每个 <li> 元素里...
    99+
    2024-04-02
  • vue实现下拉菜单效果
    本文实例为大家分享了vue实现下拉菜单效果的具体代码,供大家参考,具体内容如下 下拉菜单主要运用了hover显示与隐藏以及定位的问题 效果图: 可能出现的问题 定位后菜单的div无...
    99+
    2024-04-02
  • CSS3如何模拟动画下拉菜单效果
    这篇文章主要为大家展示了“CSS3如何模拟动画下拉菜单效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS3如何模拟动画下拉菜单效果”这篇文章吧。下拉菜单模...
    99+
    2024-04-02
  • jquery实现简单下拉菜单效果
    本文用简单的几行jquery代码实现简单的下拉菜单效果,供大家参考,具体内容如下 看效果 html <ul>     <li>       主题市场    ...
    99+
    2024-04-02
  • Android实现下拉菜单Spinner效果
    Android 中下拉菜单,即如html中的<select>,关键在于调用setDropDownViewResource方法,以XML的方式定义下拉菜单要显示的模样...
    99+
    2022-06-06
    spinner Android
  • js如何实现下拉菜单效果
    这篇文章将为大家详细讲解有关js如何实现下拉菜单效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果图:代码如下:<!DOCTYPE html> ...
    99+
    2024-04-02
  • jQuery实现下拉菜单滑动效果
    当我们制作网页时,有的时候会想拥有一个酷炫且顺滑的下拉菜单,虽然我们使用最基础的css和js也可以完成,但利用jQuery我们只需要非常简短的代码即可完成下面的效果 是不是非常的顺...
    99+
    2024-04-02
  • css3如何实现下拉菜单效果
    本文小编为大家详细介绍“css3如何实现下拉菜单效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“css3如何实现下拉菜单效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。首先来看核心的HTML片断代码:<...
    99+
    2023-07-04
  • 怎么使用HTML+CSS+JavaScript实现下拉菜单效果
    今天小编给大家分享一下怎么使用HTML+CSS+JavaScript实现下拉菜单效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2023-07-02
  • jquery怎么实现简单下拉菜单效果
    本文小编为大家详细介绍“jquery怎么实现简单下拉菜单效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“jquery怎么实现简单下拉菜单效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。看效果html<...
    99+
    2023-06-30
  • HTML+CSS如何实现简单下拉菜单效果
    小编给大家分享一下HTML+CSS如何实现简单下拉菜单效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用Html+css实现简单的下拉菜单代码非常简单,需要的...
    99+
    2023-06-08
  • js如何实现省份下拉菜单效果
    这篇文章给大家分享的是有关js如何实现省份下拉菜单效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。2个下拉框,选择1级菜单后,2级菜单出现相应的备选项。如果没有选择则不能提交。...
    99+
    2024-04-02
  • bootstrap如何实现二级下拉菜单效果
    这篇文章将为大家详细讲解有关bootstrap如何实现二级下拉菜单效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下<!DOCTYPE htm...
    99+
    2024-04-02
  • CSS怎么实现灰色下拉菜单效果
    本篇内容介绍了“CSS怎么实现灰色下拉菜单效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!这是一款基于C...
    99+
    2024-04-02
  • jQuery怎么实现下拉菜单滑动效果
    这篇文章主要讲解了“jQuery怎么实现下拉菜单滑动效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“jQuery怎么实现下拉菜单滑动效果”吧!当我们制作网页时,有的时候会想拥有一个酷炫且顺...
    99+
    2023-06-20
  • AngularJS怎么实现service之select下拉菜单效果
    这篇文章主要介绍了AngularJS怎么实现service之select下拉菜单效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。示例代码&...
    99+
    2024-04-02
  • css3中怎么实现一个下拉菜单效果
    css3中怎么实现一个下拉菜单效果,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先来看核心的HTML片断代码:<nav> &...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作