znds 发表于 2019-6-26 09:39

轻量级Jquery简洁精美小巧的下拉框

本帖最后由 znds 于 2019-6-26 10:47 编辑

基于jquery-1.11.2.min.js的下拉框=========================================
效果如下


引用了style 文件 里面 再引用 layout.css、base.css两个CSS
当然可以不这么麻烦 可以 全部写到一起去。
以下是style 文件样式定义==============================================

@charset "utf-8";
/* CSS Document */
@import url("layout.css");
@import url("base.css");

/*下拉菜单*/
.single-select {
    position: relative;
    display: inline-block;
    margin-right: 5px;
    vertical-align: middle;
    cursor: pointer;
    *float: left;
}

    .single-select .boxwrap {
      display: inline-block;
      vertical-align: middle;
    }

    .single-select .select-tit {
      position: relative;
      display: block;
      padding: 5px 38px 5px 10px;
      min-width: 40px;
      line-height: 20px;
      height: 20px;
      border: solid 1px #eee;
      text-decoration: none;
      background: #fff;
      white-space: nowrap;
      word-break: break-all;
    }

      .single-select .select-tit span {
            display: inline-block;
            color: #333;
            font-size: 12px;
            vertical-align: middle;
      }

      .single-select .select-tit i {
            position: absolute;
            right: 0;
            top: 0;
            display: block;
            width: 28px;
            height: 100%;
            border-left: 1px solid #eee;
            background: url(skin_icons.png) 7px -189px no-repeat #fafafa;
      }

    .single-select .select-items {
      display: none;
      position: absolute;
      left: 0;
      top: 45px; /*overflow:hidden;*/
    }

      .single-select .select-items ul {
            position: relative;
            padding: 5px;
            min-width: 120px;
            max-height: 280px;
            border: 1px solid #eee;
            background: #fff;
            overflow-y: auto;
            overflow-x: hidden;
      }

            .single-select .select-items ul li {
                display: block;
                padding: 4px 10px;
                line-height: 20px;
                font-size: 12px;
                color: #666;
                white-space: nowrap;
                cursor: pointer;
            }

                .single-select .select-items ul li:hover {
                  color: #fff;
                  text-decoration: none;
                  background: #16a0d3;
                }

                .single-select .select-items ul li.selected {
                  color: #fff;
                  background: #16a0d3;
                }

    .single-select .arrow {
      display: none;
      position: absolute;
      left: 15px;
      top: 35px;
      width: 21px;
      height: 11px;
      text-indent: -9999px;
      background: url(skin_icons.png) 0 -290px no-repeat;
    }

    .single-select.up .select-items {
      top: auto;
      bottom: 45px;
    }

    .single-select.up .arrow {
      top: -13px;
      background: url(skin_icons.png) 0 -300px no-repeat;
    }

.page-footer {
    padding: 10px 0;
    height: 32px;
    font-size: 12px;
}

    .page-footer .btn-wrap {
      position: fixed;
      margin: 0;
      padding: 10px 0;
      top: auto;
      left: 15px;
      right: 15px;
      bottom: 0;
      background: #fff;
      z-index: 3;
    }

      .page-footer .btn-wrap:after {
            clear: both;
            content: ".";
            display: block;
            height: 0;
            visibility: hidden;
      }
/* ==========================下拉框样式.结束======================== */

layout.css样式定义====================================================
@charset "utf-8";
/* CSS Document */
/*================管理首页布局.开始===================*/
.main-top{ position:absolute; top:0; right:0; left:180px; height:42px; z-index:11; }
.main-left{ position:absolute; top:0; bottom:0; left:0; width:180px; z-index:10; }
.main-container{ position:absolute; top:43px; right:0; bottom:0; left:180px; overflow:hidden; }
      .main-container iframe{ position:absolute; top:0; right:0; bottom:0; left:0; width:100%; height:100%; }
/*================管理首页布局.结束===================*/
base.css样式定义=====================================================
@charset "utf-8";
/* CSS Document */
*{ padding:0; margin:0; font-family:"Microsoft YaHei";font-size:10pt; }
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
time, mark, audio, video{ margin:0; padding:0; border:0; font-size:100%; text-decoration:none; }
html { line-height:1; }
ol, ul { list-style:none; }



接下来就要绑定 下拉框 样式。
以上css引用了 图标如下:

准备工作完成后开始js 下拉框样式的绑定事件=====================================

