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开启硬件加速的使用和坑
Aug 21 HTML / CSS
不同浏览器对CSS3和HTML5的支持状况
Oct 31 HTML / CSS
css3的transition效果和transfor效果示例介绍
Oct 30 HTML / CSS
CSS+jQuery实现的在线答题功能
Apr 25 HTML / CSS
CSS实现雨滴动画效果的实例代码
Oct 08 HTML / CSS
详解利用canvas实现环形进度条的方法
Jun 12 HTML / CSS
HTML5 新旧语法标记对我们有什么好处
Dec 13 HTML / CSS
HTML5的hidden属性兼容老浏览器的方法
Apr 23 HTML / CSS
HTML5 在canvas中绘制矩形附效果图
Jun 23 HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
Mar 25 HTML / CSS
移动HTML5前端框架—MUI的使用
Dec 18 HTML / CSS
CSS 新特性 contain控制页面的重绘与重排问题
Apr 30 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连接access数据库
2015/03/27 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
addEventListener()与removeEventListener()解析
2017/04/20 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
Vue 动态设置路由参数的案例分析
2018/04/24 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
详解Vue中的watch和computed
2020/11/09 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
python全栈知识点总结
2019/07/01 Python
简单了解Django ContentType内置组件
2019/07/23 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
keras 多gpu并行运行案例
2020/06/10 Python
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
自考生自我鉴定范文
2013/10/01 职场文书
写自荐信有哪些不宜?
2013/10/17 职场文书
2015元旦节寄语
2014/12/08 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
总结Python使用过程中的bug
2021/06/18 Python
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript