手写输入
2024-11-25 09:56:02
html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Signature Pad</title>
<style>
canvas {
border: 1px solid #000;
width: 100%;
max-width: 600px;
height: 300px;
}
button {
margin-top: 10px;
}
</style>
</head>
<body>
<h1>Signature Pad</h1>
<canvas id="signatureCanvas"></canvas>
<br>
<button id="clearButton">清除</button>
<button id="saveButton">保存</button>
<img id="savedImage" alt="Saved Signature" style="display:none;" />
<input type="hidden" name="qm" id="qm">
<script src="jquery-3.5.1.js"></script>
<script src="signature.js"></script>
</body>
</html>
js文件
// 获取Canvas元素和2D绘图上下文
const canvas = document.getElementById('signatureCanvas');
const ctx = canvas.getContext('2d');
// 设定Canvas尺寸
canvas.width = canvas.offsetWidth;
canvas.height = canvas.offsetHeight;
// 初始化绘图状态
let drawing = false;
let lastX = 0;
let lastY = 0;
// 开始绘制
canvas.addEventListener('mousedown', (e) => {
drawing = true;
[lastX, lastY] = [e.offsetX, e.offsetY];
});
canvas.addEventListener('mousemove', (e) => {
if (!drawing) return;
ctx.beginPath();
ctx.moveTo(lastX, lastY);
ctx.lineTo(e.offsetX, e.offsetY);
ctx.stroke();
[lastX, lastY] = [e.offsetX, e.offsetY];
});
canvas.addEventListener('mouseup', () => drawing = false);
canvas.addEventListener('mouseout', () => drawing = false);
// 移动端支持
canvas.addEventListener('touchstart', (e) => {
drawing = true;
const touch = e.touches[0];
const rect = canvas.getBoundingClientRect();
[lastX, lastY] = [touch.clientX - rect.left, touch.clientY - rect.top];
});
canvas.addEventListener('touchmove', (e) => {
if (!drawing) return;
const touch = e.touches[0];
const rect = canvas.getBoundingClientRect();
ctx.beginPath();
ctx.moveTo(lastX, lastY);
ctx.lineTo(touch.clientX - rect.left, touch.clientY - rect.top);
ctx.stroke();
[lastX, lastY] = [touch.clientX - rect.left, touch.clientY - rect.top];
});
canvas.addEventListener('touchend', () => drawing = false);
// 清除Canvas
document.getElementById('clearButton').addEventListener('click', () => {
ctx.clearRect(0, 0, canvas.width, canvas.height);
});
// 保存签名为图片
document.getElementById('saveButton').addEventListener('click', () => {
const dataURL = canvas.toDataURL('image/png');
const img = document.getElementById('savedImage');
img.src = dataURL;
$("#qm").val(dataURL);
img.style.display = 'block';
});
上一篇:打印iframe 页面
- 新疆阿克苏地区沙雅县发生4.6级地震 震源深度22千米2022-10-17
- 全国铁路10月11日起实行第四季度运行图2022-10-10
- 又一地实行静态管理,游客滞留怎么办?2022-10-09
- 中国到底盖了多少房子2022-10-12
- 美国借俄游艇停靠事件抹黑香港2022-10-10
- 友谊是一株树2019-05-29
- 31省区市新增本土“208+587”2022-10-18
- 奥运冠军石智勇,履新职2022-10-09
- 国庆档收官:《万里归途》票房夺冠 主流大片走红2022-10-08
- 国庆“嫁”期,你随了多少礼?2022-10-06
- 午夜更新!全国现有高中风险区695+617个,一图速览2022-10-05
- 广东10月4日新增本土确诊34例、无症状感染者24例2022-10-05
- 10月6日7时至22时 海口实行临时性全域静态管理2022-10-06
- 北京10月5日新增本土确诊2例、无症状感染者2例2022-10-06
- 北京朝阳区新增2名新冠肺炎初筛阳性人员2022-10-09
- 二十大报告亮点纷呈 众多重要表述受关注2022-10-16
- 未来中国开放的大门只会越开越大2022-10-17
