前端下拉列表的实现

实现下拉列表

实现效果如图:
下拉列表
主要注意一下enevt事件,同时因为感觉select原生的样式不容易修改,因此自己写了一个下拉列表,便于修改样式。
直接上代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>自定义下拉列表</title>
    <style>
        html,
        body {
            height: 100%;
        }

        .select {
            width: 200px;
            background: #ccc;
            font-size: 14px;
            position: relative;
        }

        .clearfix {
            /* 清楚浮动 */
            content: "";
            display: table;
            clear: both;
        }

        .select div {
            height: 30px;
            /* 这个貌似对span有效,但是对于input没有效果 */
            line-height: 30px;
        }

        .select div span {
            /* 这里如果使用inline-block,inline-block会多一点间距,还是使用block+float来进行布局 */
            display: block;
            text-align: center;
            float: left;
            font-size: 12px;
            width: 50px;
        }

        .select div input {
            width: 150px;
            display: block;
            float: left;
            /* 默认的input包含一些padding  border */
            box-sizing: border-box;
            /* 设置高度和外层div的高度一致,这样看起来才像是垂直居中显示 */
            height: 30px;
        }

        .select ul {
            position: absolute;
            /* list-style-type: none; */
            background: #aaa;
            /* 去掉默认的样式以及margin  padding */
            list-style: none;
            margin: 0;
            padding: 0;
            /* 如果设置了position,那么这里的100%可能是相对与html而言的,但是这里设置了select的position,所以这里的宽度是相对于select而言 */
            /* width: 100%; */
            width: 150px;
            box-sizing: border-box;
            /* 避免被遮住 */
            z-index: 100;
            text-align: center;
            left: 50px;
            /* 默认是隐藏的 */
            display: none;
        }

        .select ul li {
            line-height: 1.4rem;
            border-bottom: 1px solid #ccc;
            cursor: pointer;
        }

        .select ul li:hover {
            /* 悬浮的时候显示背景颜色 */
            color: red;
        }
    </style>
</head>

<body onclick="closeLists()">
       <div class="select">
        <div class="clearfix">
            <span>事件类型</span>
            <input type="text" readonly onclick="showList()" id="Etype">
        </div>
        <ul id="lists">
            <li onclick="chooseParam()">爆炸事故</li>
            <li onclick="chooseParam()">火灾事故</li>
            <li onclick="chooseParam()">中毒事件</li>
            <li onclick="chooseParam()">坍塌事故</li>
        </ul>
    </div>
    <script>
        function showList() {
            document.getElementById("lists").style.display = "block";
            // let ev = event || window.event;
            event.stopPropagation()
        }

        function chooseParam() {
            // console.log(event)
            document.getElementById("Etype").value = event.target.innerText;
        }

        function closeLists() {
            document.getElementById("lists").style.display = "none";
            event.stopPropagation(); //阻止冒泡
        }
    </script>
</body>

</html>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值