分享

网页特效之下拉菜单

 学习妄长生 2019-12-04

思路:
通过:hover伪类或onmouseenter事件在鼠标经过时改变二级菜单的display
关键知识::hover伪类/onmouseenter
1.纯静态版
具体代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>下拉菜单</title>
  6.     <style type="text/css">
  7.         * {
  8.             margin: 0;
  9.             padding: 0;
  10.         }
  11.         ul {
  12.             list-style: none;
  13.         }
  14.         .clearfix:after{/*清除浮动*/
  15.             content: '';
  16.             clear: both;
  17.             display: block;
  18.         }
  19.         .box {
  20.             width: 240px;
  21.             margin: 100px auto;
  22.         }
  23.         .main {
  24.             background: url(images/bg.jpg);
  25.             height: 21px;
  26.         }
  27.         .main li{
  28.             float: left;
  29.             margin-left: 4px;
  30.             background: url(images/libg.jpg) no-repeat;
  31.             position: relative;
  32.         }
  33.         .main li:hover ul{
  34.             display: block;/*关键*/
  35.         }
  36.         .main li ul{
  37. display: none;
  38.             position: absolute;/*定位使其脱离标准文档流*/
  39.         }
  40.         .main li ul li{
  41.             float: none;
  42.             margin: 0;
  43.         }
  44.     </style>
  45. </head>
  46. <body>
  47.     <div class="box">
  48.         <ul class="main clearfix">
  49.             <li>一级菜单1
  50.                 <ul>
  51.                     <li>二级菜单1</li>
  52.                     <li>二级菜单2</li>
  53.                     <li>二级菜单3</li>
  54.                 </ul>
  55.             </li>
  56.             <li>一级菜单2
  57.                 <ul>
  58.                     <li>二级菜单1</li>
  59.                     <li>二级菜单2</li>
  60.                     <li>二级菜单3</li>
  61.                 </ul>
  62.             </li>
  63.             <li>一级菜单3
  64.                 <ul>
  65.                     <li>二级菜单1</li>
  66.                     <li>二级菜单2</li>
  67.                     <li>二级菜单3</li>
  68.                 </ul>
  69.             </li>
  70.         </ul>
  71.     </div>
  72. </body>
  73. </html>

具体效果可见:下拉菜单(静态)

2.JavaScript版
onmouseenter和onmouseover区别:
不论鼠标指针穿过被选元素或其子元素,都会触发onmouseover 事件。
例:li有mouseover事件,它有子元素a,经过a时也会触发onmouseover
只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。
注意:onmouseenter和onmouseleave配对
可见实例:onmouseenter事件

具体代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>下拉菜单</title>
  6.     <style type="text/css">
  7.         * {
  8.             margin: 0;
  9.             padding: 0;
  10.         }
  11.         ul {
  12.             list-style: none;
  13.         }
  14.         .clearfix:after{
  15.             content: '';
  16.             clear: both;
  17.             display: block;
  18.         }
  19.         .box {
  20.             width: 240px;
  21.             margin: 100px auto;
  22.         }
  23.         .main {
  24.             background: url(images/bg.jpg);
  25.             height: 21px;
  26.         }
  27.         .main li{
  28.             float: left;
  29.             margin-left: 4px;
  30.             background: url(images/libg.jpg) no-repeat;
  31.             position: relative;
  32.         }
  33.         .main li ul {
  34.             display: none;
  35.         }
  36.         .main li ul{
  37.             position: absolute;/*定位使其脱离标准文档流*/
  38.         }
  39.         .main li ul li{
  40.             float: none;
  41.             margin: 0;
  42.         }
  43.     </style>
  44. </head>
  45. <body>
  46.     <div class="box">
  47.         <ul class="main clearfix">
  48.             <li>一级菜单1
  49.                 <ul>
  50.                     <li>二级菜单1</li>
  51.                     <li>二级菜单2</li>
  52.                     <li>二级菜单3</li>
  53.                 </ul>
  54.             </li>
  55.             <li>一级菜单2
  56.                 <ul>
  57.                     <li>二级菜单1</li>
  58.                     <li>二级菜单2</li>
  59.                     <li>二级菜单3</li>
  60.                 </ul>
  61.             </li>
  62.             <li>一级菜单3
  63.                 <ul>
  64.                     <li>二级菜单1</li>
  65.                     <li>二级菜单2</li>
  66.                     <li>二级菜单3</li>
  67.                 </ul>
  68.             </li>
  69.         </ul>
  70.     </div>
  71. </body>
  72. <script>
  73.     var main = document.getElementsByClassName("main")[0];
  74.     var lis = main.children;
  75.     for(var i=0;i<lis.length;i++){
  76.         lis[i].onmouseenter = function(){
  77.             this.children[0].style.display = "block";
  78.         }
  79.         lis[i].onmouseleave = function(){
  80.             this.children[0].style.display = "none";
  81.         }
  82.     }
  83. </script>
  84. </html>

