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 3D位移translate效果实例介绍
May 03 HTML / CSS
用CSS3将你的设计带入下个高度
Aug 08 HTML / CSS
10个很棒的 CSS3 开发工具 推荐
May 16 HTML / CSS
收集的22款给力的HTML5和CSS3帮助工具
Sep 14 HTML / CSS
CSS3下的渐变文字效果实现示例
Mar 02 HTML / CSS
CSS实现半透明边框与多重边框的场景分析
Nov 13 HTML / CSS
HTML5边玩边学(3)像素和颜色
Sep 21 HTML / CSS
html5使用canvas画一条线
Dec 15 HTML / CSS
使用HTML5在网页中嵌入音频和视频播放的基本方法
Feb 22 HTML / CSS
浅析图片上传及canvas压缩的流程
Jun 10 HTML / CSS
AmazeUI中模态框的实现
Aug 19 HTML / CSS
使用CSS实现音波加载效果
May 07 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
php生成年月日下载列表的方法
2015/04/24 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
js的闭包的一个示例说明
2008/11/18 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
js实现简单排列组合的方法
2016/01/27 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
python中lambda与def用法对比实例分析
2015/04/30 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
python实现点对点聊天程序
2018/07/28 Python
python中强大的format函数实例详解
2018/12/05 Python
python配置grpc环境
2019/01/01 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
简历中自我评价范文3则
2013/12/14 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
学校安全责任书
2014/04/14 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