如何在JavaScript中计算较浅或较深的十六进制颜色

在HTML,CSS使用颜色和JavaScript很容易。 然而,它往往需要以编程方式生成的颜色,即你需要一个颜色,这是20%的亮度比#123或10%,比#abcdef暗。

CSS3提供了一个很好的解决方案:HSL。 而不是使用十六进制或RGB颜色,可以设置色调,饱和度,亮度(或亮度 )和,任选地,不透明度,例如

 
color: hsla(50, 80%, 20%, 0.5);
background-color: hsl(120, 100%, 50%);
 

HSL和HSLA除了IE8及以下,大多数浏览器都支持。 您可以设置第三亮度参数来改变你的颜色应该如何亮或过暗定。

不幸的是,我们并不总是有HSL工作的奢侈品。 虽然你可以设置一个单独的HSL颜色,浏览器最终将其转换为RGB。 此外,RGB通常更容易使用,你可能有这种格式已经定义的颜色。

有多种算法来改变颜色的亮度。 许多RGB转换到HSL然后再回到这是客户端脚本一个相当令人费解的计算。 因此,我用JavaScript编写的一个快速和简单的跨浏览器的解决方案。 ColorLuminance接受两个参数:

  • 十六进制 -十六进制颜色值,例如“#abc”或“#123456”(散列是可选的)
  • LUM -亮度因数,即,-0.1是10%更暗,0.2是轻20%等。

完整的代码:

 
function ColorLuminance(hex, lum) {

	// validate hex string
	hex = String(hex).replace(/[^0-9a-f]/gi, '');
	if (hex.length < 6) {
		hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];
	}
	lum = lum || 0;

	// convert to decimal and change luminosity
	var rgb = "#", c, i;
	for (i = 0; i < 3; i++) {
		c = parseInt(hex.substr(i*2,2), 16);
		c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);
		rgb += ("00"+c).substr(c.length);
	}

	return rgb;
}
 

在本质上,前三行清洁串和扩大3位十六进制代码到全6位表示。

循环提取反过来红色,绿色和蓝色的值,并将其转换为十进制,应用可见度,并将其转换回为十六进制。 例子:

 
ColorLuminance("#69c", 0);		// returns "#6699cc"
ColorLuminance("6699CC", 0.2);	// "#7ab8f5" - 20% lighter
ColorLuminance("69C", -0.5);	// "#334d66" - 50% darker
ColorLuminance("000", 1);		// "#000000" - true black cannot be made lighter!
 

观看演示页面 ; 颜色渐变使用一系列100个的生成div元素与稍浅的背景。

希望对你有帮助。 我将使用该功能在另一个示范即将上SitePoint ...

From: https://www.sitepoint.com//javascript-generate-lighter-darker-color/

### 回答1: 在 JavaScript ,可以使用 Math.random() 方法来生成一个随机的十六进制颜色。例如:'#'+Math.floor(Math.random()*16777215).toString(16); ### 回答2: 在JavaScript,可以通过以下代码生成随机十六进制颜色: ``` function getRandomHexColor() { let letters = '0123456789ABCDEF'; let color = '#'; for (let i = 0; i < 6; i++) { color += letters[Math.floor(Math.random() * 16)]; } return color; } // 调用生成随机颜色函数 let randomColor = getRandomHexColor(); console.log(randomColor); ``` 首先,定义了一个名为`getRandomHexColor`的函数。函数定义了一个变量`letters`,用于存储十六进制的字符集合。接着,通过`color`变量初始化为'#',表示颜色十六进制格式。然后,通过for循环生成6位的随机十六进制数,每次循环将随机获取`letters`的一个字符追加到`color`。最后,返回生成的随机颜色。 在实际使用时,可以通过调用`getRandomHexColor`函数获取随机颜色,并将随机颜色值赋给需要的元素或属性。 ### 回答3: 在JavaScript生成随机十六进制颜色可以使用以下代码: ```javascript function generateRandomColor() { // 生成随机的RGB颜色值 var r = Math.floor(Math.random() * 256); var g = Math.floor(Math.random() * 256); var b = Math.floor(Math.random() * 256); // 将RGB颜色值转换成十六进制字符串 var hexR = r.toString(16); var hexG = g.toString(16); var hexB = b.toString(16); // 如果转换后的十六进制字符串只有一位,则在前面补0 if (hexR.length === 1) { hexR = "0" + hexR; } if (hexG.length === 1) { hexG = "0" + hexG; } if (hexB.length === 1) { hexB = "0" + hexB; } // 返回随机生成的十六进制颜色值 return "#" + hexR + hexG + hexB; } // 调用函数生成随机颜色并打印输出 var randomColor = generateRandomColor(); console.log(randomColor); ``` 此代码首先使用 `Math.random()` 方法生成0到1之间的随机数,然后乘以255得到RGB颜色值的随机数。接下来,将这些数值转换成十六进制的字符串,如果字符串的长度只有一位,则在字符串前面添加0。最后,将转换后的十六进制颜色值拼接成完整的颜色字符串,并返回。通过调用 `generateRandomColor()` 函数即可生成随机的十六进制颜色
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值