import React, { useEffect, useState, useRef } from 'react'
import QRCode from 'qrcode.react';
function Others() {
const canvasDom = useRef()
const [imgSrc, setSrc] = useState('')
const writing = (
beginX,
beginY,
stopX,
stopY,
ctx,
) => {
ctx.beginPath()
ctx.globalAlpha = 1
ctx.lineWidth = 3
ctx.strokeStyle = 'red'
ctx.moveTo(beginX, beginY)
ctx.lineTo(stopX, stopY)
ctx.closePath()
ctx.stroke()
}
useEffect(() => {
let beginX; let beginY
const canvas = canvasDom.current
const ctx = canvas.getContext('2d')
ctx.fillStyle = '#fff'
ctx.fillRect(0, 0, canvas.width, canvas.height)
canvas.addEventListener('touchstart', function(event) {
event.preventDefault()
beginX = event.touches[0].clientX - this.offsetLeft
beginY = event.touches[0].pageY - this.offsetTop
})
canvas.addEventListener('touchmove', (event) => {
event.preventDefault()
event = event.touches[0]
const stopX = event.clientX - canvas.offsetLeft
const stopY = event.pageY - canvas.offsetTop
writing(beginX, beginY, stopX, stopY, ctx)
beginX = stopX
beginY = stopY
})
}, [])
const clearCanvas = () => {
const canvas = canvasDom.current
const ctx = canvas.getContext('2d')
setSrc('')
ctx.clearRect(0,0,canvas.width,canvas.height);
}
const sure = () => {
const a = canvasDom.current.toDataURL("image/jpeg", 1.0)
setSrc(a)
}
const download = () => {
let img = new Image()
const url = canvasDom.current.toDataURL("image/jpeg", 1.0)
img.src = url
img.onload = () => {
let href = url
let a = document.createElement('a');
a.download = 'test.jpeg'
a.href = href ;
a.click()
}
}
const downPdf = () => {
}
return (
<div className={'boxbox'}>
<div className={'set-name'}>
签名:
{ imgSrc && <img src={imgSrc} width="100" height="60"/> }
</div>
<canvas className={'set-canvas'} ref={canvasDom} width="350" height="150"/>
<button style={{ marginRight: '4px' }} onClick={sure}>确定</button>
<button style={{ marginRight: '4px' }} onClick={clearCanvas}>重置</button>
{}
<QRCode
value={'你好'}
size={200}
fgColor="#000000"
/>
</div>
)
}
export default Others;
.set-canvas {
border: 1px solid #000;
border-radius: 0.05rem;
}
.boxbox{
margin: 0 auto;
}
.set-name {
font-size: 0.32rem;
text-align: center;
margin-bottom: 0.2rem;
}
.boxp{
height: 500px;overflow:auto;padding: 10px;line-height: 2em;font-size: 12px;margin: 0 10px;
}