Js根据数值的大小来编辑颜色色值

41 篇文章 0 订阅
9 篇文章 0 订阅
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		*{
			margin: 0;
			padding: 0;
			list-style: none;
			box-sizing: border-box;
		}
		.box{
			width: 500px;
			height: 500px;
			margin: auto;
			border: 1px solid #000;
		}
		.ul{
			width: 100%;
			height: auto;
		}
		.li{
			width: 40px;
			height: 40px;
			float: left;
			line-height: 40px;
			text-align: center;
			border: 1px solid #eee;
		}
	</style>
</head>
<body>
	<div class="box">
		<ul class="ul">
			<!-- <li class="li" >21</li> -->
		</ul>
	</div>
</body>
</html>
<script>
    window.onload = function () {
    	var data = [0,1,2,3,4,5,6,7,11,22,33,44,55,66,77,111]
    	var ul_box = document.querySelector(".ul");	
    	var html = ''

		var max = Math.max.apply(null, data);
		console.log(max)

    	data.map(v=>{
    		let c = getColorByNumber(v,max)
    		html += `<li class="li" style="background: ${c};">${v}</li>`
    	})
    	ul_box.innerHTML  = html

	    function rgbaToHex(color) {
	        var values = color
	          .replace(/rgba?\(/, '')
	          .replace(/\)/, '')
	          .replace(/[\s+]/g, '')
	          .split(',');
	        var a = parseFloat(values[3] || 1),
	          r = Math.floor(a * parseInt(values[0]) + (1 - a) * 255),
	          g = Math.floor(a * parseInt(values[1]) + (1 - a) * 255),
	          b = Math.floor(a * parseInt(values[2]) + (1 - a) * 255);

	        return "#" +
	          ("0" + r.toString(16)).slice(-2) +
	          ("0" + g.toString(16)).slice(-2) +
	          ("0" + b.toString(16)).slice(-2);
	    }
	    function getColorByNumber(n,max) {
	    	let halfMax = max / 2  //最大数值的二分之一
	        //var 百分之一 = (单色值范围) / halfMax;  单颜色的变化范围只在50%之内
	        // 绿色的rgb(0,255,0) 红色的rgb(255,0,0) 红+绿 = 黄色 rgb(255,255,0);
      		// [1, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]整数会直观一点。
      		// 100为例,0为rgb(0,255,0),1-49应该为rgb(0-254,255,0), 50为100的一半rgb(255,255,0),51-99应该为rgb(255,0-255,0),100为rgb(255, 2, 0),255/100不能整除,此处理想状态下应该是rgb(255, 0, 0)
	        var one = 255 / halfMax; 
	        console.log('one= ' + one)
	        var r = 0;
	        var g = 0;
	        var b = 0;


	        if (n < halfMax) {
	          // 比例小于halfMax的时候红色是越来越多的,直到红色为255时(红+绿)变为黄色.
	          r = one * n;  
	          g = 255;
	        }

	        if (n >= halfMax) {
	          // 比例大于halfMax的时候绿色是越来越少的,直到0 变为纯红
	          g = (255 - ((n - halfMax) * one)) < 0 ? 0 : (255 - ((n - halfMax) * one))
	          r = 255;

	        }
	        r = parseInt(r);// 取整
	        g = parseInt(g);// 取整
	        b = parseInt(b);// 取整

	        // console.log(r,g,b)
	        return rgbaToHex("rgb(" + r + "," + g + "," + b + ")");
	    }
    }
    
</script>

笔记仅供参考

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值