JS/CSS 实现鼠标移动更改列表奇偶行背景色

2023-11-17

需求: 鼠标移动到一个列表时, 奇数行显示一种背景色,偶数行显示另一种背景色。鼠标移出时,背景色复原;
实现效果:
在这里插入图片描述
代码实现(CSS/JS ):

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>鼠标滑过奇偶行出现底色</title>
    <style>
        * {
            margin: 0px;
            padding: 0px;
        }
        
        #newsBox {
            box-sizing: border-box;
            list-style: none;
            padding: 20px;
            margin: 20px auto;
            height: 400px;
            width: 400px;
            border: 3px solid lightblue;
        }
        
        #newsBox li {
            height: 40px;
            padding: 10px;
            line-height: 40px;
            text-align: left;
            border-bottom: 1px dashed lightcoral;
        }
        /* 最后一个li不需要底线 */
        
        #newsBox li:nth-last-child(1) {
            border-bottom: none;
        }
        /* CSS 实现奇偶行换色 */
        /* CSS li 偶数行设置背景色 */
        
        #newsBox li:nth-child(even) {
            background-color: lightgray;
        }
        /* CSS li 奇数行设置背景色 */
        
        #newsBox li:nth-child(odd) {
            background-color: #FFF;
        }
        /* CSS鼠标移动背景变成粉红色,字体加粗加大 */
        
        #newsBox li:hover {
            background-color: aquamarine;
            font-weight: bold;
            font-size: large;
        }
    </style>
</head>

<body>
    <!-- ul#newsBox>li*5{这是今日第$条新闻} -->
    <ul id="newsBox">
        <li>这是今日第1条新闻</li>
        <li>这是今日第2条新闻</li>
        <li>这是今日第3条新闻</li>
        <li>这是今日第4条新闻</li>
        <li>这是今日第5条新闻</li>
    </ul>
    <!-- IMPORT JS -->
    <!-- <script>
        // 根据TagName获取li元素组, 返回的是一个类数组
        let newsList = document.getElementsByTagName("li");
        console.dir(newsList);
        // 奇偶行设置不同的颜色
        for (let i = 0; i < newsList.length; i++) {
            /*if (i % 2 === 0) {
                newsList[i].style.backgroundColor = 'lightgray';
            } else {
                newsList[i].style.backgroundColor = 'lightslategray';
            }*/
            // 改为三元运算符
            newsList[i].style.backgroundColor = i % 2 === 0 ? '#FFF' : 'lightgray';
            // 鼠标在上,文字加大加粗
            newsList[i].onmouseover = function() {
            // this 代表的是当前的li元素对象
                this.style.backgroundColor = "aquamarine";
                this.style.fontWeight = 'bold';
                this.style.fontSize = 'large';
                // 鼠标移走,文字背景复原
                newsList[i].onmouseout = function() {
                    this.style.backgroundColor = i % 2 === 0 ? '#FFF' : 'lightgray';
                    this.style.fontSize = 'normal';
                    this.style.fontWeight = 'normal';
                }
            }
        }
    </script> -->

</body>

</html>

技术小结:
CSS:

  1. ul#newsBox>li*5{这是今日第$条新闻} 使用了Emmet语法. 可以快速生成HTML标签
  2. #newsBox li:nth-last-child(1) : 对于列表来说, 定位到li后, nth-last-child(1) 表示找到倒数最后一个li;
  3. #newsBox li:nth-child(even) : 对于列表来说, 定位到li后,nth-child(even) 表示偶数行的li元素;
  4. #newsBox li:nth-child(odd): 对于列表来说, 定位到li后,nth-child(odd) 表示奇数行的li元素;

JS:

  1. document.getElementsByTagName(“li”): 根据元素的TagName获取元素,返回的是类数组(和数组的区别在于,有些方法是没有的)。类数组属性是012…, 有length属性;
  2. newsList[i].style.backgroundColor = i % 2 === 0 ? ‘#FFF’ : ‘lightgray’; 三元运算也可以赋值给一个变量值;
  3. 鼠标移至事件名: onmouseover
  4. 鼠标移走事件名: onmouseout
  5. 如果是赋值style,则 style可以不为行内元素 , 而获取style 属性值时, style 必须要为行内元素
  6. 自定义属性的使用方法: 一开始的时候知道这些值,后面这个值会变,但是最后还需要用到原来的值,所以我们是先将原来的值存起来(以属性的形式),后面要用的时候,直接从元素身上获取即可.

使用JS的自定义属性实现方式:
此处定义了自定义属性orignBg, 因为原先背景色后面需要再使用, 所以需要将该属性值存到自定义属性中。

<!-- 方式二: 使用自定义属性 -->
    <script>
        let newsList = document.getElementsByTagName("li");
        for (var i = 0; i < newsList.length; i++) {

            newsList[i].style.backgroundColor = i % 2 === 0 ? '#FFF' : 'lightgray';
            newsList[i].orignBg = newsList[i].style.backgroundColor;
            newsList[i].onmouseover = function() {
                this.style.backgroundColor = "aquamarine";
                this.style.fontWeight = 'bold';
                this.style.fontSize = 'large';
            }
            newsList[i].onmouseout = function() {
                this.style.backgroundColor = this.orignBg;
                this.style.fontSize = 'normal';
                this.style.fontWeight = 'normal';
            }

        }
    </script>

对于该题, 最好是使用CSS实现,但是为了练习JS,本题使用了两种方法,最终在实际项目中,建议使用CSS实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS/CSS 实现鼠标移动更改列表奇偶行背景色 的相关文章