具体效果可见:下拉菜单(js)

3.jquery版
具体代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>下拉菜单</title>
  6.     <style type="text/css">
  7.         * {
  8.             margin: 0;
  9.             padding: 0;
  10.         }
  11.         ul {
  12.             list-style: none;
  13.         }
  14.         .clearfix:after{
  15.             content: '';
  16.             clear: both;
  17.             display: block;
  18.         }
  19.         .box {
  20.             width: 240px;
  21.             margin: 100px auto;
  22.         }
  23.         .main {
  24.             background: url(images/bg.jpg);
  25.             height: 21px;
  26.         }
  27.         .main li{
  28.             float: left;
  29.             margin-left: 4px;
  30.             background: url(images/libg.jpg) no-repeat;
  31.             position: relative;
  32.         }
  33.         .main li ul{
  34.             position: absolute;/*定位使其脱离标准文档流*/
  35.             display: none;
  36.         }
  37.         .main li ul li{
  38.             float: none;
  39.             margin: 0;
  40.         }
  41.     </style>
  42. </head>
  43. <body>
  44.     <div class="box">
  45.         <ul class="main clearfix">
  46.             <li>一级菜单1
  47.                 <ul>
  48.                     <li>二级菜单1</li>
  49.                     <li>二级菜单2</li>
  50.                     <li>二级菜单3</li>
  51.                 </ul>
  52.             </li>
  53.             <li>一级菜单2
  54.                 <ul>
  55.                     <li>二级菜单1</li>
  56.                     <li>二级菜单2</li>
  57.                     <li>二级菜单3</li>
  58.                 </ul>
  59.             </li>
  60.             <li>一级菜单3
  61.                 <ul>
  62.                     <li>二级菜单1</li>
  63.                     <li>二级菜单2</li>
  64.                     <li>二级菜单3</li>
  65.                 </ul>
  66.             </li>
  67.         </ul>
  68.     </div>
  69. </body>
  70. <script type="text/javascript" src="jquery-1.11.1.js"></script>
  71. <script>
  72.     // 法1
  73.     // $(".main li").mouseenter(function(){
  74.     //     console.log($(this));
  75.     //     console.log($(this).children("ul"));
  76.     //     $(this).children("ul").show();
  77.     // });
  78.     // $(".main li").mouseleave(function(){
  79.     //     $(this).children("ul").hide();
  80.     // })
  81.     //法2
  82.     // $(".main li").hover(function(){
  83.     //     $(this).children("ul").show();
  84.     // },function(){
  85.     //     $(this).children("ul").hide();
  86.     // })
  87.     // 法3
  88.      // $(".main li").hover(function(){
  89.      //     var that = $(this).children("ul");
  90.      //     var isShow = that.css('display');
  91.      //     if(isShow == "block"){
  92.      //         that.hide();
  93.      //     }else{
  94.      //         that.show();
  95.      //     }
  96.      // })
  97.      //法4
  98.      $(".main li").hover(function(){
  99.          $(this).children("ul").slideToggle();
  100.      })
  101. </script>
  102. </html>

具体效果可见:下拉菜单(jquery)

9.5改进jquery代码:

  1. $(".main li").hover(function(){
  2.          $(this).children("ul").stop().slideToggle();
  3.      })

针对jquery中动画保留(即执行多次动画效果)的bug

有关stop函数可参考:jQuery之stop

原文的链接:https://blog.csdn.net/lyxuefeng/article/details/82391062

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约