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实现一些东西.这次分享的是一个很简单的小组件,效果图先放上来: 前端样式用的是一套框架.功能很简单,就是根据选择的维度,在成员里选择对应这个维度的选项. 首先初始化一些数 ...
随机推荐
- windows安装和重装系统后无法识别U盘
安装系统的方法: 1. 方案一,用大白菜制写入pe系统,但必须先准备Windows安装包 方案二,把ISO格式的系统安装包直接写入到u盘,写入U盘的方法请百度 2.开机看到电脑的logo后,按f2(不 ...
- go 语言操作es示例
使用高度封装的 orm 查询 package main import ( "context" "fmt" "log" "os&qu ...
- Win10下如何添加“中文简体(美式键盘)”输入法
参考Win10下如何添加"中文简体(美式键盘)"输入法 设置>>时间和语言>>语言>>添加语言>>选择要安装的语言>>英 ...
- docker中安装elasticsarch 等镜像
1.在dockerhub中查找镜像 2.查看镜像下的说明,如下图标识成功 a.安装elasticsearch 运行命令 docker run --name myes01 -d -p 9200:9200 ...
- CRC校验模板
#ifndef CRC_H #define CRC_H #include "main.h" #ifdef CRC_C #endif typedef struct { uchar R ...
- 【文献阅读】Wigley船在波浪中的运动分析
(1)相关内容 船舶在波浪上运动所受到的外力,主要是流体作用力.这些力的大小和变化与船舶以及流体相对运动有关.一般采用流体动力学方法计算. 船舶在波浪中的运动,根据波浪的形式,分为规则波与不规则波两个 ...
- SecureCRT保存日志
1.打开Options->Session Options...,选择LogFile 2.Log file name格式 %H_%S_%Y%M%D-%h%m%s.log 参数说明: %H---主机 ...
- java学习流程(java学习之路)
Java学习流程 Java SE(18-20天) 1.计算机基础 2.博客的重要性 3Java基础语法 4.流程控制和方法 5 .数组 6 .面向对象 7 .异常 8 .常用类 9 .集合框架 10 ...
- 一 MySQL的架构与历史1.1--1.4
1.1 MySQL逻辑架构 最上层的服务并不是 MySQL 所独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构.比如连接处理.授权认证.安全等等. 第二层架构是MySQL比较有意思的 ...
- centos8修改更新迁徙到Stream方法
迁徙到Stream 此方案比较简单,输入以下命令即可: wget 'http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages ...