做移动端收集电子签名项目的时候发现了一些坑:

1. 移动端的手指按下、移动、抬起事件跟PC端的鼠标按下、移动、弹起事件是不一样的

2. canvas它的属性宽高和样式宽高是不一样的,通过CSS来设置canvas的宽高会导致一些奇怪的问题

3. canvas的间距(如果有)会造成手指落点和实际绘画的点有偏移,所以在开始绘画的时候要先把画笔移动到正确的位置

    <canvas id="ESCanvas" width="400" height="400">该浏览器不支持canvas画布</canvas>

//PC端鼠标绘画代码
var canvas = document.getElementById('ESCanvas');
var ctx = canvas.getContext('2d');
var paint = false;canvas.onmousedown =function (e) {paint = true;ctx.moveTo(e.pageX - this.offsetLeft, e.pageY - this.offsetTop);canvas.onmousemove  = function (e) {if (paint) {ctx.lineTo(e.pageX - this.offsetLeft, e.pageY - this.offsetTop);ctx.stroke();}}canvas.onmouseup  = function (e) {paint = false;}
}

//移动端手绘代码

//阻止页面拖动
document.body.addEventListener('touchmove', function (e) {e.preventDefault();
}, { passive: false }); var canvas = document.getElementById("ESCanvas");
var ctx = canvas.getContext("2d");//页面样式
canvas.width = window.screen.width - 42;//左边距20,右边为对齐左边留20,边框左右各1
canvas.height = window.screen.height - 130;//顶边距20,底边距20,边框左右各1,按钮组68,按钮组底边距20var l = canvas.offsetLeft;
var t = canvas.offsetTop;canvas.ontouchstart = function (e) {ctx.beginPath();ctx.moveTo(e.touches[0].pageX - l, e.touches[0].pageY - t);
}canvas.ontouchmove = function (e) {ctx.lineTo(e.touches[0].pageX - l, e.touches[0].pageY - t);ctx.stroke();
}canvas.ontouchend = function (e) {ctx.closePath();
}

最后的页面效果图:

转载于:https://www.cnblogs.com/marisen/p/10607022.html

做移动端电子签名发现canvas的 一些坑相关推荐

  1. vue做移动端适配最佳解决方案,亲测有效

    最近在做商城的项目,发现有赞的ui非常适合,但有一个问题是有赞的ui用的单位是px,做不了移动端的适配,官网的提供的vw适配方案发现不可行,最后还是决定rem来做适配,上网搜了一下,发现了一套可用方案 ...

  2. 我问你这篇保熟不?! -- 做服务端开发,不懂网络层,真的可以吗?

    文章目录 唠嗑两句·网络层 网络层简介 网际协议IP 常见的三类IP地址 A类 B类.C类 IP地址与硬件地址 地址解析协议ARP IP层转发分组 子网划分 子网划分的背景意义 什么是子网划分? 子网 ...

  3. java sslsocket程序_JAVA与C++进行sslsocket通信,JAVA做服务端或客户端

    前几天有位网友问我关于Unity3D里面使用Protobuf的方法,一时有事拖到现在才写这篇文章,不好意思哈. 本文测试环境: 系统:WINDOWS 7(第3.6步).OS X 10.9(第4步) 软 ...

  4. java服务端开发 php_PHP使用thrift做服务端开发

    php中文网最新课程 每日17点准时技术干货分享 php使用thrift做服务端开发 thrift采用接口描述语言定义和创建服务,用二进制格式传输数据,体积更小.效率更高,对于高并发.数据量大和多语言 ...

  5. php 可以做pc客户端吗,vue.js能做pc端吗

    vue.js能做pc端,因为Vue是一套构建用户界面的渐进式框架,不管是用在PC端还是用在移动端,只要提供对应的API及数据相应就可以:但是PC端单页面对于搜索引擎可能不太友好,无法让搜索引擎把整个网 ...

  6. 土地利用转移矩阵图怎么做_肺癌骨转移有哪些早期症状?做什么检查可以发现?怎么治疗?...

    晚期肺癌很容易出现远处转移,最常见的转移部位有:脑.骨骼.肾上腺.对侧肺.肝脏.在这些转移中,有一种转移在早期就会出现明显的症状,这就是肺癌骨转移.肺癌骨转移会出现哪些明显的早期症状呢? 肺癌骨转移的 ...

  7. 干货分享:vue2.0做移动端开发用到的相关插件和经验总结(2)

    最近一直在做移动端微信公众号项目的开发,也是我首次用vue来开发移动端项目,前期积累的移动端开发经验较少.经过这个项目的锻炼,加深了对vue相关知识点的理解和运用,同时,在项目中所涉及到的微信api( ...

  8. 做B端产品经理好还是做C端产品经理好?

    做B端产品经理好还是做C端产品经理好?这个问题也是一些小白和刚转行进入产品经理的新人的一个疑问,做哪种产品经理好.本文从三个层面为大家进行剖析. B端产品经理 1.定义层面:B端产品经理和C端产品经理 ...

  9. 如何来做移动端网站SEO

    随着移动端互联网的不断发展,越拉越多的企业开始注重移动端网站,想要让移动端网站在移动端搜索引擎占据一个良好的排名,就必须要了解移动端网站seo的一些技巧.那么,如何来做移动端网站seo呢? 1.域名 ...

最新文章

  1. Docker for mac安装
  2. C++ 程序不一定从 main 处开始执行
  3. java 分布式服务器通信,Pigeon是大众点评的一个分布式服务通信框架RPC
  4. 十佳运动员有奖评选系统_2019年度国际足坛十佳运动员,利物浦三星在列,第十名属私心...
  5. 一、学爬虫前,你需要知道的爬虫常识
  6. boost::intrusive::splay_set用法的测试程序
  7. 云计算:企业商业模式创新的新战线
  8. django写mysql轮询_django 多数据库及分库实现方式
  9. scala 方法重载_Scala中的方法重载
  10. 简单文件传输TFTP服务器搭建 Linux RHEL6
  11. 企业实战_02_MyCat基本元素
  12. [HDU] 3491 Thieves
  13. npm install失败的解决方法
  14. mysql56允许远程连接_mysql允许远程连接的方法
  15. css画钟表_CSS绘制时钟
  16. 面向削峰填谷的电动汽车多目标优化调度策略——附代码
  17. 修改C盘下的用户名(适合win10和win11)
  18. Latex编辑论文常用package
  19. sudo -i和sudo -s
  20. 日常计算机网络基础练习题(每天进步一点点系列)

热门文章

  1. 分布式文件系统—FastDFS-6.0.6搭建使用
  2. Next.js性能优化之ISR渲染入门和原理探索
  3. C++ 在函数中定义函数
  4. 计算机毕业设计(论文+代码+数据库+查重)
  5. 图解脱机BT(transmission-daemon)教程
  6. 无线路由传输速率的秘密
  7. python inplace
  8. hbuilder 断点_Hbuilder配置php断点调试
  9. java 文件夹下的文件_java读取某个文件夹下的所有文件
  10. 小程序开发外包公司哪家好?