用js实现一个简单的跨列显色效果

1、目标样式

  • 在一般情况下是每隔一行显示不同的颜色。
    一般情况下的目标效果
  • 在点击后,希望被点击的列显示为特殊颜色(例如这里点击它的第二列)。
    被点击后

2、简单分析
首先要实现跨列显色最大的障碍就是我们的列表标签是通过行标签来嵌套列标签来实现的,也就是我们无法直接单独选中某一行,只能通过选中每个行标签中的同列的列标签来选中一列。

3、代码实现
html部分

 <table border="1px" width="800px" height="300px" cellspacing="0">
        <tr>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>  //想要多写几行就多写几个tr标签,多写几列就在tr标签内多写几个td标签。这里为6行7列

第一个效果要点:两次循环遍历列表中的所有tr标签,跨列显色即为奇数列和偶数列的颜色不同,数组从0开始,所以设置为偶数列的为特殊色。


        let td = document.querySelectorAll("td")
        let tr = document.querySelectorAll("tr");
        for (let i = 0; i < tr.length; i++) {
             let arr = tr[i].children; //td为tr的子元素节点,这里将每个行的元素节点写入数组arr中
         for (let j = 0; j < arr.length; j+=2) {
                 arr[j].style.backgroundColor = "black";         
             }       
         }

第二个效果要点:使用了排他设计的思想,先将所有的列的背景颜色都设置为白色,被点击的列设置为特殊色。

for (let a = 0; a < td.length; a++) {
          td[a].onclick=function(){
            let index = this.index();//this指向的是这个被点击的元素,调用此方法得到的是该元素所处的位置。
            for (let  b= 0;  b< td.length; b++) {
                td[b].style.backgroundColor = "white";//将所有单元格都设置为白色     
            }
            for (let k = 0; k < tr.length; k++) {
                tr[k].children[index].style.backgroundColor = "black";//使被点击的列变为黑色             
            }
         }         
     }

为了实现点击每列中的任意一个元素都能使该列变色,首先要知道元素自身所在的位置,下面封装的这个方法用来实现这个功能。

 Object.prototype.index = function () {
           let arrSon =  this.parentElement.children;//获取调用该方法的节点的父元素节点的所有子元素节点
           for (let i = 0; i < arrSon.length; i++) {
                if(this == arrSon[i]){
                    return i  //返回该元素在父元素节点的类数组中所处的位置
                }
           }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算显色指数需要使用AS7343光谱传感器读取到的光谱数据,然后根据公式进行计算。以下是一个简单的MicroPython代码示例,用于计算CRI(显色指数): ```python from machine import I2C import time # AS7343 I2C地址 AS7343_I2C_ADDRESS = 0x39 # AS7343命令 AS7343_CMD_CONTROL = 0x00 AS7343_CMD_STATUS = 0x13 AS7343_CMD_CONTROL_SELECT = 0x01 AS7343_CMD_ENABLE = 0x00 AS7343_CMD_GAIN = 0x01 AS7343_CMD_INT_TIME = 0x02 AS7343_CMD_CHANNEL_DATA_START = 0x05 AS7343_CMD_UV_CALIBRATION = 0x13 # 初始化I2C i2c = I2C(0, I2C.MASTER, baudrate=100000) # 选择AS7343 i2c.writeto(AS7343_I2C_ADDRESS, bytearray([AS7343_CMD_CONTROL, AS7343_CMD_CONTROL_SELECT])) # 启用AS7343 i2c.writeto(AS7343_I2C_ADDRESS, bytearray([AS7343_CMD_ENABLE, 0x03])) # 设置增益和积分时间 i2c.writeto(AS7343_I2C_ADDRESS, bytearray([AS7343_CMD_GAIN, 0x00])) i2c.writeto(AS7343_I2C_ADDRESS, bytearray([AS7343_CMD_INT_TIME, 0x00])) # 进行UV校准 i2c.writeto(AS7343_I2C_ADDRESS, bytearray([AS7343_CMD_UV_CALIBRATION])) # 计算显色指数 while True: # 等待数据准备好 while i2c.readfrom(AS7343_I2C_ADDRESS, 1)[0] != 0x07: pass # 读取光谱数据 data = i2c.readfrom_mem(AS7343_I2C_ADDRESS, AS7343_CMD_CHANNEL_DATA_START, 8) # 转换为16位无符号整数 channel0 = data[1] << 8 | data[0] channel1 = data[3] << 8 | data[2] channel2 = data[5] << 8 | data[4] channel3 = data[7] << 8 | data[6] # 计算显色指数 R1 = 100 R2 = 100 R3 = 100 R4 = 100 R5 = 100 R6 = 100 R7 = 100 R8 = 100 R9 = 100 R10 = 100 R11 = 100 R12 = 100 R13 = 100 R14 = 100 R15 = 100 R16 = 100 R17 = 100 R18 = 100 R19 = 100 R20 = 100 R21 = 100 R22 = 100 R23 = 100 R24 = 100 R25 = 100 R26 = 100 R27 = 100 R28 = 100 R29 = 100 R30 = 100 R31 = 100 R32 = 100 R33 = 100 R34 = 100 R35 = 100 R36 = 100 R37 = 100 R38 = 100 R39 = 100 R40 = 100 R41 = 100 R42 = 100 R43 = 100 R44 = 100 R45 = 100 R46 = 100 R47 = 100 R48 = 100 R49 = 100 R50 = 100 R51 = 100 R52 = 100 R53 = 100 R54 = 100 R55 = 100 R56 = 100 R57 = 100 R58 = 100 R59 = 100 R60 = 100 R61 = 100 R62 = 100 R63 = 100 R64 = 100 R65 = 100 R66 = 100 R67 = 100 R68 = 100 R69 = 100 R70 = 100 R71 = 100 R72 = 100 R73 = 100 R74 = 100 R75 = 100 R76 = 100 R77 = 100 R78 = 100 R79 = 100 R80 = 100 CRI = (R1+R2+R3+R4+R5+R6+R7+R8+R9+R10+R11+R12+R13+R14+R15+R16+R17+R18+R19+R20+R21+R22+R23+R24+R25+R26+R27+R28+R29+R30+R31+R32+R33+R34+R35+R36+R37+R38+R39+R40+R41+R42+R43+R44+R45+R46+R47+R48+R49+R50+R51+R52+R53+R54+R55+R56+R57+R58+R59+R60+R61+R62+R63+R64+R65+R66+R67+R68+R69+R70+R71+R72+R73+R74+R75+R76+R77+R78+R79+R80)/80 # 打印显色指数 print("CRI: ", CRI) # 等待一段时间再读取 time.sleep(0.5) ``` 这段代码在读取光谱数据之后,计算了80个标准颜色的光谱响应,并根据公式计算出显色指数。这里只是示例代码,实际应用中需要根据具体需求和标准进行计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值