Firefox 在比较操作中未检测到 rgb 颜色
Firefox not detecting rgb colors in comparison operation
我使用 HTML、CSS 和 javascript 编写了一个简单的四连线游戏。该游戏在 Chrome 中功能齐全,但我在使用 Firefox 浏览器时遇到一些有趣的行为。
在 Firefox 中,当玩家放下棋子时,游戏板的颜色会成功改变,但是,当我在检查玩家是否获胜时进行比较操作时,Firefox 没有检测到任何颜色。
我试图通过声明一个特定的 rgb 值来解决这个问题,而不是仅仅说 'purple',我做了类似下面的事情,结果相似。
这里只是我的 javascript 代码的相关部分:
const _purple = "rgb(124, 0, 132)";
columns[id][5 - pcs[id]].style.background = _purple; // assignment works always
columns[id][5 - pcs[id]].style.background = 'green'; // assignment like this ok too
if (columns[_col][_row].style.background == _purple) // only works in Chrome
if (columns[_col][_row].style.background == 'green') // only works in Chrome
我也试过按照朋友的建议使用===
。
***** 更新 *****
我检查了控制台,看看 Firefox 正在 returning,正如第一条评论中所建议的那样,Firefox 似乎 returning 了正确的值。
rgb(124, 0, 132) none repeat scroll 0% 0%
green none repeat scroll 0% 0%
但是比较操作永远不会 return 为真。
我试图只使用整个字符串,但是
也没用。
不出所料,在 Chrome,如果我只是使用
"rgb(124, 0, 132)"
而不是 _purple
它也 return 是真的。
如果对解决这个问题有帮助
我在中使用的 CSS 个元素
游戏板是:
.box {
background: white;
border: 2px solid black;
}
进一步:
visual studio 向我报告说“属性 颜色在字符串类型上不存在”。在我的 Firefox 控制台中调用 console.log(first.style.background.color);
returns undefined
,同时调用 console.log(second.style.background);
returns 正确的 rgb 值。当比较未定义的 .color
值时它 returns true
,但是当比较 .background 属性 时它 returns false
,这确实是rgb 值
感谢您对这个问题的任何帮助,可以在此处查看游戏和纠正此错误的尝试 https://github.com/paolo-Rancati/four_in_a_sequence/tree/main/snippet
您可以使用 computedStyle
来解决这个问题,显然您 "rgb(124, 0, 132)"
的 rgb 值与 FireFox 用于 purple
的 rgb 值不对应。
const _purple = "rgb(128, 0, 128)";
let first = document.getElementById("first");
let second = document.getElementById("second");
const spaces = document.querySelectorAll('.box');
first.style.background = "purple";
second.style.background = _purple;
console.log(window.getComputedStyle(first).backgroundColor);
console.log(window.getComputedStyle(second).backgroundColor);
console.log(window.getComputedStyle(first).backgroundColor === window.getComputedStyle(second).backgroundColor);
div {
width: 100%;
height: 50px;
border: 1px solid black;
}
.box {
background: white;
border: 2px solid black;
}
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"></html>
<head>
<link rel="stylesheet" href="static/website.css">
<meta charset="utf-8" />
<title>Game Page</title>
</head>
<div id="first"></div>
<div id="second"></div>
</html>
但是为什么你要测试单元格的颜色??你应该用一个数组来存储棋盘的状态,并测试数组中的值!我知道这不能回答你的问题,但你有一个 XY problem.
我使用 HTML、CSS 和 javascript 编写了一个简单的四连线游戏。该游戏在 Chrome 中功能齐全,但我在使用 Firefox 浏览器时遇到一些有趣的行为。
在 Firefox 中,当玩家放下棋子时,游戏板的颜色会成功改变,但是,当我在检查玩家是否获胜时进行比较操作时,Firefox 没有检测到任何颜色。
我试图通过声明一个特定的 rgb 值来解决这个问题,而不是仅仅说 'purple',我做了类似下面的事情,结果相似。
这里只是我的 javascript 代码的相关部分:
const _purple = "rgb(124, 0, 132)";
columns[id][5 - pcs[id]].style.background = _purple; // assignment works always
columns[id][5 - pcs[id]].style.background = 'green'; // assignment like this ok too
if (columns[_col][_row].style.background == _purple) // only works in Chrome
if (columns[_col][_row].style.background == 'green') // only works in Chrome
我也试过按照朋友的建议使用===
。
***** 更新 ***** 我检查了控制台,看看 Firefox 正在 returning,正如第一条评论中所建议的那样,Firefox 似乎 returning 了正确的值。
rgb(124, 0, 132) none repeat scroll 0% 0%
green none repeat scroll 0% 0%
但是比较操作永远不会 return 为真。 我试图只使用整个字符串,但是 也没用。
不出所料,在 Chrome,如果我只是使用
"rgb(124, 0, 132)"
而不是 _purple
它也 return 是真的。
如果对解决这个问题有帮助 我在中使用的 CSS 个元素 游戏板是:
.box {
background: white;
border: 2px solid black;
}
进一步:
visual studio 向我报告说“属性 颜色在字符串类型上不存在”。在我的 Firefox 控制台中调用 console.log(first.style.background.color);
returns undefined
,同时调用 console.log(second.style.background);
returns 正确的 rgb 值。当比较未定义的 .color
值时它 returns true
,但是当比较 .background 属性 时它 returns false
,这确实是rgb 值
感谢您对这个问题的任何帮助,可以在此处查看游戏和纠正此错误的尝试 https://github.com/paolo-Rancati/four_in_a_sequence/tree/main/snippet
您可以使用 computedStyle
来解决这个问题,显然您 "rgb(124, 0, 132)"
的 rgb 值与 FireFox 用于 purple
的 rgb 值不对应。
const _purple = "rgb(128, 0, 128)";
let first = document.getElementById("first");
let second = document.getElementById("second");
const spaces = document.querySelectorAll('.box');
first.style.background = "purple";
second.style.background = _purple;
console.log(window.getComputedStyle(first).backgroundColor);
console.log(window.getComputedStyle(second).backgroundColor);
console.log(window.getComputedStyle(first).backgroundColor === window.getComputedStyle(second).backgroundColor);
div {
width: 100%;
height: 50px;
border: 1px solid black;
}
.box {
background: white;
border: 2px solid black;
}
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"></html>
<head>
<link rel="stylesheet" href="static/website.css">
<meta charset="utf-8" />
<title>Game Page</title>
</head>
<div id="first"></div>
<div id="second"></div>
</html>
但是为什么你要测试单元格的颜色??你应该用一个数组来存储棋盘的状态,并测试数组中的值!我知道这不能回答你的问题,但你有一个 XY problem.