美文网首页原生Js的Demo合集
下拉列表的简单Demo

下拉列表的简单Demo

作者: 做有趣的恶魔 | 来源:发表于2017-04-17 16:44 被阅读33次
    一、Html页面布局
    <body>
      <div id="divselect">
        <cite>请选择分类</cite>
        <ul>
          <li id="li"><a href="javascript:;" selectid="1">ASP开发</a></li>
          <li><a href="javascript:;" selectid="2">.NET开发</a></li>
          <li><a href="javascript:;" selectid="3">PHP开发</a></li>
          <li><a href="javascript:;" selectid="4">Javascript开发</a></li>
          <li><a href="javascript:;" selectid="5">Java开发</a></li>
        </ul>
      </div>
    </body>
    
    二、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;
      overflow: hidden;
    }
    
    #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: 0.2s;
      -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;
      }
    }
    
    三、Js部分
    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 resetA(){
        for(var i = 0; i < as.length; i++) {
          as[i].style.background = "#fff";
        }
      }
    
      function resetM() {
        box.className = '';
        menu.className = '';
        menu.style.display = "none";
        index = -1;
        resetA();
      }
      //点击显示选项列表
      title.onclick = function(event) {
        event = event || window.event;
        //兼容IE
        event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;
        //防止事件冒泡
        if(box.className == "extended"){
          resetM();
        } else {
          box.className = "extended";
          menu.className = "anim_extendDown animated speed_fast";
          menu.style.display = "block";
        }
      }
      //滑过滑出选项 改变样式 点击选择内容
      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();
      }
      //键盘点击事件
      document.onkeydown = function (e) {
        e = e || window.event;
        if(box.className == "extended"){
          if(e.keyCode == 40){
              e.preventDefault ? e.preventDefault() : e.returnValue = false;
              index++;
              if(index > as.length - 1){
                  index = 0;
              }
              resetA();
              as[index].style.backgroundColor = "#ccc";
          }else if(e.keyCode == 38){
              e.preventDefault ? e.preventDefault() : e.returnValue = false;
              index--;
              if(index < 0){
                  index = as.length - 1;
              }
              resetA();
              as[index].style.backgroundColor = "#ccc";
          }else if(e.keyCode == 13 && index != -1){
              e.preventDefault ? e.preventDefault() : e.returnValue = false;
              title.innerHTML = as[index].innerHTML;
              index = -1;
              resetA();
              resetM();
          }
        }
      }
    }
    

    相关文章

      网友评论

        本文标题:下拉列表的简单Demo

        本文链接:https://www.haomeiwen.com/subject/azitzttx.html