原生JS实现canvas移动端电子签名板/画板

618 阅读1分钟

一个移动端项目, 有电子签名功能, 生产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);
}

竖屏效果:

image.png

横屏效果:

image.png