JavaScript下拉菜单功能实例代码

本文给大家分享一段实例代码关于js实现下拉菜单功能,具体代码如下所示:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>下拉菜单</title>
    <style type="text/css">
      body,
      ul,
      li {
        margin: 0;
        padding: 0;
        font-size: 13px;
      }
      ul,
      li {
        list-style: none;
      }
      #divselect {
        width: 186px;
        margin: 80px auto;
        position: relative;
        z-index: 10000;
      }
      #divselect cite {
        width: 150px;
        height: 24px;
        line-height: 24px;
        display: block;
        color: #807a62;
        cursor: pointer;
        font-style: normal;
        padding-left: 4px;
        padding-right: 30px;
        border: 1px solid #333333;
        /*background: url(xjt.png) no-repeat right center;*/
      }
      cite:before {
        content: '';
        position: absolute;
        right: 7px;
        bottom: 7px;
        width: 0;
        height: 0;
        border-width: 4px;
        border-style: solid;
        border-color: #888 transparent transparent transparent;
        transition: all 0.2s;
        -webkit-transition: all 0.2s;
        -moz-transition: all 0.2s;
        -o-transition: all 0.2s;
        -ms-transition: all 0.2s;
        transform-origin: 50% 25%;
        -ms-transform-origin: 50% 25%;
        -moz-transform-origin: 50% 25%;
        -webkit-transform-origin: 50% 25%;
        -o-transform-origin: 50% 25%;
      }
      .extended cite:before {
        transform: rotate(180deg);
        -webkit-transform: rotate(180deg);
        -moz-transform: rotate(180deg);
        -o-transform: rotate(180deg);
        -ms-transform: rotate(180deg);
      }
      #divselect ul {
        width: 184px;
        border: 1px solid #333333;
        background-color: #ffffff;
        position: absolute;
        z-index: 20000;
        margin-top: -1px;
        display: none;
      }
      #divselect ul li {
        height: 24px;
        line-height: 24px;
      }
      #divselect ul li a {
        display: block;
        height: 24px;
        color: #333333;
        text-decoration: none;
        padding-left: 10px;
        padding-right: 10px;
      }
      .animated {
        animation-fill-mode: both;
        -webkit-animation-fill-mode: both;
        -moz-animation-fill-mode: both;
        -o-animation-fill-mode: both;
        -ms-animation-fill-mode: both;
      }
      .speed_fast {
        animation-duration: .3s;
        /*-webkit-animation-duration: 0.2s;
        -moz-animation-duration: 0.2s;
        -o-animation-duration: 0.2s;
        -ms-animation-duration: 0.2s;*/
      }
      .anim_extendDown {
        animation-name: extendDown;
        -webkit-animation-name: extendDown;
        -moz-animation-name: extendDown;
        -o-animation-name: extendDown;
        -ms-animation-name: extendDown;
      }
      @keyframes extendDown {
        0% {
          border-bottom-color: transparent;
          height: 0;
        }
        100% {
          border-bottom-color: #333;
          height: 120px;
        }
      }
      @-webkit-keyframes extendDown {
        0% {
          border-bottom-color: transparent;
          height: 0;
        }
        100% {
          border-bottom-color: #333;
          height: 120px;
        }
      }
      @-moz-keyframes extendDown {
        0% {
          border-bottom-color: transparent;
          height: 0;
        }
        100% {
          border-bottom-color: #333;
          height: 120px;
        }
      }
      @-o-keyframes extendDown {
        0% {
          border-bottom-color: transparent;
          height: 0;
        }
        100% {
          border-bottom-color: #333;
          height: 120px;
        }
      }
      @-ms-keyframes extendDown {
        0% {
          border-bottom-color: transparent;
          height: 0;
        }
        100% {
          border-bottom-color: #333;
          height: 120px;
        }
      }
    </style>
  </head>
  <body>
    <div id="divselect">
      <cite>请选择分类</cite>
      <ul>
        <li id="li">
          <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" selectid="1">ASP开发</a>
        </li>
        <li>
          <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" selectid="2">.NET开发</a>
        </li>
        <li>
          <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" selectid="3">PHP开发</a>
        </li>
        <li>
          <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" selectid="4">Javascript开发</a>
        </li>
        <li>
          <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" selectid="5">Java特效</a>
        </li>
      </ul>
    </div>
    <script type="text/javascript">
      window.onload = function() {
        var box = document.getElementById('divselect'),
          title = box.getElementsByTagName('cite')[0],
          menu = box.getElementsByTagName('ul')[0],
          as = box.getElementsByTagName('a'),
          index = -1;
        //初始样式
        function resetM() {
          box.className = "";
          menu.className = "";
          menu.style.display = "none";
          index = -1;
          resetA();
        }
        //清空a选项样式
        function resetA() {
          for(var i = 0; i < as.length; i++) {
            as[i].style.background = "#fff";
          }
        }
        // 点击三角时
        title.onclick = function(event) {
          //阻止事件冒泡
          event = event || window.event;
          event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;
          if(box.className == "extended") {
            resetM();
          } else {
            box.className = "extended"; //给box加类名让三角旋转
            menu.className = "animated speed_fast anim_extendDown"; //下拉菜单的下拉动画
            menu.style.display = "block";
          }
        }
        document.onkeydown = function(event) {
          event = event || window.event;
          if(box.className == "extended") {
            if(event.keyCode == 38) { //向上键
              event.preventDefault ? event.preventDefault() : event.returnValue = false;
              index--;
              if(index == -1) {
                index = as.length - 1;
              }
              resetA();
              as[index].style.background = "#ccc";
            } else if(event.keyCode == 40) { //向下键
              event.preventDefault ? event.preventDefault() : event.returnValue = false;
              index++;
              if(index == as.length) {
                index = 0;
              }
              resetA();
              as[index].style.background = "#ccc";
            } else if(event.keyCode == 13) { //回车键
              event.preventDefault ? event.preventDefault() : event.returnValue = false;
              title.innerHTML = as[index].innerHTML;
              resetM();
            }
          }
        }
        // 滑过滑过、离开、点击每个选项时
        for(var i = 0; i < as.length; i++) {
          as[i].onmouseover = function() {
            resetA();
            this.style.background = "#ccc";
            index = this.getAttribute('selectid') - 1;
          }
          as[i].onclick = function() {
            resetM();
            title.innerHTML = this.innerHTML;
          }
        }
        // 点击页面空白处时
        document.onclick = function() {
          resetM();
        }
      }
    </script>
  </body>
