js实现select选择框效果及美化


Posted in Javascript onAugust 19, 2016

网上有各种各样的关于 select 选择框的美化,找了很多,并没有好的样式效果。所以就找了一个利用 ul li 做的类似 select 选择框的效果,不废话了,先上图,效果如下:

js实现select选择框效果及美化

点击一个 test ,就会把列表显示出来,再次点击,列表隐藏,选择一个 li ,就会把 span 里的内容替换成 li 的内容,然后可以用 js 监控 span 的变化,然后执行你的代码。效果如下: 

html 代码如下: 

<div id="type" class="test">
 <span>投资种类</span>
 <ul class="dropdown">
 <li>期货</li>
 <li>股票</li>
 <li>期权</li>
 </ul>
</div>
<div id="kind" class="test">
 <span>投资类型</span>   
 <ul class="dropdown">
 <li>趋势</li>
 <li>震荡</li>
 <li>套利</li>
 <li>选股</li>
 <li>择时</li>
 </ul>
</div>

css 代码如下: 

ul li{
 list-style: none;
}
.test {
 position: relative;
 float: left;
 width: 120px;
 height: 40px;
 padding-left: 11px;
 font-size: 15px;
 line-height: 40px;
 cursor: pointer;
 border: 1px solid #d2d2d2;
 border-radius: 3px;
 margin-right: 20px;
 outline: none;
}
.test:before {
 position: absolute;
 right: 13px;
 top: 18px;
 width: 0;
 height: 0;
 content: "";
 border-width: 8px 8px 0 8px;
 border-style: solid;
 border-color: #d36969 transparent;
 -webkit-transition: transform .25s;
 -moz-transition: transform .25s;
 -ms-transition: transform .25s;
  -o-transition: transform .25s;
  transition: transform .25s;
}
.test:after {
 position: absolute;
 right: 15px;
 top: 18px;
 width: 0;
 height: 0;
 content: "";
 border-width: 6px 6px 0 6px;
 border-style: solid;
 border-color: #fff transparent;
 -webkit-transition: all .25s;
 -moz-transition: all .25s;
 -ms-transition: all .25s;
  -o-transition: all .25s;
  transition: all .25s;
}
.test.active:before{
 -webkit-transform: rotate(180deg);
 -moz-transform: rotate(180deg);
 -ms-transform: rotate(180deg);
  -o-transform: rotate(180deg);
  transform: rotate(180deg); 
}
.test.active:after{
 top: 20px;
 -webkit-transform: rotate(180deg);
 -moz-transform: rotate(180deg);
 -ms-transform: rotate(180deg);
  -o-transform: rotate(180deg);
  transform: rotate(180deg); 
}
.test .dropdown {
 position: absolute;
 right: 0;
 left: 0;
 display: none;
 padding: 0;
 border-radius: inherit;
 border: 1px solid #d2d2d2;
 box-shadow: 2px 2px 5px rgba(0,0,0,.4);
}
.test.active .dropdown {
 display: block;
}
.test .dropdown:before {
 position: absolute;
 right: 13px;
 bottom: 100%;
 width: 0;
 height: 0;
 content: "";
 border-width: 0 8px 8px 8px;
 border-style: solid;
 border-color: #d2d2d2 transparent;
}
.test .dropdown:after {
 position: absolute;
 right: 15px;
 bottom: 100%;
 width: 0;
 height: 0;
 content: "";
 border-width: 0 6px 6px 6px;
 border-style: solid;
 border-color: #fff transparent;
}
.test .dropdown li {
 float: left;
 width: 129px;
 font-size: 14px;
 -webkit-transition: all .3s ease-out;
 -moz-transition: all .3s ease-out;
 -ms-transition: all .3s ease-out;
  -o-transition: all .3s ease-out;
  transition: all .3s ease-out;
 text-align: center;
}
.test .dropdown li:first-of-type {
 border-radius: 3px 3px 0 0;
}
.test .dropdown li:last-of-type {
 border-radius: 0 0 3px 3px;
}
.test .dropdown li:hover {
 color: #fff;
 background: #c43c3d;
}

对于 :before 和 :after 两个伪元素不理解可以去看看我上篇博客 点击这里

js 代码如下: 

function DropDown(el) {
 this.dd = el;
 this.span = this.dd.children('span');
 this.li = this.dd.find('ul.dropdown li');
 this.val = '';
}
DropDown.prototype.initEvents = function() {
 var obj = this;
 obj.dd.on('click', function(event){
 $(this).toggleClass('active').siblings().removeClass('active');
 event.stopPropagation();
 });
 obj.li.on('click', function() {
 var opt = $(this);
 obj.val = opt.html();
 if (obj.span.html() == obj.val) return;   
 obj.span.html(obj.val);
 $(document).click(function() {
  $('.test').removeClass('active');
 });
 })
}
var test1 = new DropDown($('#type'));
var test2 = new DropDown($('#kind'));
test1.initEvents();
test2.initEvents()

这里使用构造-原型组合模式来创建了一个 DropDown 对象,构造-原型组合模式解释:属性写在构造函数中,是表示每个实例独有的属性,让对象具体化;方法写在构造函数外,是为了表示每个实例共享的方法。 

但是这里有点不好的方法是,已限制了 html 的布局。

精彩专题分享:javascript选择框操作汇总    jquery选择框操作汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript实现动态增加文件域表单
Feb 12 Javascript
javascript多种数据类型表格排序代码分析
Sep 11 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
Oct 29 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
Dec 07 Javascript
javascript url几种编码方式详解
Jun 06 Javascript
微信小程序 WebSocket详解及应用
Jan 21 Javascript
JS打印彩色菱形的实例代码
Aug 15 Javascript
Vue中的循环及修改差值表达式的方法
Aug 29 Javascript
layui实现tab的添加拒绝重复的方法
Sep 04 Javascript
es6中new.target的作用和使用场景简单示例分析
Mar 14 Javascript
Webpack的Loader和Plugin的区别
Nov 09 Javascript
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
JavaScript面向对象编写购物车功能
Aug 19 #Javascript
javascript设计模式之module(模块)模式
Aug 19 #Javascript
JS实现六位字符密码输入器功能
Aug 19 #Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
Aug 19 #Javascript
巧用jQuery选择器提高写表单效率的方法
Aug 19 #Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
Aug 19 #Javascript
JavaScript使用键盘输入控制实现数字验证功能
Aug 19 #Javascript
You might like
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
使用Sphinx对索引进行搜索
2013/06/25 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
node.js实现端口转发
2016/04/14 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
python测试驱动开发实例
2014/10/08 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
Python 错误和异常代码详解
2018/01/29 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
对pandas中to_dict的用法详解
2018/06/05 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
英国当代时尚和街头服饰店:18montrose
2018/12/15 全球购物
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
super关键字的用法
2012/04/10 面试题
业务部主管岗位职责
2014/01/29 职场文书
电子信息工程自荐信
2014/05/26 职场文书
项目经理任命书内容
2014/06/06 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
营销与策划实训报告
2014/11/05 职场文书
2014年库房工作总结
2014/11/26 职场文书
Ajax是什么?Ajax高级用法之Axios技术
2021/04/21 Javascript
千万级用户系统SQL调优实战分享
2022/03/03 MySQL