一、实现原理:

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实现音乐列表(隔行换色、全选)的更多相关文章

  1. jQuery-----隔行换色/全选全不选/

    隔行换色:              全选全不选:        分析:               1.页面加载   $(function(){})               2.获取所有奇数行数 ...

  2. 使用JS创建表格以及隔行换色(包括隔N行换色)

    <html> <head> <title></title> <style> table{ width:800px; border-colla ...

  3. DTcms列表隔行换色;loop自带行号

    <%loop cdr2 bcategoryList%> <%if(cdr2__loop__id==1)%> <a class="no-bg" href ...

  4. JS给TR隔行换色,鼠标经过有动感

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...

  5. 利用JS动态生成隔行换色HTML表格

    用JS生成动态生成表格,行.列由用户输入,并使表格隔行换色 方法一. 代码: <!DOCTYPE html> 2 <html> 3 <head> 4 <tit ...

  6. js课程 4-11 表格如何实现隔行换色

    js课程 4-11 表格如何实现隔行换色 一.总结 一句话总结:表格奇数行和偶数行判断,赋予不同的样式. 1.表格如何隔行换色? 表格奇数行和偶数行判断,赋予不同的样式. 21 <script& ...

  7. JS实现自定义工具类,隔行换色、复选框全选、隔行高亮等

    很多功能都可以放在js的工具类中,在使用的时候直接调用 本次实现的功能包括: /** 0.当点击表的整行的任意位置时,第一列的复选框或者单选框均选中  1.隔行换色 2.复选框的全选效果 3.实现表格 ...

  8. JS应用实例4:表格隔行换色

    HTML代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...

  9. js实现表单的隔行换色、鼠标高亮出来等相关内容以及相关事件的作用

    主要是使用的onload().onmouseover和onmouseout的相关应用,满足此次的相关操作. 具体的相关的两个代码如下: <!DOCTYPE html> <html&g ...

随机推荐

  1. CSS引入的方式有哪些? link和@import的区别是?

    CSS引入的方式包括内联 内嵌 外链 导入 link和@import的区别是 : ①link属于XHTML标签,除了加载CSS外,还能 用于定义RSS, 定义rel连接属性等作用:而@import是C ...

  2. HBuider快捷键

    朋友推荐用Hbuilder编辑器,看了下Hbuilder官网和那视频,感觉牛逼哄哄的, 自己也就体验了一下,打开Hbuilder的快捷键列表,每个快捷键都体验了一下,以下展示出来的,每一个都是精华,每 ...

  3. MySQL存储引擎MyISAM与InnoDB区别

    简单的表达.  MyISAM 是非事务的存储引擎.  innodb是支持事务的存储引擎.    innodb的引擎比较适合于插入和更新操作比较多的应用  而MyISAM 则适合用于频繁查询的应用    ...

  4. TSLint-Angular 配置

    代码风格和语义的检查工具,帮助规范 TS 和 Angular 代码书写: 安装: => cnpm install // 安装相关依赖 全局安装 cnpm install -g tslint ty ...

  5. koa2--04.ejs模板引擎

    首先在项目文件下使用cmd,输入:npm install --save koa-views ejs,将koa-views中间件和ejs模板引擎安装到文件中,并自动写入依赖 接在在index.js文件中 ...

  6. 使用Squid做代理服务器,Squid单网卡透明代理配置详解(转)

    使用Squid做代理服务器 说到代理服务器,我们最先想到的可能是一些专门的代理服务器网站,某些情况下,通过它们能加快访问互联网的速度.其实,在需要访问外部的局域网中,我们自己就能设置代理,把访问次数较 ...

  7. Team Foundation Server 2015使用教程【3】:默认团队成员连接tfs及checkin操作

  8. 对“TD信息树”的使用体验

    在本次同2017级学长进行的软件交流会上,我们有幸使用学长们开发的软件与成果,进过27个不尽相同的软件的使用,让我初步意识到了学习软件工程这门学科的实用价值.最终我选择了"TD信息树&quo ...

  9. IDE介绍之——CLion

    CLion是JetBrains公司旗下发布的一款跨平台C/C++IDE开发工具. 使用CLion上最好要会手写CMake.要先安装编译器套件(一般安装MinGW就行). 对C++标准的支持:基本上Cl ...

  10. 定位、识别;目标检测,FasterRCNN

    定位: 针对分类利用softmax损失函数,针对定位利用L2损失函数(或L1.回归损失等) 人关节点检测 针对连续变量和离散变量需要采用不同种类的损失函数. 识别: 解决方案: 1.利用滑动窗口,框的 ...