做有态度的前端团队

网易FEG前端团队

浅尝模拟下拉框select

前言

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

select_bg.png

模拟select主要实现目标

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

image_20160729193924.png

实现步骤

以下是实现的html代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<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样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
.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代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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

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

分享到:

    已有 52 条评论

    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

    32. 1

      1

    33. 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