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 相关文章推荐
jquery方法+js一般方法+js面向对象方法实现拖拽效果
Aug 30 Javascript
jquery的相对父元素和相对文档定位示例代码
Aug 02 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
将list转换为json失败的原因
Dec 17 Javascript
DOM基础教程之使用DOM设置文本框
Jan 20 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
Apr 14 Javascript
JS实现的数字格式化功能示例
Feb 10 Javascript
axios学习教程全攻略
Mar 26 Javascript
vue-router history模式下的微信分享小结
Jul 05 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
Apr 17 Javascript
Vue 3.x+axios跨域方案的踩坑指南
Jul 04 Javascript
iview实现动态表单和自定义验证时间段重叠
Jan 10 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 email邮箱正则
2008/10/08 PHP
php木马webshell扫描器代码
2012/01/25 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
2015/10/10 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
Python中Django 后台自定义表单控件
2017/03/28 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
《童年》教学反思
2014/02/18 职场文书
大班开学家长寄语
2014/04/04 职场文书
供货协议书
2014/04/22 职场文书
需求分析说明书
2014/05/09 职场文书
赞美老师的演讲稿
2014/05/22 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
2015年党员自我剖析材料
2014/12/17 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
关于vue-router-link选择样式设置
2022/04/30 Vue.js
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python