react-signature-canvas 签名功能
基于移动端需要扫码签名的功能,这里记录一下。
1、使用 react-signature-canvas 插件,npm i react-signature-canvas --save
2、此功能签名后生成的图片是base64格式,如需其他格式,可参考文档修改
3、封装的组件代码
import { SignatureCanvasWrapper } from './style';
import React, {
  useState,
  useRef,
  useImperativeHandle,
  forwardRef,
  useEffect,
} from 'react';
import SignatureCanvas from 'react-signature-canvas';
import { useSize } from 'ahooks';
interface IProps {
  width?: string;
  height?: string;
  imageWidth?: number; // 签名图片的宽高
  imageHeight?: number;
  rotated?: boolean;  // 移动端横屏签名
  signMess?: string;
  renderContent: (e?) => void; // 生成的图片
}
// 签名 组件
function SignatureCanvasComponent(props: IProps, ref) {
  const {
    renderContent,
    width,
    signMess,
    imageWidth,
    imageHeight,
    rotated,
    height,
  } = props;
  const [signTip, setSignTip] = useState(signMess || '请在此区域签署本人姓名');
  const sigCanvasRef = useRef<SignatureCanvas | null>(null);
  const canvasContainer = useRef<HTMLDivElement>(null);
  const size = useSize(canvasContainer);
  useImperativeHandle(ref, () => ({
    clearSign,
  }));
  // 重签
  const clearSign = () => {
    sigCanvasRef.current.clear();
  };
  useEffect(() => {
    if (rotated && size?.height) {
      var canvas = document.querySelector('#sigCanvas') as HTMLCanvasElement;
      if (canvas) {
        var ctx = canvas.getContext('2d');
        if (ctx) {
          ctx.rotate(1.5 * Math.PI);
          ctx.translate(-canvas!.height, 0);
        }
      }
    }
  }, [rotated, size]);
  return (
    <SignatureCanvasWrapper ref={canvasContainer}>
      <SignatureCanvas
        penColor="#000"  // 笔刷颜色
        minWidth={3}  、、 笔刷粗细
        maxWidth={5}
        canvasProps={{
          id: 'sigCanvas',
          width: size.width,
          height: size.height,  // 画布尺寸
          className: 'LegalRisk-signature',
        }}
        ref={sigCanvasRef}
        onBegin={() => setSignTip('')}
        onEnd={() => {
          // 图片
          const trimedCanvas: HTMLCanvasElement = sigCanvasRef.current.getTrimmedCanvas();
          if (trimedCanvas) {
            var resizedCanvas = document.createElement('canvas');
            var resizedContext = resizedCanvas.getContext('2d');
            resizedCanvas.height = imageHeight || 50;  // 传给后台的图片尺寸
            resizedCanvas.width = imageWidth || 100;
            resizedContext?.drawImage(
              trimedCanvas,
              0,
              0,
              imageWidth || 100,
              imageHeight || 50,
            );
            var myResizedData = resizedCanvas.toDataURL();
            console.log('签名图片:', myResizedData);
            renderContent(myResizedData);
          }
        }}
      />
      {signTip && <div className="SignatureTips">{signTip}</div>}
    </SignatureCanvasWrapper>
  );
}
export default forwardRef(SignatureCanvasComponent);
4、在使用的页面:
<SignatureCanvasComponent
ref={childRef}
renderContent={e => {
// 暂存
setSign(e);
}}
></SignatureCanvasComponent>
5、样式代码(style.ts)
import styled from 'styled-components/macro';
export const mainColor = '#286bff'; export const SignatureCanvasWrapper = styled.div`
width: 100%;
position: relative;
.LegalRisk-signature {
width: 100%;
border-radius: 10px;
background: #f5f7fe;
border: 2px dashed ${mainColor};
}
.SignatureTips {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
color: #a2a0a8;
font-weight: regular;
font-size: 12px;
display: flex;
align-items: center;
justify-content: center;
pointer-events: none;
}
`;
react-signature-canvas 签名功能的更多相关文章
- 痞子衡嵌入式:开启NXP-MCUBootUtility工具的HAB签名功能 - CST(中英双语)
		1 Reason for enabling HAB signature function 为什么要开启HAB签名功能 NXP-MCUBootUtility is a tool designed for ... 
- React Native移动框架功能研究
		React Native移动框架功能研究 此篇只研究React Native框架的功能. 一.React Natvie是什么 React Native是使用React(或者说JS)来开发原生APP的框 ... 