</html> 

1、要阻止事件冒泡

2、键盘事件,用index索引

3、通过设置类名或清空类名的方式给元素增加动画和恢复原有样式

以上所述是小编给大家介绍的JavaScript下拉菜单功能实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 最简单js代码实现select二级联动下拉菜单

    本文实例为大家分享了js实现select二级联动下拉菜单,供大家参考,具体内容如下 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.

  • js实现省份下拉菜单效果

    2个下拉框,选择1级菜单后,2级菜单出现相应的备选项.如果没有选择则不能提交. 先创建html文件 <!DOCTYPE html> <html> <head> <title></title> </head> <body> <form> <select id="province"> <option selected="selected">请选择...

  • 全国省市二级联动下拉菜单 js版

    本文实例为大家分享了js实现二级联动下拉菜单的具体代码,供大家参考,具体内容如下 js代码部分: /* * 全国二级城市联动 js版 */ function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,iArray){ this.Items[id] = iArray; } Dsy.prototype.Exists = function(id){ if(typeof(this.Items[id]) == "undefined&

  • 三级下拉菜单的js实现代码

    三级下拉菜单的实现: 复制代码 代码如下: function list(idstr){ var name1="subtree"+idstr; var name2="img"+idstr; var objectobj=document.all(name1); var imgobj=document.all(name2); //alert(imgobj); if(objectobj.style.display=="none"){ for(i=1;i&

  • js实现下拉菜单效果

    效果图: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> *{ margin: 0; padding: 0; } body { width: 460px; margin: 0 auto; font-family: "微软雅黑&

  • JS中用三种方式实现导航菜单中的二级下拉菜单

    我们在淘宝.搜狐等大型网站上都可以看到使用的一些二级下拉菜单,比如下面这张图片.那么如何实现导航菜单栏中的二级下拉菜单?下面小编给大家分享实现思路. 但是如何实现类似的图片呢?实际上,我们有至少三种方式来实现,下面,我附上代码供大家参考. 1.仅使用html和css <meta charset="UTF-8"> <title>Document</title> <style> *{margin:0;padding: 0;list-style

  • JS 实现导航菜单中的二级下拉菜单的几种方式

    最近整理了, JS 实现导航菜单中的二级下拉菜单的三种方式,便于项目中应用. 如何实现导航菜单栏中的二级下拉菜单? 我们在淘宝.搜狐等大型网站上都可以看到使用的一些二级下拉菜单,比如下面这张图片. 但是如何实现类似的图片呢?实际上,我们有至少三种方式来实现,下面,我附上代码供大家参考. 1.仅使用html和css <meta charset="UTF-8"> <title>Document</title> <style> *{margin

  • JS组件Bootstrap实现下拉菜单效果代码

    Bootstrap 下拉菜单 这一章讲解了下拉菜单,但是没有涉及到交互部分,本章将具体讲解下拉菜单的交互.使用下拉菜单(Dropdown)插件,您可以向任何组件(比如导航栏.标签页.胶囊式导航菜单.按钮等)添加下拉菜单. 如果您想要单独引用该插件的功能,那么您需要引用 dropdown.js.或者,正如 Bootstrap 插件概览 一章中所提到,您可以引用 bootstrap.js 或压缩版的 bootstrap.min.js. 一.用法 您可以切换下拉菜单(Dropdown)插件的隐藏内容:

  • JavaScript省市级联下拉菜单实例

    最近学了一个关于省市级联简单的小例子,贴出来与大家分享一下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <select id="selProvince" onchange="chan

  • JavaScript 下拉菜单实现代码

    JavaScript下拉菜单 * { padding:0; margin:0; } body { font-family:verdana, sans-serif; font-size:small; } #navigation, #navigation li ul { list-style-type:none; } #navigation { margin:20px; } #navigation li { float:left; text-align:center; position:relati

随机推荐