Hướng dẫn tạo field signature ( Chữ ký ) vào form với PHP HTML
Tạo đoạn mã javascript sau
var canvas = document.getElementById('signature'); var ctx = canvas.getContext("2d"); var drawing = false; var prevX, prevY; var currX, currY; var signature = document.getElementsByName('signature')[0]; canvas.addEventListener("mousemove", draw); canvas.addEventListener("mouseup", stop); canvas.addEventListener("mousedown", start); function start(e) { drawing = true; } function stop() { drawing = false; prevX = prevY = null; signature.value = canvas.toDataURL(); } function draw(e) { if (!drawing) { return; } // Test for touchmove event, this requires another property. var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; var clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; currX = clientX - canvas.offsetLeft; currY = clientY - canvas.offsetTop; if (!prevX && !prevY) { prevX = currX; prevY = currY; } ctx.beginPath(); ctx.moveTo(prevX, prevY); ctx.lineTo(currX, currY); ctx.strokeStyle = 'black'; ctx.lineWidth = 2; ctx.stroke(); ctx.closePath(); prevX = currX; prevY = currY; } function onSubmit(e) { console.log({ 'name': document.getElementsByName('name')[0].value, 'signature': signature.value, }); return false; }
Tạo đoạn mã CSS sau
canvas#signature { border: 2px solid black; } form>* { margin: 10px; }
Tạo đoạn HTML
<form action="submit.php" onsubmit="return onSubmit(this)" method="post"> <div> <input name="name" placeholder="Your name" required /> </div> <div> <canvas id="signature" width="300" height="100"></canvas> </div> <div> <input type="hidden" name="signature" /> </div> <button type="submit">Send</button> <form>
PHP xử lý
$img = $_POST['signature']; $data = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $img)); file_put_contents('storage/signature.png', $data);
Lưu ý đối với các sự kiện chạm trên thiết bị di động
Nếu bạn cần khả năng di động/cảm ứng, chỉ cần thay đổi các sự kiện thành:
mousemove
:touchmove
mouseup
:touchend
mousedown
:touchstart
Nếu cần cả đầu vào di động và chuột, bạn có thể sao chép 3 dòng addEventListener để theo dõi tất cả 6 sự kiện.