一个移动端项目, 有电子签名功能, 生产PNG格式上传服务器, 而且需要横屏签名, 这需要注意移动端的横屏后宽高的变化, 以下是JS核心部分, 完整文档请点击上面链接
//整体思路是初始化canvas,通过监听触控开始、移动、结束,来完成移动轨迹的绘制。
//最后设置清除画布按钮和生成png格式图片的按钮方法。
var canvas = document.getElementById("canvas")
//动态设置宽高
canvas.width = 400
canvas.height = 300
var content = canvas.getContext("2d")
//设置画笔的样式
content.strokeStyle = "#000"
content.lineWidth = 1
content.lineCap = 'round'
content.lineJoin = 'round'
content.shadowBlur = 1
content.shadowColor = '#000'
content.beginPath()
//点击
canvas.addEventListener("touchstart", function(e) {
content.beginPath()
var touch = e.targetTouches[0]
var x = touch.pageX - canvas.offsetLeft
var y = touch.pageY - canvas.offsetTop
content.moveTo(x, y)
})
//移动
canvas.addEventListener("touchmove", function(event) {
event.preventDefault()
var touch = event.targetTouches[0]
var x = touch.pageX - canvas.offsetLeft
var y = touch.pageY - canvas.offsetTop
content.lineTo(x, y)
content.stroke()
})
//结束
canvas.addEventListener("touchend", function(event) {
content.closePath()
$('.but2').attr('disabled', false)
})
//清除画布 .but1元素 点击事件
document.querySelector(".but1").onclick = function() {
content.clearRect(0, 0, canvas.offsetWidth, canvas.offsetHeight)
}
竖屏效果:

横屏效果:
