当前位置: 首页 > news >正文

react-signature-canvas 实现画笔与橡皮擦功能

react-signature-canvas git 地址

代码示例

import React, { Component } from 'react'
import { createRoot } from 'react-dom/client'import SignaturePad from '../../src/index.tsx'import * as styles from './styles.module.css'class App extends Component {state = { trimmedDataURL: null }isErasing = false;sigPad = {}clear = () => {this.sigPad.clear()}trim = () => {this.setState({trimmedDataURL: this.sigPad.getTrimmedCanvas().toDataURL('image/png')})}// 恢复画笔功能bruser = ()=>{this.isErasing = false;const canvas = this.sigPad._canvas;if (!this.isErasing && canvas) {const ctx = canvas.getContext('2d');ctx.globalCompositeOperation = 'source-over';}}//橡皮擦功能handleErase  = () => {this.isErasing = !this.isErasing;const canvas = this.sigPad._canvas;// 设置橡皮擦属性及样式if (this.isErasing && canvas) {const ctx = canvas.getContext('2d');ctx.fillStyle = '#e21061';ctx.globalCompositeOperation = 'destination-out';ctx.beginPath();ctx.arc(canvas.offsetLeft, canvas.offsetTop, 10, 0, 2 * Math.PI);ctx.fill();}}render() {const { trimmedDataURL } = this.statereturn <div className={styles.container}><div className={styles.sigContainer}><SignaturePad canvasProps={{className: styles.sigPad, }}options={{minWidth: 0.5, // 最小线条宽度maxWidth: 2, // 最大线条宽度penColor: "black" // 笔的颜色}}ref={(ref) => { this.sigPad = ref }} /></div><div style={{display:'flex',alignItems:'center',justifyContent:'space-around'}}><button className={styles.buttons} onClick={this.clear}>Clear</button><button className={styles.buttons} onClick={this.trim}>Trim</button><button className={styles.buttons} onClick={this.bruser}>Bruser</button><button className={styles.buttons} onClick={this.handleErase}>Erase</button></div>{trimmedDataURL? <img className={styles.sigImage} alt='signature'src={trimmedDataURL} />: null}</div>}
}createRoot(document.getElementById('container')).render(<App />)

 画笔成果展示:

橡皮擦擦除之后的效果:

http://www.lryc.cn/news/469681.html

相关文章:

  • 004:ABBYY PDF Transformer安装教程
  • FlinkSQL之temporary join开发
  • 第二十六节 直方图均衡化
  • 工单管理用什么工具好?8款推荐清单
  • 工地安全新突破:AI视频监控提升巡检与防护水平
  • World of Warcraft [CLASSIC][80][the Ulduar]
  • python实现数据库的增删改查功能,图形化版本
  • pipeline开发笔记
  • spark读取parquet文件
  • redis详细教程(1.String类型)
  • 用友U8接口-库存管理(7)
  • Spring Boot HikariCP数据库连接池入门
  • Docker快速上手教程:MacOS系统【安装/配置/使用/原理】全链路速通
  • 【JavaSE】认识String类,了解,进阶到熟练掌握
  • vue3 vben-admin 窗口大小更改后 echarts尺寸变为 100px的问题
  • Web应用框架-Django应用基础(3)-Jinja2
  • js(深浅拷贝,节流防抖,this指向,改变this指向的方法)
  • 香橙派5(RK3588)使用npu加速yolov5推理的部署过程
  • 基于MWORKS的蓝桥杯「智能装备数字化建模大赛」正式发布,首期培训本周六开启
  • 021、深入解析前端请求拦截器
  • windows中的tracert命令
  • 【玩儿】Java 数字炸弹小游戏(控制台版)+ IO 数据存储
  • 今日头条躺赚流量:自动化新闻爬取和改写脚本
  • 日常实习与暑期实习详解
  • Git的原理和使用(六)
  • Elasticsearch 中的高效按位匹配
  • LSTM,全称长短期记忆网络(Long Short-Term Memory),是一种特殊的循环神经网络(RNN)结构
  • 导出问题处理
  • 通过cv库智能切片 把不同的分镜切出来 自媒体抖音快手混剪
  • 【机器学习】——numpy教程