js,jquery原生实现select选择器

2021-01-08  本文已影响0人  一岁倾城

今天遇到一个问题,就是用原生的select选择器的时候感觉“select选择器”样式很难修改,自带的样式不是很好看,所有就~~~哈哈哈,下决心自己手写一个select选择器,这样对操作样式很方便啦。— —+

废话不多说,上代码

一、html代码

<!--有数据时-->
    <div class="wuziSelect">
        <span class="selectVal" onclick="wuziSelect(this);">请选择</span>
        <div class="optionItemsBox tt">
            <ul>
                <li class="noOptionVal" onclick="selectVal(this,false);" style="display:none;">暂时没有数据</li>
                <li onclick="selectVal(this,true);">lalaaall1</li>
                <li onclick="selectVal(this,true);">lalaaall2</li>
                <li onclick="selectVal(this,true);">lalaaall3</li>
                <li onclick="selectVal(this,true);">lalaaall4</li>
                <li onclick="selectVal(this,true);">lalaaall5</li>
                <li onclick="selectVal(this,true);">lalaaall6</li>
                <li onclick="selectVal(this,true);">lalaaall7</li>
                <li onclick="selectVal(this,true);">lalaaall8</li>
                <li onclick="selectVal(this,true);">lalaaall9</li>
                <li onclick="selectVal(this,true);">lalaaall0</li>
            </ul>
        </div>
    </div>
    
    <!--没有数据时-->
    <div class="wuziSelect">
        <span class="selectVal" onclick="wuziSelect(this);">请选择</span>
        <div class="optionItemsBox tt">
            <ul>
                <li class="noOptionVal" onclick="selectVal(this,false);" style="display:none;">暂时没有数据</li>
            </ul>
        </div>
    </div>

二、css样式

<style>
        /*滚动条*/
        .tt{
            overflow-y:auto;
        }
        .tt::-webkit-scrollbar {
            width: 8px;
            height: 1px;
        }
        .tt::-webkit-scrollbar-thumb {
            border-radius: 4px;
            background: rgba(0, 0, 0, 0.3);
            /*border-bottom: 2px solid #ccc;*/
        }
        .tt::-webkit-scrollbar-track {
            border-radius: 4px;
            background: #00000038;
        }
        ul,li{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .wuziSelect{
            width: 200px;
            background: #fff;
            border: 1px solid #ccc;
            border-radius: 4px;
            position: relative;
        }
        .wuziSelect span{
            display: block;
            width: calc(100% - 20px);
            height: 100%;
            padding: 10px;
        }
        .wuziSelect .optionItemsBox{
            position: absolute;
            top: 50px;
            left: 0;
            width: 200px;
            padding: 10px;
            background: #fff;
            display: none;
            border: 1px solid #ccc;
            border-radius: 4px;
            /*height: 200px;*/
            height: 0px;
            transition: .5s;
        }
        .wuziSelect .optionItemsBox ul li{
            width: 100%;
            height: 40px;
            line-height: 40px;
        }
        .wuziSelect .optionItemsBox ul li:focus{
            background: rgba(0,0,0,.4);
        }
    </style>

三、js代码块

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
    function wuziSelect(e){
        var wuziSelect = $(e).parent();//wuziSelect元素
        if(wuziSelect.children('.optionItemsBox').children('ul').children().length <= 1){
            wuziSelect.find('.noOptionVal').show();
            wuziSelect.children('.optionItemsBox').show().css('height','40px');
        }else{
            wuziSelect.children('.optionItemsBox').show().css('height','200px');
       }
   }
   function selectVal(e,a){
      var val = e.innerText;
      var wuziSelect = $(e).parent().parent().parent();//wuziSelect元素
      if(a == true){
           wuziSelect.children('.selectVal').text(val);
      }
      wuziSelect.children('.optionItemsBox').hide();
   }
</script>

四、效果图

select选择器-点击前.png select选择器.png select选择器-点击后.png
上一篇 下一篇

猜你喜欢

热点阅读