说到前端网页颜色选择器(颜色吸管工具)的实现,我们通常会想到截图首先是网页,然后通过CanvasScreenshot绘制出来,这时利用Canvas提供的API来分析图片中每个像素点的颜色,最后通过获取鼠标位置选择颜色来获取当前坐标。这样一来,问题通常出在第一步,也就是网页截图的方法。前端网页截图常用的工具有:html2canvas、dom-to-image等,但是这些库的实现原理都是通过解析DOM然后转换语法(Canvas或者Svg)来绘制然后导出图片。虽然这是目前实现截??图操作的唯一方式,但我们必须清楚,这种方式不可避免地会出现以下问题:对于复杂的网页场景分析,可能存在遗漏或错误渲染结果无法避免Canvas或Svg与网页的渲染效果不同。生成效率太慢,解析绘制过程会造成卡顿,极大影响用户体验。因此,在设计初期就考虑了基于这种思路的颜色吸收体。可用性仍然无法避免上述问题,最多只能应用于简单的网页场景,但这通常与事实相悖——因为简单的网页往往很少有使用颜色吸收器的业务场景。Native解决方案如果JS的实现方法令人沮丧,那么将问题交给浏览器的native方法可能是未来最好的解决方案之一。其实原生HTML已经提供了颜色选择的元素,也就是我们熟悉的input标签。
