帖子
帖子
用户
博客
课程
显示全部楼层
26
帖子
0
勋章
221
Y币

原生canvas实现签字功能

[复制链接]
发表于 2021-5-14 16:47:53
1、html代码
  1. <canvas id="canvas">您的机型版本不支持canvas</canvas>
复制代码
2、初始化画布
  1. function __init() {
  2.             var canvas = document.getElementById('canvas');
  3.             var oGC = canvas.getContext('2d');
  4.             var header_h = api.pageParam.h;
  5.             var w = api.winWidth;
  6.             var h = api.winHeight;
  7.             canvas.width = w - 60;
  8.             canvas.height = h - 80;
  9.             var strokeColor = "blue";
  10.             var isMouseDown = false;//是否按下鼠标
  11.             var lastLoc = { x: 0, y: 0 };//上一次鼠标的坐标点

  12.             canvas.addEventListener('touchstart', function (ev) {
  13.                 ev.preventDefault()
  14.                 isMouseDown = true;
  15.                 lastLoc = windowToCanvas(ev.touches[0].clientX, ev.touches[0].clientY);

  16.             })
  17.             canvas.addEventListener('touchmove', function (ev) {
  18.                 ev.preventDefault()
  19.                 var curLoc = windowToCanvas(ev.touches[0].clientX, ev.touches[0].clientY);
  20.                 oGC.beginPath();
  21.                 oGC.moveTo(lastLoc.x, lastLoc.y);
  22.                 oGC.lineTo(curLoc.x, curLoc.y);
  23.                 oGC.strokeStyle = '#000';
  24.                 oGC.lineWidth = 6;
  25.                 oGC.lineCap = "round";
  26.                 oGC.lineJoin = "round";
  27.                 oGC.stroke();
  28.                 lastLoc = curLoc;
  29.             })
  30.             canvas.addEventListener('touchend', function (ev) {
  31.                 ev.preventDefault()
  32.                 isMouseDown = false;
  33.             })
  34.         }
复制代码
2-1、拿到当前点击的坐标点
  1. function windowToCanvas(x, y) {
  2.             // 拿到canvas距离文档里offsetLeft 和 offsetTop
  3.             var clientRect = canvas.getBoundingClientRect();
  4.             return {
  5.                 x: Math.round(x - clientRect.left),
  6.                 y: Math.round(y - clientRect.top)
  7.             }
  8.         }
复制代码
2-2、清空画布
  1. function reset() {
  2.             var canvas = document.getElementById('canvas');
  3.             var oGC = canvas.getContext('2d');
  4.             var header_h = api.pageParam.h;
  5.             var w = api.winWidth;
  6.             var h = api.winHeight;
  7.             oGC.clearRect(0, 0, w - 60, h - 80);
  8.         }
复制代码
3、处理画布,回调图片
  1. function rotateBase64(data,cb) {
  2.             var imgView = new Image();
  3.             imgView.src = data;
  4.             var canvas = document.createElement('canvas');
  5.             var context = canvas.getContext('2d');
  6.             var cutCoor = { sx: 0, sy: 0, ex: 0, ey: 0 }; // 裁剪坐标
  7.             imgView.onload = function() {
  8.                 var imgW = imgView.width;
  9.                 var imgH = imgView.height;
  10.                 var size = imgH;
  11.                 canvas.width = size * 2;
  12.                 canvas.height = size * 2;
  13.                 cutCoor.sx = size;
  14.                 cutCoor.sy = size - imgW;
  15.                 cutCoor.ex = size + imgH;
  16.                 cutCoor.ey = size + imgW;
  17.                 context.translate(size, size);
  18.                 context.rotate(Math.PI / 2 * 3);
  19.                 context.drawImage(imgView, 0, 0);
  20.                 const imgData = context.getImageData(cutCoor.sx, cutCoor.sy, cutCoor.ex, cutCoor.ey);
  21.                 canvas.width = imgH;
  22.                 canvas.height = imgW;
  23.                 context.putImageData(imgData, 0, 0);
  24.                 cb && cb(canvas.toDataURL('image/png'))
  25.             };
  26.         }
复制代码
4、确认提交
  1. function submit() {
  2.             var canvas = document.getElementById('canvas');
  3.             var oGC = canvas.getContext('2d');
  4.             var strDataURI = canvas.toDataURL();
  5.             rotateBase64(strDataURI,function(img){
  6. console.log(img)
  7.             })
  8.         }
复制代码


您需要登录后才可以回帖 登录

本版积分规则