原生js实现音乐列表(隔行换色、全选)
一、实现原理:
1、使用 % 运算符实现各行换色,规律:当%前面的值和后面的值相同时 结果为0;
2、使用开关思想,实现在同一个元素上反复点击时的条件判断,并且把开关以属性方式绑定在每个元素上;
3、使用大总管变量,记录鼠标移入时的下标,用于设置鼠标离开时的颜色
4、使用变量记录每选中一行就自增1 取消选中就自减1,当变量数值与行的长度相等时 说明全选了;
二、代码:

<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
*{margin: 0;padding: 0}
ul,li{ list-style: none; }
.wrap{width:300px; margin: 50px auto;padding: 10px;border: 1px solid #eee;}
.wrap ul{display: block; overflow: hidden;clear: both;}
.wrap ul li{display:block;width:100%; float: left; height: 40px;line-height: 40px; overflow: hidden; clear: both;}
.wrap ul li.on{ background: #222 !important;color: #fff; }
#all{border-top:1px solid #eee;}
</style>
</head>
<body>
<div class="wrap">
<ul id="box">
<li><input type="checkbox">认真的雪</li>
<li><input type="checkbox">再见</li>
<li><input type="checkbox">大约在冬季</li>
<li><input type="checkbox">蜗牛</li>
<li><input type="checkbox">光辉岁月</li>
</ul>
<div id="all">
<input type="checkbox">全选
</div>
</div>
<script type="text/javascript">
window.onload = function(){
var box = document.getElementById('box')
var lis = box.getElementsByTagName('li');
var cklist = box.getElementsByTagName('input');
var allbtn = document.getElementById('all').getElementsByTagName('input')[0];
allbtn.onoff = true;//设置开关 用于多次点击时的状态判断
var colorArr = ['orange','pink'];
var num; //大总管变量,记录鼠标移入时的下标,用于设置鼠标离开时的颜色
var allnum = 0; // 每选中一行就自增1 取消选中就自减1
for (var i = 0; i < lis.length; i++) {
// 给每一行加下标
lis[i].index = i;
// 给每一行加开关
lis[i].onoff = true;
// js实现隔行换色
lis[i].style.background = colorArr[i%colorArr.length];
// 鼠标移入行
lis[i].onmouseover = function(){
num = this.index;
this.style.background = '#ccc';
}
// 鼠标移出行
lis[i].onmouseout = function(){
this.style.background = colorArr[num%colorArr.length];
}
// 鼠标点击
lis[i].onclick = function(){
//判断该li上的开关,如果为true则添加选中状态,否则就去除选中状态
if(this.onoff){
//设置当前为选中状态,当前行上的checkbox为选中状态,变量自增1
this.className = 'on';
cklist[this.index].checked = 'checked';
allnum++;
}else{
//设置当前为默认状态,当前行上的checkbox为非选中状态,变量自减1
this.className = '';
cklist[this.index].checked = '';
allnum--;
}
//更改当前行上的开关属性
this.onoff = !this.onoff;
// 根据allnum变量判断 全选按钮是否应该选中
if( allnum == cklist.length ) {
allbtn.checked = 'checked'
}else{
allbtn.checked = ''
}
}
};
allbtn.onclick = function(){
if(allbtn.onoff){
for (var i = 0; i < lis.length; i++) {
lis[i].className = 'on';
cklist[i].checked = 'checked';
lis[i].onoff = false;
}
}else{
for (var i = 0; i < lis.length; i++) {
lis[i].className = '';
cklist[i].checked = '';
lis[i].onoff = true;
}
}
allbtn.onoff = !allbtn.onoff;
}
}
</script>
</body>
</html>
原生js实现音乐列表(隔行换色、全选)的更多相关文章
- jQuery-----隔行换色/全选全不选/
隔行换色: 全选全不选: 分析: 1.页面加载 $(function(){}) 2.获取所有奇数行数 ...
- 使用JS创建表格以及隔行换色(包括隔N行换色)
<html> <head> <title></title> <style> table{ width:800px; border-colla ...
- DTcms列表隔行换色;loop自带行号
<%loop cdr2 bcategoryList%> <%if(cdr2__loop__id==1)%> <a class="no-bg" href ...
- JS给TR隔行换色,鼠标经过有动感
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...
- 利用JS动态生成隔行换色HTML表格
用JS生成动态生成表格,行.列由用户输入,并使表格隔行换色 方法一. 代码: <!DOCTYPE html> 2 <html> 3 <head> 4 <tit ...
- js课程 4-11 表格如何实现隔行换色
js课程 4-11 表格如何实现隔行换色 一.总结 一句话总结:表格奇数行和偶数行判断,赋予不同的样式. 1.表格如何隔行换色? 表格奇数行和偶数行判断,赋予不同的样式. 21 <script& ...
- JS实现自定义工具类,隔行换色、复选框全选、隔行高亮等
很多功能都可以放在js的工具类中,在使用的时候直接调用 本次实现的功能包括: /** 0.当点击表的整行的任意位置时,第一列的复选框或者单选框均选中 1.隔行换色 2.复选框的全选效果 3.实现表格 ...
- JS应用实例4:表格隔行换色
HTML代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- js实现表单的隔行换色、鼠标高亮出来等相关内容以及相关事件的作用
主要是使用的onload().onmouseover和onmouseout的相关应用,满足此次的相关操作. 具体的相关的两个代码如下: <!DOCTYPE html> <html&g ...
随机推荐
- sorted排序算法
- codeforces 616D
题意:给你n个数,找出一个最大的区间,满足:不同的数值个数不超过k; //我开始又看错题了. 以为是找出一个最大区间,里面的数的最大值不超过k; 思路:利用一个窗口滑动,左端点表示当前位置,右端点表示 ...
- H3C ACL规则的匹配顺序
- JQuery操作select下拉框
JQuery操作select下拉框 获取Select选择的Text和Value $("#select_id").change(function(){//code...}); //为 ...
- 浅谈集合框架六——集合扩展:Arrays工具类、集合与数组相互转换方式;
最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...
- 2018-8-10-win10-uwp-绘图--Line-控件使用
title author date CreateTime categories win10 uwp 绘图 Line 控件使用 lindexi 2018-08-10 19:16:51 +0800 201 ...
- 【58.33%】【codeforces 747B】Mammoth's Genome Decoding
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 2019-9-24-dotnet-remoting-使用事件
title author date CreateTime categories dotnet remoting 使用事件 lindexi 2019-09-24 15:39:26 +0800 2018- ...
- Vue-route页面切换过渡动画
重点: 1.判断路由前进还是后退 2.切换时动画如何实现 1.需要给各个页面定义层级,切换路由时判断进入哪个层级页面,如果进入层级高页面做前进动画,否则做后退动画在路由定义中添加meta自定义参数 ...
- 消息驱动Bean
消息驱动bean是专门用来处理基于消息请求的组件.MDB负责处理消息,而EJB容器则负责处理服务(事务,安全,并发,消息确认等),使Bean的开发者集中精力在处理消息的业务逻辑上. 消息驱动Bean. ...