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 相关文章推荐
Web前端绘制0.5像素的几种方法
Aug 11 HTML / CSS
css3闪亮进度条效果实现思路及代码
Apr 17 HTML / CSS
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
May 07 HTML / CSS
CSS3 @font-face属性使用指南
Dec 12 HTML / CSS
结合CSS3的布局新特征谈谈常见布局方法
Jan 22 HTML / CSS
解决img标签上下出现间隙的方法
Dec 14 HTML / CSS
HTML5新增的Css选择器、伪类介绍
Aug 07 HTML / CSS
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
Sep 15 HTML / CSS
HTML最新标准HTML5总结(必看)
Jun 13 HTML / CSS
HTML5 canvas基本绘图之图形变换
Jun 27 HTML / CSS
amazeui时间组件的实现示例
Aug 18 HTML / CSS
CSS实现切角+边框+投影+内容背景色渐变效果
Nov 01 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
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
PHP脚本自动识别验证码查询汽车违章
2016/12/20 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
JQuery样式操作、click事件以及索引值-选项卡应用示例
2019/05/14 jQuery
解决layui弹框失效的问题
2019/09/09 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
python模块之re正则表达式详解
2017/02/03 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
医院实习介绍信
2014/01/12 职场文书
会计专业导师推荐信
2014/03/08 职场文书
优秀班组长事迹
2014/05/31 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB
springboot用户数据修改的详细实现
2022/04/06 Java/Android