javascript - JavaScript getComputedStyle 不适用于颜色名称?
问题描述
我只是问我做错了什么,因为我以前做过,我只是不记得是怎么做的,而且我一定丢失了旧代码。
Firefox 有一个名为的未记录颜色值-moz-win-accentcolor
,可用于获取 Windows 10 强调色。
如果我直接在样式表中使用该颜色名称(在我的扩展程序中,以匹配系统的主题),它工作正常,但我需要稍微加深或减轻颜色,如果不获取颜色数据本身,我将无法做到这一点.
这就是我所拥有的,我正在使用window.getComputedStyle
并getPropertyValue
获取颜色数据。我不在乎它是十六进制还是 RGBA,见鬼,我不在乎它是二进制的。我只需要能够 git 颜色来操作颜色数据。
function getComputedAccent() {
let fakeEl = document.createElement("div");
fakeEl.style = "background: -moz-win-accentcolor";
return window.getComputedStyle(fakeEl).getPropertyValue("background");
}
但这只是返回一个空字符串。知道我忘记了什么吗?
(是的,我知道这是一个黑客,我不在乎。)
解决方案
好吧,我是愚蠢的。代码确实有效,只是稍作改动。
function getComputedAccent() {
let fakeEl = document.createElement("div");
fakeEl.style = "background-color: -moz-win-accentcolor";
return window.getComputedStyle(fakeEl).getPropertyValue("background-color");
}
getComputedAccent()
"rgb(55, 60, 72)"
它以空字符串响应,因为该background
属性并不总是只是一种颜色。它可以是图像。改成这样background-color
就好了。
编辑添加更多有用的代码。
function getComputedAccent() {
let fakeEl = document.createElement("div");
fakeEl.setAttribute("style", "background-color: -moz-win-accentcolor");
let color = window.getComputedStyle(fakeEl).getPropertyValue("background-color");
color = color.match(/rgb\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/);
color.shift();
color = color.map((value) => parseInt(value, 10));
return color;
}
推荐阅读
- java - 使用 HBase API 过滤和解码使用 Phoenix API 存储的数据
- javascript - 离子范围滑块颜色和拖动器未在 Laravel 中显示
- c# - 会话超时时自动重定向 ASP.NET C#(WebForms)
- spring - 带有 OAuth2.0 的 Spring REST 不起作用
- c# - C#:如何在刻度中间停止计时器
- c# - 通过匹配两个字符串但消除动词和其他一些特定单词(如“the, they, there they etc”)来生成结果?
- java - 如何在java中只增加图像宽度
- ios - 在不上传 App Store 的情况下,我们可以在 TestFlight 中上传 iOS 应用多少次?
- java - 如何替换arraylist中的元素包含作为stringbuilder类型的字符串的元素
- java - 将 java xml sax 事件调用转换为 xml 字符串