Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以制作一个Javascript程序,自动将文本的颜色更改为背景的对比度?_Javascript_Html_Colors_Dom Events - Fatal编程技术网

是否可以制作一个Javascript程序,自动将文本的颜色更改为背景的对比度?

是否可以制作一个Javascript程序,自动将文本的颜色更改为背景的对比度?,javascript,html,colors,dom-events,Javascript,Html,Colors,Dom Events,我有这段Javascript和HTML代码,它使用颜色类型的输入来更改背景的颜色 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"

我有这段Javascript和HTML代码,它使用颜色类型的输入来更改背景的颜色

代码如下:

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    input {
      outline: none;
      border: none;
      background: none;
    }
  </style>
</head>

<body>

  Change the color of the background:
  <input type="color" value="#000000" name="bgcolor" id="bgcolor" />

  <script>
    const color = document.getElementById("bgcolor");

    color.addEventListener("change", () => {    
      document.body.style.background = color.value;
    });
  </script>
</body>

</html>

文件
输入{
大纲:无;
边界:无;
背景:无;
}
更改背景颜色:
const color=document.getElementById(“bgcolor”);
color.addEventListener(“更改”,()=>{
document.body.style.background=color.value;
});
因此,当用户更改由
创建的调色板中的颜色时,这会更改页面背景的颜色

现在想象一种情况,用户选择黑色作为背景,文本的颜色默认也是黑色现在我们可以做两件事

给他/她一个选项来更改文本的颜色,或者自动将文本的颜色更改为背景的对比度

我想选择第二个选项,因为它有点花哨,对用户来说更高级一些,就像给用户留下深刻印象的额外高级东西


那么,我如何实现第二个选项呢?有人能给我解释一下,当用户设置背景时,如何自动将文本的颜色更改为背景的完全对比度。

这方面的有趣资源:

以下是W3C算法(带):

constrgb=[255,0,0];
//随机更改为showcase更新
设置间隔(设置对比度,1000);
函数setContrast(){
//随机更新颜色
rgb[0]=Math.round(Math.random()*255);
rgb[1]=Math.round(Math.random()*255);
rgb[2]=Math.round(Math.random()*255);
// http://www.w3.org/TR/AERT#color-对比度
常量亮度=数学圆((parseInt(rgb[0])*299)+
(parseInt(rgb[1])*587)+
(parseInt(rgb[2])*114))/1000);
const textColour=(亮度>125)?“黑色”:白色;
常量背景色='rgb('+rgb[0]+'、'+rgb[1]+'、'+rgb[2]+');
$('#bg').css('color',textColour);
$('#bg').css('background-color',backgroundcolor);
}
#bg{
宽度:200px;
高度:50px;
}


文本示例
ff0000等颜色表示红色为
FF
,绿色和蓝色为
00
。您需要提取这些值,将它们解析为0-255个整数,然后从255中减去每个整数以获得对比度值。现在将它们转换回十六进制,将它们加在一起,并将其用作文本颜色。我认为这可能会解决您的问题:这可能会解决您的问题复制:@ChrisG-nope我认为我的情况有点不同,我不想将其转换为rgb,然后再转换回十六进制,我确实查看了答案,但没有任何帮助。