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 27 Javascript
用一段js程序来实现动画功能
Mar 06 Javascript
javascript学习网址备忘
May 29 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
Dec 28 Javascript
JavaScript中的无阻塞加载性能优化方案
Oct 10 Javascript
javascript等号运算符使用详解
Apr 16 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
Oct 26 Javascript
vue.js或js实现中文A-Z排序的方法
Mar 08 Javascript
vue监听键盘事件的快捷方法【推荐】
Jul 11 Javascript
JavaScript多态与封装实例分析
Jul 27 Javascript
javascript操作元素的常见方法小结
Nov 13 Javascript
小谈angular ng deploy的实现
Apr 07 Javascript
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
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
zf框架的校验器InArray使用示例
2014/03/13 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
Python实现端口复用实例代码
2014/07/03 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
如何使用Python调整图像大小
2020/09/26 Python
西班牙在线光学:Visual-Click
2020/06/22 全球购物
工程测量与监理专业应届生求职信
2013/11/27 职场文书
应聘自荐信
2013/12/14 职场文书
房地产融资计划书
2014/01/10 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
教师节主题班会教案
2015/08/17 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android