Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何判断fillStyle是否被指定为非法颜色?

如何判断fillStyle是否被指定为非法颜色?
EN

Stack Overflow用户
提问于 2017-06-02 13:41:58
回答 3查看 338关注 0票数 2

假设有人试图按以下方式分配

var c = document.getElementById("canvasID"); var g = c.getContext("2d"); g.fillStyle = "pukeYellow"; //illegal color

这能被发现吗?g.fillStyle是否成为某种前哨值?

假设您正在编写一个web应用程序,该应用程序要求用户提供一个命名的颜色,然后显示该颜色。我们怎么能告诉用户他犯了错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-02 14:53:42

根据HTML画布2D上下文规范

8填充和笔画样式 如果该值是字符串,但不能解析为CSS值,或者既不是字符串、CanvasGradient,也不是CanvasPattern,则必须忽略,并且属性必须保留其以前的值。

我假设您只对有效的CSS颜色值如这里所定义的感兴趣。至少有三个选项可以验证CSS颜色值:

  • 通过比较分配前后的context.fillStyle,如果两者相等,则用户提供了相同或无效的颜色值。
  • 通过人工验证: const colors =新集(“aliceblue”、"antiquewhite“、"aqua”、"aquamarine“、"azure”、"beige“、"bisque”、"black“、"blanchedalmond”、"blue“、”blue紫色“、"brown”、“bur坞”、"cadetblue“、"chartreuse”、“巧克力”、“珊瑚”、"cornflowerblue“、”corn丝绸“、"crimson”、"cyan“、”深蓝色“、”深蓝色“、”深色金棒“、”深灰色“、“深绿色”、“深灰色”、“深色卡其基”、“深色洋红色”、“深橄榄绿色”、“深色橙色”、“暗兰花”、“暗红色”、“深色鲑鱼”、“暗色海蓝”、“深石蓝”、“深灰色”、“深灰色”、“深灰色”、“深红色”、“深蓝色”、“灰灰色”、“灰灰”、“多德格尔蓝”、“耐火砖”、“花白色”、“前绿色”、“未来”、“盖恩斯伯罗”、“幽灵白色”,“黄金”、“金棒”、“灰色”、“绿色”、“灰色”、“蜜露”、“火红”、“深红”、“靛蓝”、“象牙”、“卡其色”、“薰衣草”、“薰衣草”、“草坪绿”、“柠檬皮”、“蓝光蓝”、“轻珊瑚”、“轻盈青色”、“淡金色”、“淡灰色”、“淡绿色”、“淡灰色”、“淡粉色”、“轻鲑鱼”、“轻色鱼”、“亮蓝色”、“浅灰色”、“浅蓝色”、“浅蓝色”、“淡黄色”、“石灰”、“灰绿色”、“亚麻布”、“洋红”、“栗色”、“中蓝色”、“中蓝色”、“平庸”、“平庸兰花”、“中紫色”、“中色色”、“中色蓝”、“中绿色”、“中青绿色”、“中青绿色”、“中紫红色”、“夜蓝色”、“薄荷霜”、“迷迭香”、“莫卡辛”、“纳瓦乔白”、“海军”、“海军蓝”、“海军蓝”“橄榄”、“橙色”、“桔黄色”、“兰花”、“棕榈”、“古绿色”、“古绿松石”、“古紫罗兰”、“木瓜鞭”、“桃红色”、“秘鲁”、“粉红色”、“李子”、“粉蓝色”、“紫色”、“重贝克尔”、“红色”、“玫瑰色”、“皇家蓝”、“鞍棕色”、“鲑鱼”、“沙褐色”、“塞格伦”、“塞什尔”、“西耶纳”“银色”、“天蓝色”、“蓝蓝”、“蓝灰色”、“蓝灰色”、“雪”、“春绿”、“钢蓝”、“褐色”、“提尔”、“蓟”、“番茄”、“绿松石”、“紫罗兰”、“小麦”、“白色”、“白烟”、“黄色”、“黄绿色”);colors.has(input.toLowerCase());
  • 通过设置和检查临时HTMLElement的样式

我推荐前两种解决方案之一。

票数 2
EN

Stack Overflow用户

发布于 2017-06-02 14:22:11

实验揭示了这一点。如果您指定了一个非法的颜色,则分配就会失败。图形上下文的状态不变。JavaScript,就像它的典型风格一样,只是忽略了你的错误,继续前进。您还可以尝试这个web应用程序中的颜色。这个应用程序还会显示与十六进制代码相关的颜色,如果你在十六进制代码前面加上#。

票数 0
EN

Stack Overflow用户

发布于 2017-06-02 14:24:34

无效的颜色字符串将被解释为最后的有效颜色(或#000000,黑色)。

对于大多数的应用程序来说,这段代码应该是最合适的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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!上测试

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44337821

复制
相关文章
在创业最好的时代中掘金!
这不是一个最好的时代,也不是一个最坏的时代, 对创业者来说却是最好不过的时代。2014年6月,中国手机上网比例首次超过PC机上网比例,这是一个拥有超过5.5亿用户的巨大市场。这个巨大的市场还是一个相对封闭,而国外互联网巨头无法插足的市场。同时, 在这个市场上,资金充裕、投资者投资意愿强、创业协作环境成熟、创业退出管道多样化、大公司并购积极、对创业公司的态度比以往任何时候都更加开放、经过互联网巨头若干年的专业训练, 市场上有实操经验愿意出来创业的专业人才充足。
IT阅读排行榜
2018/08/13
3590
rem在响应式布局中的应用
最近做了一些响应式的页面,遇到了一些问题,想了些解决方法,在这里总结一下。目前响应式的主流实现方式是百分比布局,加上媒体查询@media screen。关于媒体查询还有媒体查询的一些兼容性问题,网上介绍的很多
用户9127725
2022/08/08
1.6K0
Java 8 中的方法引用,怎么用到最好?
在Java8中,使用方法引用非常简单,如String::isEmpty,但无法使用它否定的方法引用。本文内容即如何解决此问题使得我们能够更加全面地使用方法引用。
Java技术栈
2020/05/24
8220
yapi中mock jsonp接口响应的方法
普通的json schema和期望方式,都只能返回json,无法在返回中增加callback函数名。我们尝试使用“高级mock”中的“脚本”完成这个功能。如下图所示,注意“是否开启”的部分一定要打开。
跑马溜溜的球
2020/12/07
1.3K0
yapi中mock jsonp接口响应的方法
在Heroku中部署一个Sinatra应用程序
在Heroku中部署一个Sinatra应用程序。首先需要在Heroku上注册一个账号,然后创建一个应用程序。接着通过在Gemfile中添加必要的Ruby gems来配置你的应用程序。最后,使用Git将你的应用程序推送到Heroku,并在Heroku上启动该应用程序。
Techeek
2018/01/05
2.6K0
在Heroku中部署一个Sinatra应用程序
Gitlab CI 在 Kubernetes 中的 Docker 缓存
前面我们有文章介绍过如何在 Kubernetes 集群中使用 GitLab CI 来实现 CI/CD,在构建镜像的环节我们基本上都是使用的 Docker On Docker 的模式,这是因为 Kubernetes 集群使用的是 Docker 这种容器运行时,所以我们可以将宿主机的 docker.sock 文件挂载到容器中构建镜像,而最近我们在使用 Kubernetes 1.22.X 版本后将容器运行时更改为了 Containerd,这样节点上没有可用的 Docker 服务了,这个时候就需要更改构建镜像的模式了,当然要实现构建镜像的方式有很多,我们这里还是选择使用 Docker 来构建我们的 Docker 镜像,也就是使用 Docker IN Docker 的模式。
我是阳明
2021/11/17
1.5K0
在Linux上清除内存缓存的方法命令
默认情况下,每个Linux操作系统都有一个高效的内存管理系统,该系统用于定期清除缓冲区高速缓存。您可以使用以下简单命令手动释放内存缓存:
用户5005176
2021/09/08
4.1K0
在java中构建高效的结果缓存
缓存是现代应用服务器中非常常用的组件。除了第三方缓存以外,我们通常也需要在java中构建内部使用的缓存。那么怎么才能构建一个高效的缓存呢? 本文将会一步步的进行揭秘。
程序那些事
2020/07/08
1.5K0
RxJS 在 Angular响应式表单中的使用
FormControl 的 valueChanges 属性和 statusChanges 属性包含了会发出变更事件的可观察对象。 例子
mafeifan
2019/03/04
5.1K0
React 中获取数据的 3 种方法:哪种最好?
在执行 I/O 操作(例如数据提取)时,要先发送网络请求,然后等待响应,接着将响应数据保存到组件的状态,最后进行渲染。
前端小智@大迁世界
2019/11/08
3.6K0
在 Confluence 中启用 HTTP 响应压缩
Confluence 能够支持 HTTP 的 GZip 传输编码。这个意味着 Confluence 将可以把数据压缩后传输给用户,这种配置能够针对不稳定的互联网状态下的传输速度缓慢和不稳定并且能够降低 Confluence 服务器的带宽的消耗。
HoneyMoose
2019/01/30
1.1K0
脚本负责在响应完成时调用processResponse()方法
【注意】XMLHttpRequest对象的设计目的是为了处理由普通文本或XML组成的响应;但是,一个响应也可能是另外一种类型,如果用户代理(UA)支持这种内容类型的话。
用户7718188
2021/10/08
8950
HTTP详解(2)-请求、响应、缓存
做过Socket编程的人都知道,当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干。HTTP协议传输的消息也是这样规定的,每一个HTTP包都分为HTTP头和HTTP体两部分,消息体是可选的,而消息头是必须的。每当我们打开一个网页,在上面点击右键,选择“查看源文件”,这时看到的HTML代码就是HTTP的消息体,那么消息头可以通过浏览器的开发工具或者插件可以看到,如果火狐的Firebug,IE的Httpwatch。
黄规速
2022/04/15
2.3K0
HTTP详解(2)-请求、响应、缓存
在WebFlux中自定义异常响应
在web中可以使用@ControllerAdvice即可编写统一异常响应,在webFlux下则是另一种编写方式。
Diuut
2022/11/22
1.8K0
Linux中通过缓存DNS的解析来提高上网的响应速度!
看上去是等待DNS服务器对域名的解析,闲来无事, 于是 决定做个DNS Cache来提高上网速度!
用户1685462
2021/07/18
3.7K0
在Spring Boot中实现HTTP缓存
幸运的是,Java附带了第一个这些格式的预定义格式化程序。可以在下面找到将标题设置为当天结束的示例。
lyb-geek
2018/12/07
5.3K0
C# 程序在 Docker 中响应 Unix 信号
在 Docker Entry Script 详解中介绍了如何在 shell 脚本中响应 Unix 信号量来实现 Docker 应用优雅的关闭退出, 本文介绍 C# 程序如何在 Docker 中响应 Unix 信号实现优雅的关闭退出。
beginor
2020/08/10
1.6K0
缓存系统在游戏业务中的特异性
韩伟
2017/01/06
3.3K0
缓存系统在游戏业务中的特异性
点击加载更多

相似问题

在PHP中缓存对象的最好方法?

21

Sinatra中的缓存变量

12

在Sinatra缓存twitter gem tweet的简单方法?

12

在php中缓存文件的最好方法是什么?

22

缓存MySQL结果的最好方法?

41
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文