//单选下拉框
$.fn.ruleSingleSelect = function () {
    var singleSelect = function (parentObj) {
      parentObj.addClass("single-select"); //添加样式
      parentObj.children().hide(); //隐藏内容
      var divObj = $('<div class="boxwrap"></div>').prependTo(parentObj); //前插入一个DIV
      //创建元素
      var titObj = $('<a class="select-tit" href="javascript:;"><span></span><i></i></a>').appendTo(divObj);
      var itemObj = $('<div class="select-items"><ul></ul></div>').appendTo(divObj);
      var arrowObj = $('<i class="arrow"></i>').appendTo(divObj);
      var selectObj = parentObj.find("select").eq(0); //取得select对象
      //遍历option选项
      selectObj.find("option").each(function (i) {
            var indexNum = selectObj.find("option").index(this); //当前索引
            var liObj = $('<li>' + $(this).text() + '</li>').appendTo(itemObj.find("ul")); //创建LI
            if ($(this).prop("selected") == true) {
                liObj.addClass("selected");
                titObj.find("span").text($(this).text());
            }
            //检查控件是否启用
            if ($(this).prop("disabled") == true) {
                liObj.css("cursor", "default");
                return;
            }
            //绑定事件
            liObj.click(function () {
                $(this).siblings().removeClass("selected");
                $(this).addClass("selected"); //添加选中样式
                selectObj.find("option").prop("selected", false);
                selectObj.find("option").eq(indexNum).prop("selected", true); //赋值给对应的option
                titObj.find("span").text($(this).text()); //赋值选中值
                arrowObj.hide();
                itemObj.hide(); //隐藏下拉框
                selectObj.trigger("change"); //触发select的onchange事件
            });
      });

      //绑定控件与DIV样式联动
      $(selectObj).change(function () {
            $(this).parent().find('.selected').removeClass('selected');
            var index = $(this).prop('selectedIndex');
            $($(this).parent().find('.boxwrap .select-items ul li')).addClass('selected');
            var text = $(this).find('option:selected').text();
            $(this).parent().find('.select-tit span').text(text);
      })
      
      //检查控件是否启用
      if (selectObj.prop("disabled") == true) {
            titObj.css("cursor", "default");
            return;
      }
      //绑定单击事件
      titObj.click(function (e) {
            debugger
            e.stopPropagation();
            if (itemObj.is(":hidden")) {
                //隐藏其它的下位框菜单
                $(".single-select .select-items").hide();
                $(".single-select .arrow").hide();
                //位于其它无素的上面
                arrowObj.css("z-index", "1");
                itemObj.css("z-index", "1");
                //显示下拉框
                arrowObj.show();
                itemObj.show();
            } else {
                //位于其它无素的上面
                arrowObj.css("z-index", "99");
                itemObj.css("z-index", "99");
                //隐藏下拉框
                arrowObj.hide();
                itemObj.hide();
            }
      });
    };
    return $(this).each(function () {
      singleSelect($(this));
    });
}

上面已经完成了下拉框的绑定事件接下来 就是根据 class 来初始化绑定下拉框 这样就不需要在各个引用界面 重新书写调用绑定事件了。
废话不多说 上代码 ==========================================================================
$(function(){
$('.rule-single-select').ruleSingleSelect();
})

忘记上Jquery赋值操作了 废话不多说直接补上 代码如下===================================================
$('#主键').val(值).change();//代码赋值操作
免费入口:链接:https://pan.baidu.com/s/1_rTSs3s7v11lxqULARUK6w 提取码:ez4r
复制这段内容后打开百度网盘手机App,操作更方便哦这样 一个 精美的 下拉框 就完成了 总大小148 KB jquery-1.11.2.min.js 文件占93.6KB

内裤超人 发表于 2019-6-26 10:20

为啥我都看不起jq,还是喜欢原生js

znds 发表于 2019-6-26 10:45

内裤超人 发表于 2019-6-26 10:20
为啥我都看不起jq,还是喜欢原生js

那你多 分享 一点js写的 兼容性又高的 又漂亮的 比较常用的插件出来。让我等 菜鸟 涨涨见识啊?

内裤超人 发表于 2019-6-26 15:27

znds 发表于 2019-6-26 10:45
那你多 分享 一点js写的 兼容性又高的 又漂亮的 比较常用的插件出来。让我等 菜鸟 涨涨见识啊?

没什么好分享的,就是单纯喜欢js,不喜欢jq

znds 发表于 2019-6-26 17:33

内裤超人 发表于 2019-6-26 15:27
没什么好分享的,就是单纯喜欢js,不喜欢jq

jq 兼容性 好 。反正我觉得挺好用的。

内裤超人 发表于 2019-6-27 09:12

znds 发表于 2019-6-26 17:33
jq 兼容性 好 。反正我觉得挺好用的。

我这边公司都是用js,页面加载快
页: [1]
查看完整版本: 轻量级Jquery简洁精美小巧的下拉框