jQ模拟下拉框以及向下三角

界面;

问题:因为select自带得option不能自适应宽度,意味着option宽度有时候会比select宽度长,如下图:

解决:自己模拟写一个select带向下三角得下拉框;

原理:

1、我这里用的div当作一个框,里面包含下拉框选中内容和三角形(三角形是靠css实现得)

2、用ul/li模拟一个显示隐藏得下拉框;

3、jq获取元素以及显示隐藏元素都比较方便,原生也差不多;

4、js事件比如下拉框得鼠标移入移出以及选中元素得样式根据不同需求定,我这里是统一之前的select框样式来实现得,仅供参考;

难点:

1、向下三角形得css实现

2、动态往div框里添加所选择得下拉框得值时,用到jq得text方法的话,会连里面的三角形标签一起替换掉

html

<div class="ip">
    <div class="myCanvas"></div>
</div>
<ul class="ipWrap" >
    <li value="${i.value}" title="${i.desc}" style="width: 100%" >${i.desc}</li>
</ul> 

css

.ip{
    //width: 60%;
    //-ms-flex: 1;
   // flex: 1;
   position: relative;
    text-indent: 5px;
    margin-top: 25px;
    height: 33px;
    border: 1px solid #ccc;
    line-height: 33px;
    border-radius: 5px;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}
.ipWrap{
    position: absolute;
    background: #ffffff;
    border: 1px solid #ccc;
    li{
        float:left;
        line-height:40px;
        text-align:center;
}
.liActive{
    color:#ffffff;
    background-color:#0088FF;
}
//三角形
.myCanvas{
    width: 0;
    height: 0;
    position: absolute;
    bottom: 10%;
    right: 3%;
    border-left: 3px solid transparent;
    border-right: 3px solid transparent;
    border-top: 6px solid black;
}

 js

{//点击li添加样式
    event: 'click',
    selector: 'li',
    callback: function(e){
        //添加单独的样式
        $(e).addClass('liActive').siblings().removeClass('liActive');
        let text = $(e).attr('title')
        $('.ip').text(text).attr('title',text);
        this.actions.hideIpSelect();
        $('.myCanvas').css('bottom','10%');
    }
},
{//鼠标移入li
    event: 'mouseover',
    selector: 'li',
    callback: function(e){
        $(e).addClass('liActive').siblings().removeClass('liActive');
    }
},
{
    event: 'mouseout',
    selector: 'li',
    callback: function(e){
        $(e).removeClass('liActive');
    }
},


// 模拟得下拉框:点击三角形和div
clickIpSelect(){
         $('.ip,.myCanvas').on('click',()=>{
           console.log('ip/三角被点击了')
      this.actions.showIpSelect();
              $('.myCanvas').css('bottom','47%');
             let lis = $('.ipWrap li');
             lis.each((index,item)=>{
         if ($(item).attr('title')==$('.ip').text()) {
                      $(item).addClass('liActive')
         }
             })

   })

},
hideIpSelect(){
   $('.ipWrap').hide()
},
showIpSelect(){
          $('.ipWrap').show()
},

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值