随机推荐

  • TIME_WAIT机理

    注 本文系转载 尊重原作者原文链接 TIME WAIT状态原理 通信双方建立TCP连接后 主动关闭连接的一方就会进入TIME WAIT状态 客户端主动关闭连接时 会发送最后一个ack后 然后会进入TIME WAIT状态 再停留2个MSL时间
  • H5+css+js的商品放大镜效果

  • vCenter Server安装报错:内存或cpu不足

    vCenter Server安装报错 内存或cpu不足 前言 在安装vCenter Server7 0时报错 Not enough memory in target host EXSI7 0安装在VMware workstation里面 配
  • 解决用steam客户端购买游戏验证登录信息失败的方法

    用steam客户端购买游戏或者订阅Mod的时候会弹出 正在验证登录信息 的界面 然后登陆失败 尽管你已经登陆了steam 但是好像没有登陆到steam服务器上 你就算是重新登录 翻墙 使用steamcommunity插件 使用加速器 电脑杀
  • HJ28 素数伴侣【python3】

    题目描述 若两个正整数的和为素数 则这两个正整数称之为 素数伴侣 如2和5 6和13 它们能应用于通信加密 现在密码学会请你设计一个程序 从已有的 N N 为偶数 个正整数中挑选出若干对组成 素数伴侣 挑选方案多种多样 例如有4个正整数 2
  • 重启kibana的脚本

    2019独角兽企业重金招聘Python工程师标准 gt gt gt bin bash echo e 033 31m stop kibana by 5601 Now 033 0m ps ef netstat anp grep 5601 awk
  • 【Java笔记】Java8中数组(引用类型)、String、List、Set之间的相互转换问题

    数组 String List Set之间的相互转换问题 如果觉得对你有帮助 能否点个赞或关个注 以示鼓励笔者呢 博客目录 先点这里 本博主要是相理清楚一些转换的逻辑 顺便总结一下贴出来 这里是把一些可以JDK自带的使用方法写出了 不代表没有
  • 解析js面试题(上)

    注 本篇博客的题目出自于博主 小平果118博客 题目地址 http blog csdn net i10630226 article details 49765737 由于该博客并没有抛出来来答案和解析 我在这里以自己的理解来做一下这些题目
  • MicroBlaze系列教程(3):AXI_TIMER的使用

    文章目录 toc AXI TIMER简介 常用函数 使用示例 参考资料 工程下载 本文是Xilinx MicroBlaze系列教程的第3篇文章 AXI TIMER简介 AXI TIMER支持两路可编程32位计数器 可以配置为中断 捕获 PW
  • LoadRunner下载和安装

    文章目录 一 下载地址 二 安装步骤 三 安装过程中遇到的问题 一 下载地址 官方下载地址 https my microfocus com myproducts 网盘下载地址 https pan baidu com s 1hiGC9FjfK
  • cudnn下载与安装

    cudnn的安装 cudnn的安装非常简单 1 下载安装文件 按需求下载cudnn的安装文件 https developer nvidia com rdp cudnn archive 需要注册账号 2 安装cudnn 解压下载的文件 可以看
  • 搭建完整的arm-linux-gcc等交叉编译环境

    搭建完整的arm linux gcc等交叉编译环境 链接 https www cnblogs com uestc mm p 6656325 html 安装环境 Linux版本 Ubuntu 12 04 内核版本 Linux 3 5 0 交叉
  • Android AutoLayout集成使用

    转载自楊帥简书 https www jianshu com p da5d5d4d0901 由于Android屏幕尺寸众多的情况 Android适配一直是个问题 谷歌推出了百分比布局 本人有使用 但是百分比布局在部分时候适配并不是那么完美 偶
  • docker(六)数据挂载之数据卷

    docker容器运行时 是有一个可写入层的 如果我们把容器运行时的数据写在可写入层 会有以下问题 当容器停止运行时 写入的数据会丢失 你也很难将这些数据从容器中取出来给另外的应用程序使用 容器的可写入层与宿主机是紧密耦合的 这些写入的数据在
  • 指针的进阶【下篇】

    文章目录 8 指向函数指针数组的指针 9 回调函数 8 指向函数指针数组的指针 请看代码与注释 int Add int x int y return x y int Sub int x int y return x y int main i
  • Ubuntu22.04.1 Server版本 配置C++开发环境----笔记

    远程ssh 没记错在安装 server版的时候是可以选的 如果没有就执行安装命令 sudo install openssh server y 下载完成后配置端口22 vim etc ssh ssh config 重启ssh sudo ser
  • 利用回调获取自拟定Dialog的返回值

    这里要讲的是如何利用回调获取自拟定DiaLog的返回值 首先看下问题的背景 我们经常会用到Dialog 系统提供了一些常用的Dialog 可以参考这篇博客 点击打开链接 那其中一个常用Dialog做讲解 span style font si
  • java实现进程管理,Java调用批处理或可执行文件和Runtime、Process类实现Java版进程管理器...

    Java调用批处理或可执行文件 用Java编写应用时 有时需要在程序中调用另一个现成的可执行程序或系统命令 这时可以通过组合使用Java提供的Runtime类和Process类的方法实现 下面是一种比较典型的程序模式 Process pro
  • 大数据时代如何保护数据安全?

    当前 大数据正在成为信息时代的核心战略资源 对国家治理能力 经济运行机制 社会生活方式产生了深刻影响 与此同时 各项应用技术背后的数据安全风险也日益凸显 近年来 有关数据泄露 数据窃听 数据滥用等安全事件屡见不鲜 保护数据资产已引起各国高度
  • JS/CSS 实现鼠标移动更改列表奇偶行背景色

    需求 鼠标移动到一个列表时 奇数行显示一种背景色 偶数行显示另一种背景色 鼠标移出时 背景色复原 实现效果 代码实现 CSS JS