Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Chrome浏览器中最快速实现拾色器(颜色吸管)的方法

在Chrome浏览器中最快速实现拾色器(颜色吸管)的方法

原创
作者头像
茶无味的一天
发布于 2022-10-06 10:45:12
发布于 2022-10-06 10:45:12
2.2K0
举报
文章被收录于专栏:品味前端品味前端

说到网页拾色器(颜色吸管工具)在前端的实现方法,通常我们会想到先进行网页截图,然后通过Canvas绘制截图,此时利用Canvas所提供的的API即可解析出图片每个像素点颜色,最后通过获取鼠标定位,得到当前的坐标来进行颜色选择。

在这种方式下通常问题出在第一个步骤,就是进行网页截图的方法,在前端网页截图常见的工具有:html2canvasdom-to-image 等,然而这些库的实现原理都是通过解析DOM然后转换语法(CanvasSvg)绘制再导出图片,虽然这是目前实现截图操作的唯一出路,但我们要清楚的是这样做不可避免会出现以下问题:

  1. 对于复杂网页场景解析可能会出现缺失或错误
  2. 无法避免 CanvasSvg 的渲染结果与网页呈现效果存在差异的问题
  3. 生成效率太慢,解析绘制过程会造成卡顿,非常影响用户体验

所以基于此思路做出来的颜色吸色器尽管在设计初期就考虑可用性,也仍然无法避免上述问题,最多只能应用于简单网页的场景当中,但这通常又与事实相违背——因为简单的网页往往极少有使用到吸色器的业务场景。

原生方案

如果说 JS 的实现方法是令人沮丧的,那么把问题交给浏览器原生方法可能是未来最好的解决方案之一,事实上原生 HTML 早已提供了一种实现颜色选择的元素,它就是我们所熟悉的 input 标签。

