原生JS实现上拉下拉列表
话不多说,代码上来,有些知识点直接就在注释里
HTML
<div class="list-down">
<button id="btn">选择项</button>
<ul id="list-chooses" style="display: none;">
<li><a href="#">Python</a></li>
<li><a href="#">JavaScript</a></li>
<li><a href="#">Java</a></li>
<li><a href="#">PHP</a></li>
<li><a href="#">C++</a></li>
<li><a href="#">C语言</a></li>
<li><a href="#">Android</a></li>
<li><a href="#">微信小程序</a></li>
<li><a href="#">Node.js</a></li>
<li><a href="#">Bootstrap</a></li>
<li><a href="#">HTML && CSS</a></li>
<li id="close"><a href="#">关闭</a></li>
</ul>
</div>
CSS
<style type="text/css">
* {
margin:;
padding:;
font-size: 16px;
/* 消除按钮点击之后默认出现的蓝色边框 */
outline: none;
}
ul {
list-style: none;
}
.list-down {
width: 150px;
margin: 10px auto;
text-align: center;
}
.list-down button {
width: 150px;
height: 40px;
cursor: pointer;
background-color: #ea6f5a;
border: none;
color: #ccc;
}
.list-down button:hover {
color: #fff;
font-size: 17px;
font-style:;
}
.list-down button:focus {
border: none;
} .list-down #list-chooses {
border-top: 1px solid #ddd;
}
.list-down #list-chooses li {
width: 150px;
height:;
line-height: 40px;
background-color: #ea6f5a;
}
.list-down #list-chooses li a {
color: #ccc;
text-decoration: none;
}
.list-down #list-chooses li:hover a {
color: #fff;
font-size: 17px;
font-style:;
}
.list-down #list-chooses li#close {
border-top: 1px solid #ddd;
}
</style>
JavaScript
<script type="text/javascript">
window.onload = () => {
const listBtn = document.getElementById('btn')
const lists = document.getElementById('list-chooses');
const listsLis = lists.querySelectorAll('li');
const listsCloseBtn = document.getElementById('close');
// 列表选项从上而下出现
let listDown = () => {
let startHeight = 0;
let stopHeight = 40;
let timeId = setInterval(() => {
startHeight++;
// 注意:forEach() 方法在 IE8 以下不支持
listsLis.forEach((item) => {
item.style.height = startHeight + 'px';
});
if (startHeight >= stopHeight) {
clearInterval(timeId);
}
}, 10);
lists.style.display = 'block';
};
// 列表选项从下而上消失
let listUp = () => {
let startHeight = 40;
let stopHeight = 0;
let timeId = setInterval(() => {
startHeight--;
listsLis.forEach((item) => {
item.style.height = startHeight + 'px';
});
if (startHeight <= stopHeight) {
clearInterval(timeId);
}
}, 10);
// 这里,如果不延时的话,会直接消失,而没有上拉的效果
setTimeout(() => {
lists.style.display = 'none';
}, 350);
};
// 如果列表选项为隐藏,点击则显示;如果列表选项为显示,点击则隐藏
listBtn.addEventListener('click', () => {
if (lists.style.display == 'none') {
listDown();
} else {
listUp();
}
});
listsCloseBtn.addEventListener('click', () => {
listUp();
});
};
</script>
原生JS实现上拉下拉列表的更多相关文章
- 原生js实现上拉加载
原生js实现上拉加载其实超级简单,把原理整明白了你也会,再也不用去引一个mescroll啦~ 好了,废话不多说,开始进入正题:上拉加载是怎么去做的,原理就是监听滚动条滑到页面底部,然后就去做一次请求数 ...
- js_原生js实现上拉加载更多的功能。
1.人生啊,是我莽撞了啊.这是我公司一个喜欢读书的女孩子的个性签名,喜欢哪些句子,不悲伤,却切切实实的令人喜好. 2.写程序是一件很直接明了的事情,明白了就是明白了,不懂就是不懂,不懂装懂的会让你走很 ...
- iscroll.js实现上拉刷新,下拉加载更多,应用技巧项目实战
上拉刷新,下拉加载更多...仿原生的效果----iscroll是一款做滚动效果的插件,具体介绍我就不废话,看官方文档,我只写下我项目开发的一些用到的用法: (如果不好使,调试你的css,想必是个很蛋疼 ...
- 引用iScroll.js实现上拉和下拖刷新
使用技巧 1.引用iScroll.js, 在初始化时添加两个事件监听:touchMove.DOMContentLoaded. 2.实现iScroll插件的onScrollEnd事件, 也就是在这个事件 ...
- dropload.js(上拉加载插件使用过程中遇到的坑)
dropload.js相关介绍和使用以及demo下载详见:https://github.com/ximan/dropload (原文出处) 之前因为项目需要一个上拉加载的效果,然后无意中看到了此插件, ...
- js:基于原生js的上啦下啦刷新功能
链接:https://www.jianshu.com/p/a8392115e6f0演示地址:http://wonghan.cn/iscroll-demo/html:<body> <d ...
- js实现上拉加载思路整理
1.整体模拟滚动 监听touchmove事件,比较 scrollTop 和 $scroller.scrollHeight() - $container.height(). 缺点:滑动不流畅, tran ...
- 原生js封装二级城市下拉列表
闲的蛋疼,封装了个二级城市下拉 先保证html里有 <select id="province" size=1 > </select> <select ...
- 原生js实现二级联动下拉列表菜单
二级联动下拉列表菜单的难点在于对后台返回的数据进行解析,不多逼逼,直接上代码 上图是后台返回的数据 实现代码如下: var deviceNotExist = true;//防止数据重复 if(data ...
随机推荐
- jquery 统计统计子标签的个数
本文实例讲述了jQuery获得子元素个数的方法.分享给大家供大家参考.具体分析如下://获取id=div1下的子元素的个数$('#div1').children().length;//获取id=div ...
- Comet OJ 夏季欢乐赛 篮球校赛
Comet OJ 夏季欢乐赛 篮球校赛 题目传送门 题目描述 JWJU注重培养学生的"唱,跳,rap,篮球"能力.于是每年JWJU都会举办篮球校赛,来给同学们一个切磋篮球技术的平台 ...
- 用js写个原生的ajax过程
var xhr=new XMLHttpRequset(); xhr.addEventListener("load",loadHandler); xhr.open("GET ...
- 大数据-使用Hive导入10G数据
前言 Hadoop和Hive的环境已经搭建起来了,开始导入数据进行测试.我的数据1G大概对应500W行,MySQL的查询500W行大概3.29秒,用hive同样的查询大概30秒.如果我们把数据增加到1 ...
- STRING Cytoscape 网络互作图
网络图(Network)看似复杂,其实构成非常简单,网络图是一种图解模型,形状如同网络,故称网络图,由节点(node)和连线(edge)两个因素组成的.其中 node 又分为 source node( ...
- Kdtree原理以及 vs Octree
1. Kdtree原理 Kdtree是一种划分k维数据空间的数据结构,本质也是一颗二叉树,只不过每个节点的数据都是k维,当k=1时,就是图1所示的普通二叉树. 图1 1)Kdtree的建立 建立Kdt ...
- 每日一问:谈谈对 MeasureSpec 的理解
作为一名 Android 开发,正常情况下对 View 的绘制机制基本还是耳熟能详的,尤其对于经常需要自定义 View 实现一些特殊效果的同学. 网上也出现了大量的 Blog 讲 View 的 onM ...
- klass-oop
(1)Klass Klass 简单来说就是 Java 类在 HotSpot 中的 C++ 对等体,主要用于描述对象实例的具体类型.一般 JVM 在加载 class 文件时,会在方法区创建 Klass ...
- mysql 数据库中的每张表加同一个字段(避免重复加)
DROP PROCEDURE IF EXISTS testEndHandle; DELIMITER $$ CREATE PROCEDURE testEndHandle() BEGIN DECLARE ...
- 【操作系统之四】Linux常用命令之awk
一.概念awk是一个报告生成器,拥有强大的文本格式化能力. 数据可以来自标准输入(stdin).一个或多个文件,或其它命令的输出: 依次对每一行进行处理,然后输出: 它在命令行中使用,但更多是作为脚本 ...