JavaScript高手之路:隔行异色效果

Posted 「已注销」

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript高手之路:隔行异色效果相关的知识,希望对你有一定的参考价值。

上一章节我们使用原生JSS实现了全选、不选、反选效果,这一这章节我们来实现隔行异色效果,隔行异色的意思是某表格中奇数行和奇数行的颜色相同,偶数行和偶数行的颜色要相同,奇数行和偶数行的颜色不同,奇偶相间达到隔行异色的效果。
隔行异色的效果图如上,奇数行背景颜色为antiquewhite,偶数行背景颜色为aqua奇偶相间,当鼠标移动到某一行的时候,该行背景颜色变红,鼠标移除时恢复原来的颜色。
页面的html代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>隔行异色</title>
    <style>
        div 
            padding: 20px;
            margin: 5px;
            border: solid 1px #000;
        
    </style>
</head>
<body>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
</body>
</html>

页面的最初轮廓如此,存在11个div,每个div定义了对应的样式,控制div具有表格行的效果,但是这时候的每一行背景颜色还只是单调的透明色,接下来我们编写代码实现奇偶相间异色效果。

首先需要定义奇数行和偶数行以及当前选中行的背景颜色。

        .odd 
            background-color: aqua;
        
        .even 
            background-color: antiquewhite;
        
        .active 
            background-color: red;
        

在css中定义了三个class的样式,每个class的样式只定义了背景颜色,现在我们来看看js代码怎么实现的。

        var BgChange = function () 
            this.aDiv = document.getElementsByTagName("div");

            this.init = function() 
                for(var i = 0; i < this.aDiv.length; i++) 
                    if(i%2 == 0)  //偶数行
                        this.aDiv[i].className = "odd";
                     else  //奇数行
                        this.aDiv[i].className = "even";
                    
                
            ;
        

一如既往的,该BgChange类具有aDiv类成员属性,记录每一行div的节点,在init方法中循环遍历每一个div,如果当前行号除以2等于0,则赋值class为odd,否则class赋值为even。

接下来我们应该监听鼠标的移入和移除事件,当鼠标移入某一行时,背景颜色变为红色,移除时还原为原来的颜色,代码显示如下:

            this.changeBgColor = function () 
                oldClassName = "";

                //循环遍历每一个div
                for(var i = 0; i < this.aDiv.length; i++) 
                    //给每一行注册鼠标移入事件
                    this.aDiv[i].onmouseover = function () 
                        oldClassName = this.className;
                        this.className = "active";
                    ;
                    this.aDiv[i].onmouseout = function () 
                        this.className = oldClassName;
                    
                
            ;

该方法中用了一个oldClassName来记录当前行的class,当鼠标移除厨房onmounseout事件的时候即可还原原来的颜色,完整的BgChange类代码如下:

        var BgChange = function () 
            this.aDiv = document.getElementsByTagName("div");

            this.init = function() 
                for(var i = 0; i < this.aDiv.length; i++) 
                    if(i%2 == 0)  //偶数行
                        this.aDiv[i].className = "odd";
                     else  //奇数行
                        this.aDiv[i].className = "even";
                    
                
            ;
            this.changeBgColor = function () 
                oldClassName = "";

                //循环遍历每一个div
                for(var i = 0; i < this.aDiv.length; i++) 
                    //给每一行注册鼠标移入事件
                    this.aDiv[i].onmouseover = function () 
                        oldClassName = this.className;
                        this.className = "active";
                    ;
                    this.aDiv[i].onmouseout = function () 
                        this.className = oldClassName;
                    
                
            ;
        

驱动代码如下:

        window.onload = function () 
            var bgChange = new BgChange();
            bgChange.init();
            bgChange.changeBgColor();
        

以上是关于JavaScript高手之路:隔行异色效果的主要内容,如果未能解决你的问题,请参考以下文章

[js高手之路]面向对象版本匀速运动框架

JavaScript高手之路:封装抽奖效果

JavaScript高手之路:封装抽奖效果

JavaScript高手之路:全选不选反选效果

JavaScript高手之路:全选不选反选效果

[Js高手之路第一部]JavaScript上百例实战新版_9 javascript二重循环乘法表与n行n列的表格