<input type="color">******元素**是<input>元素中的一个特定种类,用来创建一个允许用户使用颜色选择器,或输入兼容 CSS 语法的颜色代码的区域。(不支持 Alpha 通道) 此元素的外观会因浏览器不同而不同,可能是简单的验证颜色输入格式的文本框,也可能使用平台原生或自定义样式的颜色选择器。其 UI 除要能接收文本格式的颜色外,未要求其他特性。(更多信息

关于"元素的外观会因浏览器不同而不同",先给大家感受下 Safari 下显示效果,需要额外点击“显示颜色”调出系统调色盘,非常的别扭:

<img src="https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c53ed1747c244769abe86a4b7f79760d~tplv-k3u1fbpfcp-watermark.image?" width="40%" />

但是谷歌浏览器下的实现体验已经非常好了:

可以看到原生方式下的吸管工具都是系统级别的,也就是说除了网页上的颜色以外,整个屏幕的任何可见元素都可以吸取,而且启动速度非常快,使用流畅不卡顿。

我在第一次了解该元素时就在想:如果这个原生吸管工具可以单独拿出来用就好了,这样可以通过自己开发一个颜色选择器来弥补原生颜色选择器不支持 Alpha 通道的缺点,而原生吸管工具则可以解决目前 JS 很难实现吸色的问题。于是搜索一番后发现真的有一个 BOM 的构造函数:EyeDropper(),它支持创建吸管工具的实例,以提供用户可使用的颜色选择工具。

注意:该功能仍是一项实验性技术,请谨慎在生产环境中使用,另外如果部署到线上发现失效,请检查站点是否已开启 HTTPS,如不在安全上下文环境中,无论浏览器是否支持该方法都不会生效(本地开发环境似乎不受影响)。

小试牛刀

以 Vue 为例,我们可以像这样编写一个最简单的 Demo

代码语言:txt
AI代码解释
复制
<template>
    <button v-if="hasEyeDrop" @click="nativePick">点击取色</button>
    <input v-else type="color" @input="nativePick" />
</template>

<script>
export default {
  data() {
    return {
      hasEyeDrop: 'EyeDropper' in window
    };
  },
  methods: {
    async nativePick (e){
     const val =  e ? e.target.value : null
      if (val) {
        console.log('获得颜色: ' + val)
      } else {
        const eyeDropper = new window.EyeDropper() // 初始化一个EyeDropper对象
        console.log('按Esc可退出')
        try {
          const result = await eyeDropper.open() // 开始拾取颜色
          console.log('获得颜色: ' + result.sRGBHex)
        } catch (e) {
          console.log('用户取消了取色')
        }
      }
    }
  },
};
</script>
支持吸色器时
支持吸色器时
不支持则调用原生input
不支持则调用原生input

当然我们还可以让原生吸色器补足取色功能的同时,自定义一个透明度滑块来支持改变色值 Alpha 通道,实现更复杂的应用场景:

适用场景

目前该方法在兼容性方面只有 ChromeEdgeOpera 这三个浏览器在全力支持,所以适用范围并不广泛,但是由于其在谷歌浏览器上体验实在优秀,还是非常推荐在必要时尽可能使用它,真的太香了!

另外提一嘴,我觉得在 Electron 中应当是非常契合的,虽然 Electron 有打包体积过大的缺点,但这个缺点也意味着它拥有绝对控制浏览器版本的权利,所以能放心地使用新特性,通过它就可以在桌面程序中用三两行代码便利地实现一个流畅的屏幕取色器了!

以上就是文章的全部内容,希望对你有所帮助!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
了不起的Chrome浏览器(7):Chrome 95终于支持WebAssembly异常处理了!
十多年来,Web技术突飞猛进,其中Chrome功不可没,了解Chrome可以帮助我们理解前端行业的发展趋势。
Fundebug
2023/10/23
8280
了不起的Chrome浏览器(7):Chrome 95终于支持WebAssembly异常处理了!
chrome浏览器 必知必会的小技巧
这篇文章主要介绍的就是一些chrome浏览器的小技巧,很简单,希望对大家有所帮助。 这其中的一些小技巧在低版本中是没有的,所以建议大家用最新版的,目前最新版是62,版本很重要,如果发现有些技巧不起作用,请先查看浏览器的版本。
FEWY
2019/05/27
9920
理解了 HSL 颜色表示法,就能实现 ColorPicker 组件
出于这个原因,我们会用 antd 的 ColorPicker 组件,而不是原生的 color 类型的 input。
神说要有光zxg
2023/08/28
5650
理解了 HSL 颜色表示法,就能实现 ColorPicker 组件
Chrome 浏览器必知必会的小技巧
来源:FEWY https://segmentfault.com/a/1190000012143176 说明 这篇文章主要介绍的就是一些chrome浏览器的小技巧,很简单,希望对大家有所帮助。 这其中的一些小技巧在低版本中是没有的,所以建议大家用最新版的,目前最新版是62,版本很重要,如果发现有些技巧不起作用,请先查看浏览器的版本。 快捷键 快捷键比较多,这里挑出几个常用的说一下 最后会给出一张比较完整的快捷键的表 下列快捷键可以在所有 开发者工具 面板中可以使用 全局快捷键windowMac打开 开发者工
前端教程
2018/03/05
1.5K0
Chrome 浏览器必知必会的小技巧
绚丽的javascript拾色器(不兼容IE8及以下)
一切尽在注释中 html节点 <div id="colorpicker" style="display:inline-block;"> <input class="color-value" type="text" value="#ffffff" /> <div class="canvas-box" style="display:none;padding:10px;border:1px solid #ccc;"> <canvas id="canvas" style="cursor:crosshair;
lonelydawn
2018/02/09
1.6K0
绚丽的javascript拾色器(不兼容IE8及以下)
Chrome浏览器调试技巧大全!
注:本文测试、截图均为Edge浏览器(内核是Chromium),浏览器内核可了解《有哪些浏览器/内核?[1]》
zz_jesse
2024/07/04
5270
Chrome浏览器调试技巧大全!
使用浏览器开发工具测试网站可访问性的七种方法
有很多方法可以测试你的网站是否具有可访问性。服务、软件包,甚至是人工测试公司。他们都有自己的位置,通常最好是对真实的人进行测试。然而,对于一个快速的初步测试,你无需安装任何东西或支付服务费用。浏览器内置了开发者工具,这些工具具有出色的可访问性测试特性。以下是微软Edge和谷歌Chrome等浏览器的开发者工具。
winty
2021/03/09
1.4K0
【翻译】VisualStudio11中的CSS编辑器改进(asp.net 4.5系列)-ScottGu
下一个版本的VisualStudio关于支持在ASP.NET中使用CSS3的一些改进
liulun
2022/05/09
7730
【翻译】VisualStudio11中的CSS编辑器改进(asp.net 4.5系列)-ScottGu
网站设计、开发必备!8个颜色选择器让你事半功倍!
最近在开发中碰到关于颜色拾取器的需求,正好搜索了一些不错的JavaScript颜色选择器插件。这里把自己整理的内容分享给大家。
程序员老鱼
2023/08/10
4.2K0
网站设计、开发必备!8个颜色选择器让你事半功倍!
# 浏览器截图方案分析
html2canvasopen in new window 用的比较广泛的前端截图方案,先将 DOM 一个个 转为 Canvas 然后导出图片(使用 canvas 自带的 toDataUrl、toBobl)即可。使用起来应该是兼容性比较好的方案了,能解决大部分的需求,但是也有一写小问题,如:
九旬
2023/10/19
5660
谷歌浏览器开发调试的九个技巧
上篇的文章JavaScript两个快速调试的技巧,有些掘友留言说意犹未尽,那么我们再来说说些其他的技巧 🐶 如果你是一个前端开发者,你接触浏览器的时间会占用你工作时间的一半,甚至更多。那么我们推荐你使用谷歌浏览器,它是前端开发利器之一🚀 开题前,请你更新谷歌浏览器的版本到最新。 截止本文发布,鄙人window上谷歌浏览器为最新版本 - 版本 85.0.4183.121(正式版本)(64 位),mac上谷歌浏览器为最新版本 - Version 85.0.4183.121 (Official Build)
Jimmy_is_jimmy
2022/09/16
3960
谷歌浏览器开发调试的九个技巧
Chrome开发者工具完全入门指南:零基础到日常调试
最常用图示说明:① Elements 元素 ② Console 控制台 ③ Sources 源代码来源 ④ Network 网络 ⑤ Performance 性能
小明互联网技术分享社区
2025/05/16
9620
Chrome开发者工具完全入门指南:零基础到日常调试
记录一些在此之前不知道的Web API
Web API:https://developer.mozilla.org/zh-CN/docs/Web/API
房东的狗丶
2023/02/17
4920
Chrome DevTools 一些隐藏技巧
如果你是一名 Web 开发人员,那么你肯定会花不少时间在浏览器开发工具或 Web 控制台中,审查元素、修改 CSS 或在控制台中运行命令,这些是每个 Web 开发都知道如何使用的一些基本操作,但其实上我们还可以在浏览器内完成很多其他事情,让你的调试、开发和网页设计更加高效。以下是 Chrome DevTools 的一些隐藏的或鲜为人知的功能......
我是阳明
2020/09/29
2.1K0
Chrome DevTools 一些隐藏技巧
从零开始实现一个颜色选择器(原生JavaScript实现)
首先,我们无需搭建项目的环境,我们还是直接用最简单的方式,也就是引入的方式来创建这个项目,这样也就方便了我们一边编写一边测试。创建一个空目录,命名为ColorPicker,创建一个js文件,即color-picker.js,然后创建一个index.html文件以及创建一个样式文件color-picker.css。现在你应该可以看到你的项目目录是如下所示:
Nealyang
2021/10/27
1.5K0
不能错过的十款谷歌浏览器插件
我之前一直在用 Safari 浏览器,最喜欢的就是阅读器功能。不过后来发现谷歌浏览器有那么多各种各样神奇的插件后,就逐渐开始使用谷歌浏览器。之后看到有意思的插件就下载下来尝试一下,不好用就再删掉,这样反反复复的最终留下来了几款感觉还挺实用的免费插件给小伙伴们推荐一下。(以下排名不分先后)
壹言
2020/04/12
2.8K0
不能错过的十款谷歌浏览器插件
玩转手机自动化测试
之前我们玩过一些手机自动化软件,比如Airtest,ADB,通过这些软件我们可以和自己的手机进行关联,并且使用程序来代替我们本人来操作手机,今天我们要说的是另一款给力的自动化APP,这里要介绍的并不是Windows平台上的可执行文件哦,而是Android平台上的JavaScript IDE,更重要的一点就是这个工具是国人开发的,必须支持一个不是。而且AutoJs兼容性更好,传统的按键精灵,脚本精灵,虽然上手快,门槛低,但是他们是以坐标为基础,很容易出现分辨率的问题,而AutoJs则是以控件为基础,因而更强大,并且我们在玩自动化时是不需要Root的;那么,废话不多说,赶快让我们一睹为快这款强大的IDE吧。
前端皮皮
2021/08/19
1.4K0
html2canvas实现浏览器截图的原理(包含源码分析的通用方法)
有时用户希望将我们的报表页面分享到其他的渠道,比如邮件、PPT等,每次都需要自己截图,一是很麻烦,二是截出来的图大小不一。
Kagol
2020/12/22
2.3K0
html2canvas实现浏览器截图的原理(包含源码分析的通用方法)
【CSS】课程网站头部制作 ① ( 头部区域测量 | 头部盒子标签结构 | 整体页面背景颜色设置 | LOGO 盒子设置 | 切片工具切图 | LOGO 相关 HTML 结构及 CSS 样式编写 )
在 网页切图 的头部区域 的上下位置 , 拉两条上下辅助线 , 左右两侧的辅助线是 版心 的边界 ;
韩曙亮
2023/04/03
1.4K0
【CSS】课程网站头部制作 ① ( 头部区域测量 | 头部盒子标签结构 | 整体页面背景颜色设置 | LOGO 盒子设置 | 切片工具切图 | LOGO 相关 HTML 结构及 CSS 样式编写 )
【云+社区年度征文】面试官问我Chrome浏览器的渲染原理(6000字长文)
对于HTML,css和JavaScript是如何变成页面的,这个问题你了解过吗?浏览器究竟在背后都做了些什么事情呢?让我们去了解浏览器的渲染原理,是通往更深层次的开发必不可少的事情,能让我们更深层次,多角度的去考虑性能优化等问题。
达达前端
2020/12/14
1.6K0
【云+社区年度征文】面试官问我Chrome浏览器的渲染原理(6000字长文)
推荐阅读
相关推荐
了不起的Chrome浏览器(7):Chrome 95终于支持WebAssembly异常处理了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档