JavaScript案例——实现下拉菜单

可以利用键盘上下键进行选取,回车键进行选中
思路:
1、获取网页元素
2、输入框获取焦点时显示下拉菜单
3、输入框失去焦点时隐藏下拉菜单
4、键盘上下方向键选择下拉菜单
5、回车键把当前选中菜单文字写入输入框

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <style>
      ul {
        list-style: none;
        padding: 0;
        margin: 0;
      }

      body {
        background: #23384e;
        font: 12px/1.5 \5fae\8f6f\96c5\9ed1;
      }

      .search,
      .search .inner-box,
      .search .box,
      .search .select,
      .search a {
        background: url(../images/search.jpg) no-repeat;
      }

      .search,
      .search .box,
      .search .inner-box {
        height: 34px;
      }

      .search {
        position: relative;
        width: 350px;
        margin: 10px auto;
      }

      .search .box {
        background-position: right 0;
      }

      .search .inner-box {
        background-repeat: repeat-x;
        background-position: 0 -34px;
        margin: 0 20px 0 40px;
      }

      .search .select {
        float: left;
        color: #fff;
        width: 190px;
        height: 22px;
        border: none;
        cursor: pointer;
        margin-top: 4px;
        line-height: 22px;
        padding-left: 10px;
        background-position: 0 -68px;
      }

      .search a {
        float: left;
        width: 80px;
        height: 24px;
        color: #333;
        letter-spacing: 4px;
        line-height: 22px;
        text-align: center;
        text-decoration: none;
        background-position: 0 -90px;
        margin: 4px 0 0 10px;
      }

      .search a:hover {
        color: #f60;
        background-position: -80px -90px;
      }

      .search ul {
        position: absolute;
        top: 26px;
        left: 40px;
        color: #fff;
        width: 198px;
        background: #2b2b2b;
        border: 1px solid #fff;
        display: none;
      }

      .search ul li {
        height: 25px;
        line-height: 24px;
        cursor: pointer;
        padding-left: 10px;
        margin-bottom: -1px;
        border-bottom: 1px dotted #fff;
      }

      .search ul li:hover,
      .search ul li.active {
        background: #8b8b8b;
      }
    </style>
  </head>
  <body>
    <div class="search">
      <div class="box">
        <div class="inner-box">
          <input
            type="text"
            id="keyword"
            class="select"
            autocomplete="off"
            placeholder="请选择游戏名称"
          />
          <a href="#">搜索</a>
        </div>
      </div>
      <ul>
        <li>地下城与勇士</li>
        <li>魔兽世界(国服)</li>
        <li>魔兽世界(台服)</li>
        <li>热血江湖</li>
        <li>大话西游II</li>
        <li>QQ幻想世界</li>
        <li>幻想世界</li>
      </ul>
    </div>
    <script>
      window.onload = function() {

        //1、获取页面元素
        var keyword = document.querySelector("#keyword");
        var ul = document.querySelector("ul");
        var lis = document.querySelectorAll("li");
        //2、输入框获取焦点时显示下拉菜单
        keyword.onfocus = function() {
          ul.style.display = "block";
          //定义lis的索引
          var index = -1;
          //给keyword绑定 就键盘擡起来事件
          //4、键盘上下方向键选择下拉菜单

          keyword.onkeyup = function(e) {
            //上键====38
            if (e.which === 38) {
              index--;
              if (e.index < 0) {
                index = lis.length - 1;
              }
              for (var i = 0; i < lis.length; i++) {
                lis[i].className = "";
              }
              lis[index].className = "active";
            }
            //下键===40
            if (e.which === 40) {
              index++;
              if (index > lis.length - 1) {
                index = 0;
              }
              for (var i = 0; i < lis.length; i++) {
                lis[i].className = "";
              }
              lis[index].className = "active";
            }
            //5、回车键把当前选中菜单文字写入输入框
            //回车键===13
            if (e.which === 13) {
              keyword.valuie = lis[index].innerHTML;
              //把数据添加到keyword中之后,把keyword失去焦点
              keyword.blur();
            }
          };
        };
        //3、输入框失去焦点时隐藏下拉菜单
        keyword.onblur = function() {
          ul.style.display = "none";
        };
      };
    </script>
  </body>
</html>

背景图
在这里插入图片描述
效果图
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章