模拟select弹框
模拟select弹框
功能点:
点击text显示下拉框,再次点击下拉框下拉框消失
点击下拉框将值赋值给text
点击下拉框之外区域,下拉框消失
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>模拟select弹框</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<!--模拟下拉-->
<div class="model-select-box" style="width:180px; z-index:22;">
<div id="boxsex" class="model-select-text" data-value="">--请选择--</div>
<ul class="model-select-option">
<li data-option="">--请选择--</li>
<li data-option="1">男</li>
<li data-option="0">女</li>
</ul>
</div>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
<script src="index.js"></script>
</body>
</html>
css:
/*
* @Author: baby
* @Date: 2017-07-06 12:37:56
* @Last Modified by: baby
* @Last Modified time: 2017-07-06 14:38:51
*/
.model-select-box {
position: relative;
width: 200px;
height: 30px;
line-height: 30px;
background-color: #fff;
border: 1px solid #e4e4e4;
border-radius: 3px;
text-indent: 5px;
}
.model-select-box .model-select-text {
position: relative;
width: 100%;
height: 28px;
// height: 30px;
// line-height: 30px;
color: #666;
text-indent: 10px;
font-size: 14px;
cursor: pointer;
user-select: none;
}
.model-select-box .model-select-text:after {
position: absolute;
top: 10px;
right: 10px;
content: '';
width: 0;
height: 0;
border-width: 10px 8px 0;
border-style: solid;
border-color: #666 transparent transparent;
}
.model-select-box .model-select-option {
position: absolute;
top: 30px;
left: -1px;
display: none;
list-style: none;
border: 1px solid #e4e4e4;
border-top: none;
padding: 0;
margin: 0;
width: 100%;
z-index: 99;
background-color: #fff;
}
.model-select-box .model-select-option li {
height: 28px;
line-height: 28px;
color: #333;
font-size: 14px;
margin: 0;
padding: 0;
// text-indent: 10px;
cursor: pointer;
}
.model-select-box .model-select-option li:hover {
background-color: #f3f3f3;
}
.model-select-box .model-select-option li.seleced {
background-color: #f3f3f3;
}
js:
/*
* @Author: baby
* @Date: 2017-07-06 12:38:11
* @Last Modified by: baby
* @Last Modified time: 2017-07-06 14:24:53
* 模拟select弹框
* 功能点:
* 1. 点击text显示下拉框,再次点击下拉框下拉框消失
* 2. 点击下拉框将值赋值给text
* 3. 点击下拉框之外区域,下拉框消失
*
*/
'use strict';
$(function() {
selectModel();
});
/**
* 模拟网页中所有下拉列表select
* @return {[type]} [description]
*/
function selectModel() {
var $box = $('div.model-select-box');
var $option = $('ul.model-select-option', $box);
var $txt = $('div.model-select-text', $box);
var speed = 10;
/**
* 单击某个下拉列表时,显示当前下拉列表的下拉列表框
* 并隐藏页面中其他下拉列表
*/
$txt.on('click', function() {
var $self = $(this);
$option.not($self).siblings('ul.model-select-option').slideUp(speed, function() {
init($self);
});
$self.siblings('ul.model-select-option').slideToggle(speed, function() {
init($self);
});
return false;
});
// 点击选择,关闭其他下拉
/**
* 为每个下拉列表框中的选项设置默认选中标识 data-selected
* 点击下拉列表框中的选项时,将选项的 data-option 属性的属性值赋给下拉列表的 data-value 属性,并改变默认选中标识 data-selected
* 为选项添加 mouseover 事件
*/
$option.find('li').each(function(index, element) {
var $self = $(this);
if ($self.hasClass('selected')) {
$self.addClass('data-selected');
}
}).mousedown(function() {
$(this).parent().siblings('div.model-select-text').text($(this).text()).attr('data-value', $(this).attr('data-option'));
$option.slideUp(speed, function() {
init($(this));
});
$(this).addClass('selected data-selected').siblings('li').removeClass('selected data-selected');
return false;
}).mouseover(function() {
$(this).addClass('selected').siblings('li').removeClass('selected');
});
// 点击文档隐藏所有下拉
$(document).on('click', function() {
var $self = $(this);
$option.slideUp(speed, function() {
init($self);
})
});
/**
* 初始化默认选择
*/
function init(obj) {
obj.find('li.data-selected').addClass('selected').siblings('li').removeClass('selected');
}
}
推荐阅读
「多图预警」完美实现一个@功能
一天产品大大向 boss 汇报完研发成果和产品业绩产出,若有所思的走出来,劲直向我走过来,嘴角微微上扬。产品大大:boss 对我们的研发成果挺满意的,balabala...(内心 OS:不听,讲重点)产品大大:咱们的客服 I...
wuwhs赞 39阅读 4.7k评论 5
安全地在前后端之间传输数据 - 「3」真的安全吗?
在「2」注册和登录示例中,我们通过非对称加密算法实现了浏览器和 Web 服务器之间的安全传输。看起来一切都很美好,但是危险就在哪里,有些人发现了,有些人嗅到了,更多人却浑然不知。就像是给门上了把好锁,还...
边城赞 31阅读 7.1k评论 5
涨姿势了,有意思的气泡 Loading 效果
今日,群友提问,如何实现这么一个 Loading 效果:这个确实有点意思,但是这是 CSS 能够完成的?没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元素可能多点。参考我们...
chokcoco赞 19阅读 2k评论 2
在前端使用 JS 进行分类汇总
最近遇到一些同学在问 JS 中进行数据统计的问题。虽然数据统计一般会在数据库中进行,但是后端遇到需要使用程序来进行统计的情况也非常多。.NET 就为了对内存数据和数据库数据进行统一地数据处理,发明了 LINQ (L...
边城赞 17阅读 1.9k
【已结束】SegmentFault 思否写作挑战赛!
SegmentFault 思否写作挑战赛 是思否社区新上线的系列社区活动在 2 月 8 日 正式面向社区所有用户开启;挑战赛中包含多个可供作者选择的热门技术方向,根据挑战难度分为多个等级,快来参与挑战,向更好的自己前进!
SegmentFault思否赞 20阅读 5.6k评论 10
过滤/筛选树节点
又是树,是我跟树杠上了吗?—— 不,是树的问题太多了!🔗 相关文章推荐:使用递归遍历并转换树形数据(以 TypeScript 为例)从列表生成树 (JavaScript/TypeScript) 过滤和筛选是一个意思,都是 filter。对于列表来...
边城赞 18阅读 7.6k评论 3
Vue2 导出excel
2020-07-15更新 excel导出安装 {代码...} src文件夹下新建一个libs文件夹,新建一个excel.js {代码...} vue页面中使用 {代码...} ===========================以下为早期的文章今天在开发的过程中需要做一个Vue的...
原谅我一生不羁放歌搞文艺赞 14阅读 19.8k评论 9
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。