假设有人试图按以下方式分配
var c = document.getElementById("canvasID"); var g = c.getContext("2d"); g.fillStyle = "pukeYellow"; //illegal color
这能被发现吗?g.fillStyle
是否成为某种前哨值?
假设您正在编写一个web应用程序,该应用程序要求用户提供一个命名的颜色,然后显示该颜色。我们怎么能告诉用户他犯了错误?
发布于 2017-06-02 14:53:42
8填充和笔画样式 如果该值是字符串,但不能解析为CSS值,或者既不是字符串、CanvasGradient,也不是CanvasPattern,则必须忽略,并且属性必须保留其以前的值。
我假设您只对有效的CSS颜色值如这里所定义的感兴趣。至少有三个选项可以验证CSS颜色值:
context.fillStyle
,如果两者相等,则用户提供了相同或无效的颜色值。我推荐前两种解决方案之一。
发布于 2017-06-02 14:22:11
实验揭示了这一点。如果您指定了一个非法的颜色,则分配就会失败。图形上下文的状态不变。JavaScript,就像它的典型风格一样,只是忽略了你的错误,继续前进。您还可以尝试这个web应用程序中的颜色。这个应用程序还会显示与十六进制代码相关的颜色,如果你在十六进制代码前面加上#。
发布于 2017-06-02 14:24:34
无效的颜色字符串将被解释为最后的有效颜色(或#000000
,黑色)。
对于大多数的应用程序来说,这段代码应该是最合适的。
var canvas = document.createElement("canvas")
var context = canvas.getContext("2d")
context.fillStyle = "#ff0000"
console.log(testColor("yellow"))
console.log(testColor("pukeYellow"))
console.log(testColor("red"))
console.log(context.fillStyle)
function testColor(color){
var tmp = context.fillStyle
context.fillStyle = color
var result = context.fillStyle == tmp
if(result){
var tmp2 = tmp == '#ffffff' ? '#000000' : '#ffffff'
context.fillStyle = tmp2
context.fillStyle = color
result = (context.fillStyle+'') == (tmp2+'')
}
context.fillStyle = tmp
return !result
}
警告:仅在chrome!上测试
https://stackoverflow.com/questions/44337821
复制