Maison >interface Web >js tutoriel >Implémenter des effets d'embellissement de liste déroulante basés sur jquery_jquery
La plupart des styles des listes déroulantes de sélection natives que nous utilisons habituellement ne peuvent pas être modifiés, ce qui entraîne des styles très différents des dessins de conception dans différents navigateurs. Alors afin de l'embellir, j'ai utilisé JQ pour simuler une liste déroulante, et vous pouvez définir le style à volonté. La liste déroulante native est également cachée dans le div pour permettre aux développeurs back-end de l'utiliser plus facilement.
Le rendu est le suivant :
Le code HTML est le suivant :
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>下拉框美化</title> <link href="css/style.css" rel="stylesheet"/> <script src="js/jquery-1.9.1.min.js"></script> <script src="js/simSelect.js"></script> <script> $(function(){ //下面是调用初始化语句,class名可通用,也可以ID单独定义 $(".select-box").simSelect(); //什么参数都不带,默认样式。建议用这个,参数都写在div上面好了,比较直观。 $(".slt-box01").simSelect({ //所有参数如下: maxNum: 4, //最大下拉个数(超过则显示滚动条),默认为5 width: 250, //下拉框盒子宽度,默认为200px。为避免过多的设置宽度,尽量依照项目中最常见的宽度设定css样式。 direction: "down", //下拉方向,默认down,另一个是up disabled: false //是否禁用,默认不禁,禁的话是true }); $(".slt-box02").simSelect({ //举例:这里写参数,div上面也写参数的情况。结果是:会以div上面的为准 maxNum: 4, width: 250, direction: "down" }); $(".slt-box03").simSelect({ //禁用下拉框的话,有三种写法,任选。建议第二种: disabled: true, //一:这里的参数写disabled:true 二:给div加class="disabled" 三:给原生select加disabled="true" width: 250 }); $("#slt-box04").simSelect(); //ID单独定义。单个option可以禁用 }); </script> </head> <body> <!-- wrap和table非必需,用于布局而已 --> <div class="wrap"> <table width="600"> <tbody> <tr> <th>不带参数:</th> <td><div class="select-box"> <select> <option>第一个选项</option> <option>第二个选项</option> <option>第三个选项</option> <option>第四个选项</option> <option>第五个选项</option> <option>第六个选项</option> </select> </div></td> </tr> <tr> <th>初始化语句写了参数:</th> <td><div class="slt-box01"> <select> <option>第一个选项</option> <option>第二个选项</option> <option>第三个选项</option> <option>第四个选项</option> <option>第五个选项</option> <option>第六个选项</option> </select> </div></td> </tr> <tr> <th>在div上面写参数:</th> <td><div class="slt-box02 up" max-num="6" width="300"> <select> <option>第一个选项</option> <option>第二个选项</option> <option>第三个选项</option> <option>第四个选项</option> <option>第五个选项</option> <option>第六个选项</option> </select> </div></td> </tr> <tr> <th>禁用的样式:</th> <td><div class="slt-box03"> <select> <option>第一个选项</option> <option>第二个选项</option> <option>第三个选项</option> <option>第四个选项</option> <option>第五个选项</option> <option>第六个选项</option> </select> </div></td> </tr> <tr> <th>其中一个选项禁用:</th> <td><div id="slt-box04" class="up" max-num="4" width="200"> <select> <option>第一个选项</option> <option>第二个选项超长超长超长超长长啊</option> <option disabled="true">第三个选项</option> <option>第四个选项</option> <option>第五个选项</option> <option>第六个选项</option> </select> </div></td> </tr> </tbody> </table> </div> </body> </html>
Le style CSS est le suivant :
@charset "utf-8"; /* 简单reset */ body, ul, li { margin: 0; padding: 0; } body { font: 14px/24px Microsoft YaHei; color: #333; } ul { list-style: none; } a { color: #333; outline: none; text-decoration: none; } table { border-collapse: collapse; border-spacing: 0; text-align: left; } /* 布局样式,非必须 */ .wrap { width: 600px; margin: 100px auto 0; padding: 20px; background-color: #d3f3dd; } .wrap table th, .wrap table td { padding: 8px 2px; } .wrap table th { font-weight: normal; text-align: right; } /* 下拉框样式 必须 */ .select-style ul { list-style: none; padding: 0; margin: 0; } .select-style select { display: none; } .select-style { position: relative; display: inline-block; font-family: Microsoft YaHei; color: #666; font-size: 14px; text-align: left; vertical-align: middle; z-index: 50; } .select-style.focus { z-index: 51; } .select-style .slt-wrap { display: inline-block; width: 200px; border: solid 1px #d6d6d6; vertical-align: middle; } .select-style.focus .slt-wrap { border: solid 1px #53a8df; } .select-style .slt-title { position: relative; display: block; padding: 0 36px 0 5px; line-height: 30px; height: 30px; text-decoration: none; background-color: #fff; word-break: break-all; color: #666; overflow: hidden; } .select-style .slt-title .slt-text { display: inline-block; height: 30px; *cursor: pointer; } .select-style .slt-title i { position: absolute; right: 0; top: 0; display: inline-block; width: 30px; height: 30px; background: url(../images/ico-select.png) 0 0 no-repeat; *cursor: pointer; } .select-style.focus .slt-title i { background-position: 0 -30px; } .select-style.disabled .slt-title i { background-position: 0 -60px; *cursor: default; } .select-style .opn-box { display: none; position: absolute; left: 0; top: 31px; width: 100%; } .select-style.up .opn-box { top: auto; bottom: 31px; } .select-style .opn-box .opn-list { position: relative; _width: 100%; max-height: 130px; border: 1px solid #d6d6d6; background: #fff; overflow-y: auto; overflow-x: hidden; } .select-style.focus .opn-box .opn-list { border-color: #53a8df; } .select-style .opn-box .opn-list li { display: block; _width: 100%; padding-left: 5px; line-height: 26px; height: 26px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; cursor: pointer; } .select-style .opn-box .opn-list .selected { background: #d4edfe; } .select-style .opn-box .opn-list li:hover { color: #fff; background: #65abda; } .select-style .opn-box .opn-list li.disabled { color: #cacaca; background: #f0f0f0; cursor: default; } .select-style.disabled .slt-wrap { border: 1px solid #d6d6d6; } .select-style.disabled .slt-title { color: #cacaca; background-color: #f0f0f0; cursor: default; } .select-style.disabled .slt-title .slt-text { *cursor: default; } /* 下拉框样式 结束 */
Le code Jquery est le suivant :
/** * Name : 美化下拉框 **/ (function(jQuery){ $.fn.simSelect = function (o) { o = $.extend({ //设置默认参数 maxNum: 5, //最大显示5个 width: 200, //默认宽200px。为避免过多的设置宽度,尽量依照项目中最常见的宽度设定css样式。 direction: "down", //向下拉,另一个是up disabled: false //不可用时为true },o || {}); return this.each(function(){ //构造开始 if($(this).children(".slt-wrap")){ //去重复 $(this).children(".slt-wrap").remove(); }; var $ts = $(this), $select = $ts.find("select").eq(0), wid = parseFloat($ts.attr("width")), num = parseFloat($ts.attr("max-num")), $sltWrap = $("<div class='slt-wrap'></div>").prependTo($ts), $sltTit = $("<a class='slt-title' hidefocus='true' href='javascript:void(0);'><span class='slt-text'></span><i></i></a>").prependTo($sltWrap), $sltText = $(".slt-text", $sltTit), $opnBox = $("<div class='opn-box'><ul class='opn-list'></ul></div>").appendTo($sltWrap), $opnList = $(".opn-list", $opnBox); $ts.addClass("select-style"); //增加一个class专门作为写css样式用 $select.find("option").each(function(i){ //循环生成li标签 var text = $(this).text(), $li = $("<li title='"+text+"'>"+text+"</li>").appendTo($opnList); if(this.selected){ $li.addClass("selected"); $sltText.text(text).attr("title",text); }; if(this.disabled){ $li.addClass("disabled"); return; }; }); var $li = $("li",$opnList), hei = $li.height(); if(wid){ //设置宽度 $ts.css("width",wid+"px"); //兼容IE6、7 $sltWrap.css("width",wid-2+"px"); }else{ $ts.css("width",o.width+"px"); //兼容IE6、7 $sltWrap.css("width",o.width-2+"px"); }; if(num){ //设置高度 $opnList.css("max-height", hei*num+"px"); } else{ $opnList.css("max-height", hei*o.maxNum+"px"); }; if(o.direction == "up"){ //设置上、下拉方向 $ts.addClass("up"); }; $li.on("click",function(){ //li标签的点击事件,传给原生select var index = $opnList.find("li").index(this), text = $(this).text(); if($(this).hasClass("disabled")){ return false; }; $(this).addClass("selected").siblings().removeClass("selected"); $select.find("option").prop("selected",false).eq(index).prop("selected",true); $sltText.text(text).attr("title",text); $opnBox.hide(); $ts.removeClass("focus"); }); $sltTit.on("click",function(e){ //a标签的点击下拉事件 e.stopPropagation(); //阻止a标签的点击冒泡 if($opnBox.is(":hidden")){ $(".select-style .opn-box").hide(); $(".select-style").removeClass("focus"); $opnBox.show(); $ts.addClass("focus"); } else{ $opnBox.hide(); $ts.removeClass("focus"); } }); $select.on("change",function(){ //原生select的点击事件,传给ul var index = $(this).find("option:selected").index(), text = $li.eq(index).text(); $li.eq(index).addClass("selected").siblings().removeClass("selected"); $sltText.text(text).attr("title",text); }); $(document).on("click",function(e){ //点击其他地方收起下拉框 if($opnBox.is(":visible")){ $opnBox.hide(); $ts.removeClass("focus"); } }); if($select.prop("disabled") == true || o.disabled == true || $ts.hasClass("disabled")){ $sltTit.off("click"); //设置禁用状态 $select.prop("disabled",true); $ts.addClass("disabled"); }; }); }; })(jQuery);
Compatible avec IE7 (IE6 fonctionne aussi, mais il n'y aura pas de barre de défilement lorsqu'il y a plus de 5 options).
Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.