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轻松实现清新 Loading 效果的简单实例
Jun 06 HTML / CSS
CSS3过渡transition效果实例介绍
May 03 HTML / CSS
Html5之svg可缩放矢量图形_动力节点Java学院整理
Jul 17 HTML / CSS
HTML5 标准将把互联网视频扔回到黑暗时代
Feb 10 HTML / CSS
利用html5的websocket实现websocket聊天室
Dec 12 HTML / CSS
基于HTML5代码实现折叠菜单附源码下载
Nov 27 HTML / CSS
使用HTML5中的contentEditable来将多行文本自动增高
Mar 01 HTML / CSS
详解HTML5中rel属性的prefetch预加载功能使用
May 06 HTML / CSS
HTML5 Canvas 旋转风车绘制
Aug 18 HTML / CSS
AmazeUI 评论列表的实现示例
Aug 13 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
Oct 19 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
Jan 25 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
全文搜索和替换
2006/10/09 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
javascript 写类方式之十
2009/07/05 Javascript
Javascript学习笔记2 函数
2010/01/11 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
js 概率计算(简单版)
2017/09/12 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
Python struct模块解析
2014/06/12 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
旅游管理实习自我鉴定
2013/09/29 职场文书
白酒市场营销方案
2014/02/25 职场文书
美术毕业生求职信
2014/02/25 职场文书
2014小学教师个人工作总结
2014/11/10 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
民主评议党员个人总结
2015/02/13 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
深入理解go缓存库freecache的使用
2022/02/15 Golang