Hello,大家好,我是 Sunday。
前段时间有位同学问我:“公司项目中需要增加一个签字板的功能”,问我如何进行实现。
我说:“这种功能很简单呀,目前市面上有很多开源的库,比如:signature_pad 就可以直接引入实现”。
但是,该同学说自己公司的项目比较特殊,尽量不要使用 第三方的库,所以想要自己实现,那怎么办呢?
没办法!只能帮他实现一个了.
签字板实现逻辑
签字板的功能实现其实并不复杂,核心是 基于 canvas 的 2d 绘制能力,监听用户 鼠标 或者 手指 的移动行为,完成对应的 线绘制。
所以,想要实现签字板那么必须要有一个 canvas,先看 html 的实现部分:
html
我们可以基于以上代码完成 HTML 布局,核心是两个内容:
- canvas 画布:它是完成签字板的关键
- controls 控制器:通过它可以完成 画笔切换 以及 清空画布 的功能
css
css 相对比较简单,大家可以根据自己的需求进行调整就可以了,以下是 css 大家可以作为参考:
js
js 部分是整个签字板的核心,我们需要在这里考虑较多的内容,比如:
- 为了绘制更加平滑,我们需要使用 ctx.quadraticCurveTo 方法完成平滑过渡
- 为了解决移动端手指滑动滚动条的问题,我们需要在 move 事件中通过 e.preventDefault() 取消默认行为
- 为了完成画笔切换,我们需要监听 select 的 change 事件,从而修改 ctx.lineWidth 画笔
最终得到的 js 代码如下所示(代码中提供的详细的注释):
以上就是 纯JS实现签字板的完整代码,大家可以直接组合代码进行使用,最终展示的结果如下: