做有态度的前端团队

网易FEG前端团队

浅尝模拟下拉框select

前言

本文主要模拟下拉框select控件
详情请戳参考页面:梦幻西游手游武神坛

select_bg.png

模拟select主要实现目标

  • 1.点击下拉框区域,下拉列表没显示则显示,有显示则收起来,下拉箭头样式有所改变;
  • 2.鼠标hover下拉列表上面有对应的交互;
  • 3.点击选择下拉列表的值,收起下拉列表,并且在下拉框区域显示选中的值;
  • 4.有多个下拉框的时候,点击其它下拉框区域,其它兄弟下拉框没收起的先收起,同时展开当前下拉菜单;
  • 5.点击窗口空白处,有下拉菜单没收起来的也收起来。

image_20160729193924.png

实现步骤

以下是实现的html代码

<div class="select-wrap j-select-area">
    <div class="select-text list-hide" id="videoPeriodTxt">第一赛季</div>
    <ul class="select-item" id="videoPeriod">
        <li data-type="video-period" data-value="1">第一赛季</li>
        <li data-type="video-period" data-value="2">第二赛季</li>
    </ul>
</div>

<div class="select-wrap j-select-area">
    <div class="select-text list-hide">组别</div>
    <ul class="select-item">
        <li data-type="video-group" data-value="">组别</li>
        <li data-type="video-group" data-value="1">甲组</li>
        <li data-type="video-group" data-value="2">乙组</li>
        <li data-type="video-group" data-value="3">丙组</li>
    </ul>
</div>

以下是css样式

.select-wrap{
    width: 108px;
    height: 38px;
    line-height: 38px;
    float:left;
    margin: 0 5px;
    font-family: "Microsoft YaHei";
    text-align: left;
    color:#eccc6b;
    cursor: pointer;
    position: relative;
    user-select:none;//设置元素和子元素的文本都不可选
    -moz-user-select:none;
    -webkit-user-select:none;
    z-index: 9999;
    .select-text{
        text-indent:.2em;
        background: url(../img/select.jpg) #35363a;
        height: 38px;
        &.list-hide{
            background-position: 0 0;//下拉框隐藏时箭头向下
        }
        &.list-show{
            background-position:0 -38px;//下拉框显示时箭头向下
        }
    }
    .select-item{
      z-index: 9999;
      position: absolute;
      width: 100%;
      left:-1px;
      top: 38px;
      border: 1px solid #eccc6b;
      display: none;
        li{
            height: 38px;
            text-indent:1.2em;
            background: #35363a;
            &:hover{
              background: #eccc6b;
              color:#fff;
            }
        }
    }
}

以下是js代码

var changeSelectFun = function(){

    $('.j-select-area').click(function(e){
        var $e = $(e.target),
            $this = $(this),
            $sltlist = $this.children('.select-item'),
            $siblingsltlist=$this.siblings().children(".select-item");

        //阻止事件冒泡兼容IE
        e.stopPropagation() ? e.stopPropagation() : (e.cancelBubble = true);

        //点击区域是下拉框
        if($e.is('.select-text')){
            //其它兄弟下拉框没收起来就收起来
            if($siblingsltlist.is(":visible")){$siblingsltlist.slideUp(200).prev().removeClass('list-show')};
            
            if($sltlist.is(":visible")){
                $sltlist.slideUp(200).prev().removeClass('list-show')
            }else{
                $sltlist.slideDown(200).prev().addClass('list-show');
            }
        }

        //点击区域是下拉列表,则进行选值以及收起下拉列表
        if($e.is('li[data-value]')){
            $sltlist.slideUp(200).prev().removeClass('list-show');
            $this.children('.select-text').html($e.html());
            //do something
        }
    })

    //点击区域是窗口,要收起有显示的下拉框
    $(document).bind('click',function(){
        var $sltlistall = $('.select-item');
        if($sltlistall.is(":visible")){
            $sltlistall.slideUp(200).prev().removeClass('list-show');
        }
    })
}

changeSelectFun();

感谢收看~

webwxgetmsgimg.jpg

手机阅读请扫描下方二维码:

已有 49 条评论

  1. admin

    12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

  2. admin

    12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif
    expr 918486854 + 922810125

  3. admin

    12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif |expr 833570398 + 853245570

  4. admin

    12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

  5. admin

    12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

  6. admin

    12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

  7. 1

    1 ali-40.gif ali-40.gif ali-41.gif ali-41.gif ali-42.gif ali-42.gif ali-43.gif ali-43.gif ali-44.gif ali-44.gif ali-45.gif ali-45.gif ali-46.gif ali-46.gif ali-47.gif ali-47.gif ali-48.gif ali-48.gif ali-49.gif ali-49.gif ali-50.gif ali-50.gif ali-51.gif ali-51.gif ali-52.gif ali-52.gif ali-53.gif ali-53.gif ali-54.gif ali-54.gif ali-55.gif ali-55.gif ali-56.gif ali-56.gif ali-57.gif ali-57.gif ali-58.gif ali-58.gif ali-59.gif ali-59.gif ali-60.gif ali-60.gif ali-61.gif ali-61.gif

  8. 1

    1 ali-40.gif ali-40.gif ali-41.gif ali-41.gif ali-42.gif ali-42.gif ali-43.gif ali-43.gif ali-44.gif ali-44.gif ali-45.gif ali-45.gif ali-46.gif ali-46.gif ali-47.gif ali-47.gif ali-48.gif ali-48.gif ali-49.gif ali-49.gif ali-50.gif ali-50.gif ali-51.gif ali-51.gif ali-52.gif ali-52.gif ali-53.gif ali-53.gif ali-54.gif ali-54.gif ali-55.gif ali-55.gif ali-56.gif ali-56.gif ali-57.gif ali-57.gif ali-58.gif ali-58.gif ali-59.gif ali-59.gif ali-60.gif ali-60.gif ali-61.gif ali-61.gif

  9. 1

    1

  10. 1

    1

  11. 1

    1

  12. 1

    1

  13. 1

    1

  14. 1

    1

  15. 1

    1

  16. 1

    1

  17. 1

    1

  18. 1

    1

  19. 1

    1

  20. 1

    1

  21. 1

    1

  22. 1

    1

  23. 1

    1

  24. 1

    1

  25. 1

    1

  26. 1

    1

  27. 1

    1

  28. 1

    1

  29. 1

    1

  30. 1

    1

  31. 1

    1

添加新评论

ali-40.gifali-41.gifali-42.gifali-43.gifali-44.gifali-45.gifali-46.gifali-47.gifali-48.gifali-49.gifali-50.gifali-51.gifali-52.gifali-53.gifali-54.gifali-55.gifali-56.gifali-57.gifali-58.gifali-59.gifali-60.gifali-61.gif