html5 利用canvas手写签名并保存的实现方法


Posted in HTML / CSS onJuly 12, 2018

最近公司在做一个签名的功能,主要用到了canvas画线的功能结合移动端touch事件

js部分是这样的:

window.onload = function() {
    new lineCanvas({
        el: document.getElementById("canvas"),//绘制canvas的父级div
        clearEl: document.getElementById("clearCanvas"),//清除按钮
        saveEl: document.getElementById("saveCanvas"),//保存按钮
        //      linewidth:1,//线条粗细,选填
        //      color:"black",//线条颜色,选填
        //      background:"#ffffff"//线条背景,选填
    });
};
function lineCanvas(obj) {
    this.linewidth = 1;
    this.color = "#000000";
    this.background = "#ffffff";
    for (var i in obj) {
        this[i] = obj[i];
    };
    this.canvas = document.createElement("canvas");
    this.el.appendChild(this.canvas);
    this.cxt = this.canvas.getContext("2d");
    this.canvas.width = this.el.clientWidth;
    this.canvas.height = this.el.clientHeight;
    this.cxt.fillStyle = this.background;
    this.cxt.fillRect(0, 0, this.canvas.width, this.canvas.width);
    this.cxt.strokeStyle = this.color;
    this.cxt.lineWidth = this.linewidth;
    this.cxt.lineCap = "round";
    //开始绘制
    this.canvas.addEventListener("touchstart", function(e) {
        this.cxt.beginPath();
        this.cxt.moveTo(e.changedTouches[0].pageX, e.changedTouches[0].pageY);
    }.bind(this), false);
    //绘制中
    this.canvas.addEventListener("touchmove", function(e) {
        this.cxt.lineTo(e.changedTouches[0].pageX, e.changedTouches[0].pageY);
        this.cxt.stroke();
    }.bind(this), false);
    //结束绘制
    this.canvas.addEventListener("touchend", function() {
        this.cxt.closePath();
    }.bind(this), false);
    //清除画布
    this.clearEl.addEventListener("click", function() {
        this.cxt.clearRect(0, 0, this.canvas.width, this.canvas.height);
    }.bind(this), false);
    //保存图片,直接转base64
    this.saveEl.addEventListener("click", function() {
        var imgBase64 = this.canvas.toDataURL();
        console.log(imgBase64);
    }.bind(this), false);
};

这是效果图:

html5 利用canvas手写签名并保存的实现方法

附上html和css

<div id="canvas">
    <p id="clearCanvas">清除</p>
    <p id="saveCanvas">保存</p>
</div>

html,body{
    width: 100%;
    height: 100%;
}
#canvas{
    width: 100%;
    height: 100%;
    position: relative;
}
#canvas canvas{
    display: block;
}
#clearCanvas{
    width: 50%;
    height: 40px;
    line-height: 40px;
    text-align: center;
    position: absolute;
    bottom: 0;
    left: 0;
    border: 1px solid #DEDEDE;
    z-index: 1;
}
#saveCanvas{
    width: 50%;
    height: 40px;
    line-height: 40px;
    text-align: center;
    position: absolute;
    bottom: 0;
    right: 0;
    border: 1px solid #DEDEDE;
    z-index: 1;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
css3 background属性调整增强介绍
Dec 18 HTML / CSS
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
Feb 27 HTML / CSS
使用CSS3的ruby-position固定注音位置的用法示例
Jul 05 HTML / CSS
CSS3毛玻璃效果(blur)有白边问题的解决方法
Nov 15 HTML / CSS
纯CSS3制作页面切换效果的实例代码
May 30 HTML / CSS
使用CSS3制作版头动画效果
Dec 24 HTML / CSS
全面解析HTML5中的标准属性与自定义属性
Feb 18 HTML / CSS
HTML5+css3:3D旋转木马效果相册
Jan 03 HTML / CSS
HTML5拖放API实现拖放排序的实例代码
May 11 HTML / CSS
Html5页面内使用JSON动画的实现
Jan 29 HTML / CSS
Html5自定义字体解决方法
Oct 09 HTML / CSS
六个好看实用的 HTML + CSS 后台登录入口页面
Apr 28 HTML / CSS
详解Html5微信支付爬坑之路
Jul 24 #HTML / CSS
基于Html5实现的react拖拽排序组件示例
Aug 13 #HTML / CSS
基于HTML5的WebSocket的实例代码
Aug 15 #HTML / CSS
HTML5中canvas中的beginPath()和closePath()的重要性
Aug 24 #HTML / CSS
Html5移动端弹幕动画实现示例代码
Aug 27 #HTML / CSS
Html5页面在微信端的分享的实现方法
Aug 30 #HTML / CSS
canvas粒子动画背景的实现示例
Sep 03 #HTML / CSS
You might like
使用eAccelerator加密PHP程序
2008/10/03 PHP
解析PHP汉字转换拼音的类
2013/06/18 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
用JAVASCRIPT如何给&amp;lt;textarea&amp;gt;&amp;lt;/textarea&amp;gt;赋值
2007/04/20 Javascript
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
JavaScript中常用的验证reg
2016/10/13 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
2016/12/19 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
vue cli4下环境变量和模式示例详解
2020/04/09 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python删除空文件和空文件夹的方法
2015/07/14 Python
深入浅析Python字符编码
2015/11/12 Python
Python矩阵常见运算操作实例总结
2017/09/29 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
Python global全局变量函数详解
2018/09/18 Python
Python可以用来做什么
2020/11/23 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
中学劳技课教师的自我评价
2014/02/05 职场文书
房地产公司财务总监岗位职责
2015/04/03 职场文书
律师函格式范本
2015/05/27 职场文书
python实现简单的井字棋
2021/05/26 Python