基于颜色渐变样式绘制信号格

预期目标:

根据WiFi信号强度,绘制信号格,满格100,80格以上为好,40格以上为中,其余为差。根据信号级别展示不同的颜色。
实现效果:
在这里插入图片描述

代码实现如下:

css部分:
<style>
	// 定义css变量,实现作用域内css样式的变化
  .line:nth-of-type(n) {
        --percent: '1%';
        --to-percent: '2%';
        --line-color: #aaa;
        --line-width: '0%';
    }
    .line {
        margin: 20px auto;
        position: relative;
        width: 600px;
        height: 50px;
        background: repeating-linear-gradient(to right, 
            #aaa, #aaa 1%,
            #fff 1%, #fff 2%
        );
    }
    .signal {
        margin: auto;
        position: absolute;
        top: 0px;
        left: 0px;
        height: 100%;
        width: var(--line-width);
        background: repeating-linear-gradient(to right,
            var(--line-color), var(--line-color) var(--percent),
            #fff var(--percent), #fff var(--to-percent)
        );
    }
</style>
javascript部分:
<script>
     window.onload = function() {
         for (let i = 0; i < 10; i++) {
             const body = document.querySelector('body');
             let lineDiv = document.createElement('div');
             lineDiv.setAttribute('class', 'line');
             let signalDiv = document.createElement('div');
             signalDiv.setAttribute('class', 'signal');
             lineDiv.appendChild(signalDiv);
             body.appendChild(lineDiv);
             const doStyle = document.querySelectorAll('.line')[i].style;
             // 模拟信号强度数据
             const signal = Math.floor(Math.random() * 100);
             doStyle.setProperty('--line-color', getColor(signal));
             doStyle.setProperty('--line-width', (signal / 100) * 100 + '%');
             doStyle.setProperty('--percent', (100 / signal) + '%');
             doStyle.setProperty('--to-percent', 2 * (100 / signal) + '%');
         }
     }

     function getColor(signal) {
         if (signal > 0 && signal < 40) {
             return 'red';
         }
         if (signal >= 40 && signal < 80) {
             return 'yellow';
         }
         if (signal >= 80) {
             return 'green';
         }
         return '#aaa';
     }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值