- 【React Native开发】React Native进行签名打包成Apk
		转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50525976 本文出自:[江清清的博客] (一)前言 [好消息]个人 ... 
- php 微信jssdk 微信分享一直报config:fail,Error: invalid signature(签名生成是一致的)
		php 微信jssdk 微信分享一直报config:fail,Error: invalid signature(签名生成是一致的) 里面url必须是当前的url比方说在A地址 请求获取jssdk参数 ... 
- 利用canvas阴影功能与双线技巧绘制轨道交通大屏项目效果
		利用canvas阴影功能与双线技巧绘制轨道交通大屏项目效果 前言 近日公司接到一个轨道系统的需求,需要将地铁线路及列车实时位置展示在大屏上.既然是大屏项目,那视觉效果当然是第一重点,咱们可以先来看看项 ... 
- pc端结合canvas实现简单签名功能
		需求:业务员做提交时要签名... 代码不多简单易懂,直接看代码 <!DOCTYPE html> <html> <head> <meta charset=&qu ... 
- 用canvas实现手写签名功能
		最近开发网站有一个需求,要求页面上有一块区域,用户能用鼠标在上面写字,并能保存成图片 base64 码放在服务器.这样的需求用 canvas 实现是最好的.需要用到 canvas 的以下几个属性: b ... 
- VUE中使用canvas做签名功能,兼容IE
		<template> <div> <div class="msgInput"> &l ... 
- react + antd 实现打印功能(踩了不少坑)
		最近在有网页打印需求,尝试了一下react的打印功能,遇到了不少的坑: 1.react本身有一些打印的组件,但都不好用,都是基于window.print(),但是window.print()如果直接打 ... 
- 利用React实现表头维度功能
		这是我真正意义上地用react实现一些东西.这次分享的是一个很简单的小组件,效果图先放上来: 前端样式用的是一套框架.功能很简单,就是根据选择的维度,在成员里选择对应这个维度的选项. 首先初始化一些数 ... 
随机推荐
- 记一次Mybatis-Plus动态分表DynamicTableNameInnerInterceptor里无法动态替换表名的坑
			首先上源码 protected String changeTable(String sql) { ExceptionUtils.throwMpe(null == tableNameHandler, & ... 
- argocd
			argocd Argo CD - Declarative GitOps CD for Kubernetes (argo-cd.readthedocs.io) What Is Argo CD Argo ... 
- CIL指令和指针类型的操作
			对象引用的使用在CIL中受到严格限制.它们几乎完全被使用带有VOS(Virtual Object System)指令,这些指令是专门为处理对象和部分对象引用而设计的. 常规操作如下: 首先我们需要将加 ... 
- 如何完整卸载catia?
			如何完整卸载catia?完全彻底卸载删除干净catia各种残留注册表和文件的方法和步骤.如何卸载catia呢?有很多同学想把catia卸载后重新安装,但是发现catia安装到一半就失败了或者显示cat ... 
- SpringBoot启动流程简要分析
			声明 源码基于Spring Boot 2.3.12.RELEASE 背景 此文的目的主要想弄明白为什么在Spring Boot中注册Servlet.Filter.Listener组件时需要加上@Ser ... 
- ADC多通道采样DMA传输模板
			void MyADC_Init(void){ ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; DMA_I ... 
- Pyodide读取CSV、EXCEL
			from pyodide.http import pyfetch, open_url pyfetch(url="/your/URL/goes/here", method=" ... 
- 转载安卓或苹果手机获取URL scheme方法
			首先,打开支付宝,来到需要抓取的小程序页面.此处以上海的随申码为例演示,打开随申办小程序,点击顶部的「随申码」按钮进入页面. 可以看出这个一个二级页面,如果想要使用 URL Scheme 一键访问,同 ... 
- 最简单的应用flask
			服务端 # -*- coding: utf-8 -*- from flask import Flask,request flask_app = Flask('55kai') @flask_app.ro ... 
- 摹客RP,编辑界面缩放比例支持手动输入!
			Hello,小伙伴们,又到了摹客的新功能播报时间. 本月更新,摹客RP编辑界面缩放比例支持手动输入,并对部分组件的默认样式及属性进行了优化:摹客DT率先上线了3款黄金比例图层,辅助设计师更高效绘图:针 ... 
