ITPub博客

首页 > IT职业 > IT图书 > JS 实现下拉菜单选择(支持鼠标、键盘同时触发事件)

JS 实现下拉菜单选择(支持鼠标、键盘同时触发事件)

IT图书 作者:znsk07 时间:2021-09-09 09:05:37 0 删除 编辑

html:





下拉菜单



main.css:

*{ 
    margin:0; 
    padding:0; 
    font-size:14px;
}
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; 
}
#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;
}

main.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; 

    title.onclick=function(event){
      event = event || window.event;
      //显示下拉菜单
      menu.style.display = 'block';
      /*阻止点击事件传播:
          防止点击下拉菜单中的每一项时(ul->li->a),事件逐级传递到document,
          执行了document.onclick  中的 menu.style.display = 'none'语句,
          导致下拉菜单无法显示。*/
      if(event.stopPropagation){
        event.stopPropagation();
      }else{
        event.cancelBubble = true;
      }
      //添加键盘事件
      document.onkeyup = keyEvent;
  }  
    function keyEvent(e){
       e=e || window.event;
       //按了向下键,index递增,当 index>=菜单选项的总数 时,index = 0
       if(e.keyCode== 40){
          index++;
          if(index>=as.length){
            index = 0;
          }
          console.log(index);
          //先清空背景色
          clearBGC();
          //根据index,设置背景色
          as[index].style.background="#ccc";
       }
       //按了向上键,若index

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27/viewspace-2799317/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-11

  • 博文量
    114
  • 访问量
    655