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 相关文章推荐
JS对文本框值的判断示例
Mar 10 Javascript
IE下JS保存图片的简单实例
Jul 15 Javascript
DOM 事件的深入浅出(一)
Dec 05 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
Feb 09 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
Feb 20 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
May 24 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
Jun 09 jQuery
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
Jan 07 Javascript
Vue中使用webpack别名的方法实例详解
Jun 19 Javascript
Vue实现自定义下拉菜单功能
Jul 16 Javascript
微信小程序返回上一级页面的实现代码
Jun 19 Javascript
HTML元素拖拽功能实现的完整实例
Dec 04 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 各种应用乱码问题的解决方法
2010/05/09 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
PHP自定义多进制的方法
2016/11/03 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
Python SQLite3简介
2018/02/22 Python
python微信公众号之关键词自动回复
2018/06/15 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
《数星星的孩子》教学反思
2014/04/11 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
维稳承诺书
2015/01/20 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
留学推荐信中文范文
2015/03/26 职场文书
学校运动会加油词
2015/07/18 职场文书
同乡会致辞
2015/07/30 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
电频谱管理的原则是什么
2022/02/18 无线电