电子签名实现--react canvas draw

近期公司有一个小需求,在电子合同的基础上加上手写签名,并支持ipad适配,听到这里,我把ipad从泡面盖上拿了起来,打开了爱奇艺...🐶
好的,接下来让我给大家介绍一下这个高效简单易上手的组件 --- react-canvas-draw

简单介绍 && 快速上手
Installation
// via npm
npm install react-canvas-draw --save   
// via yarn
yarn add react-canvas-draw
 Usage
import React from "react";
import ReactDOM from "react-dom";
import CanvasDraw from "react-canvas-draw";
ReactDOM.render(<CanvasDraw />, document.getElementById("root"));
Props
static defaultProps = {
    onChange: null
    loadTimeOffset: 5,
    lazyRadius: 30,
    brushRadius: 12,
    brushColor: "#444",
    catenaryColor: "#0a0302",
    gridColor: "rgba(150,150,150,0.17)",
    hideGrid: false,
    canvasWidth: 400,
    canvasHeight: 400,
    disabled: false,
    imgSrc: "",
    saveData: null,
    immediateLoading: false,
    hideInterface: false
  };
Functions
  • getSaveData() 返回所画的图形的canvas编码
  • loadSaveData(saveData: String, immediate: Boolean) 加载savaData对应的图形
  • clear() 清空画布
  • undo()撤销上一步操作
查看页面结构
  • 可以看到页面生成了四个canvas,分别对应笔头drawing、画布grid、轨迹interface、模版temp
实现代码
class Index extends PureComponent {
  signCanvas = React.createRef();
    this.state = {
      imageBase64: null,
    };
 // 得到签名并转化为图片
  createSignImg = async () => {
    const signImg = this.signCanvas.current.canvas.drawing.toDataURL('image/png');
  };
    // 清空画布
  clearSign = async () => {
    this.signCanvas.current.clear();
  };
    // 将图片提交到后台
  submitSign = async () => {
    const { imageBase64 } = this.state;
    const form = new FormData();
    form.append('file', dataURLtoBlob(imageBase64), `${moment()}mySign.png`);
    const response = await request(`/img/upload?_csrf=${window._csrf}`, {
      method: 'POST',
      body: form,
    });
  render() {
    const { imageBase64 } = this.state;
    return (
      <PageHeaderWrapper>
        <Card bordered={false}>电子手写签名</Card>
        <Card bordered={false}>
          <CanvasDraw
            ref={this.signCanvas}
            brushColor="#000"
            brushRadius={3}
            lazyRadius={10}
            canvasWidth="100%"
            canvasHeight={400}
          />
          <Button type="primary" onClick={this.createSignImg}>
            生成图片
          </Button>
          <Button type="primary" onClick={this.clearSign}>
            清空画布
          </Button>
          <Button type="primary"  onClick={this.submitSign}>
            提交
          </Button>
        </Card>
        <Card>
          生成的图片:
          {imageBase64 && <img src={imageBase64} alt="图片" />}
        </Card>
      </PageHeaderWrapper>
    );
  }
}
export default Index;
  • 注:关于图片提交服务器,参照之前的群鱼湾公众号:
  • 老鱼出品:如何快速开发并搭建静态图片服务
  • 关于ipad/移动设备适配,各位看官不用着急,咱下回再聊~我要吃泡面了🍜
  • 欢迎关注群鱼湾公众号,做有态度的技术人✨
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值