`
doubleyoung
  • 浏览: 17154 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

Html5 canvas 应用于webkit浏览器实现电子签名

 
阅读更多

   前段时间做了一个html5的小应用,将电子签名整合到系统的审批中。 还好,发现html5实现起来很方便。

 

webkit浏览器,便可以使用canvas来完成画板签名。如下图


代码如下:

在网上收集了些资料,稍微整理修改了下,保证copy即可运行。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
#canvas{ border:1px solid #ccc;}
</style>
</head>

<body>
<div id="canvasDiv"></div>
<button id="btn_clear">Clear</button>
<button id="btn_submit">Submit</button>
<script language="javascript">
var canvasDiv = document.getElementById('canvasDiv');
var canvas = document.createElement('canvas');
var canvasWidth = 600, canvasHeight=400;
var point = {};
point.notFirst = false;

canvas.setAttribute('width', canvasWidth);
canvas.setAttribute('height', canvasHeight);
canvas.setAttribute('id', 'canvas');
canvasDiv.appendChild(canvas);

if(typeof G_vmlCanvasManager != 'undefined') {

	canvas = G_vmlCanvasManager.initElement(canvas);
}
var context = canvas.getContext("2d");


canvas.addEventListener("mousedown", function(e){
  var mouseX = e.pageX - this.offsetLeft;
  var mouseY = e.pageY - this.offsetTop;
  paint = true;
  addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop);
  redraw();
});

canvas.addEventListener("mousemove", function(e){
  if(paint){
    addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop, true);
    redraw();
  }
});

canvas.addEventListener("mouseup", function(e){
  paint = false;
});

canvas.addEventListener("mouseleave", function(e){
  paint = false;
});

var clickX = new Array();
var clickY = new Array();
var clickDrag = new Array();
var paint;

function addClick(x, y, dragging)
{
  clickX.push(x);
  clickY.push(y);
  clickDrag.push(dragging);
}

function redraw(){
  //canvas.width = canvas.width; // Clears the canvas
  
  context.strokeStyle = "#df4b26";
  context.lineJoin = "round";
  context.lineWidth = 5;
  
  while (clickX.length > 0 ) {
	  point.bx = point.x;
	  point.by = point.y;
	  point.x = clickX.pop();
	  point.y = clickY.pop();
	  point.drag = clickDrag.pop();
	  context.beginPath();
	  if (point.drag && point.notFirst) {
		  context.moveTo(point.bx, point.by);
	  } else {
		  point.notFirst = true;
		  context.moveTo(point.x - 1, point.y);
	  }
     context.lineTo(point.x, point.y);
     context.closePath();
     context.stroke();
  }
/*
  for(var i=0; i < clickX.length; i++)
  {		
    context.beginPath();
    if(clickDrag[i] && i){
      context.moveTo(clickX[i-1], clickY[i-1]);
     }else{
       context.moveTo(clickX[i]-1, clickY[i]);
     }
     context.lineTo(clickX[i], clickY[i]);
     context.closePath();
     context.stroke();
  }
  */
}
var clear = document.getElementById("btn_clear");
var submit = document.getElementById("btn_submit");
clear.addEventListener("click", function(){
	canvas.width = canvas.width;
});

submit.addEventListener("click", function(){
	alert(canvas.toDataURL("image/png"));
});
</script>
</body>
</html>

绘图就不说,关键点就是后面的canvas.toDataURL("image/png"),这个方法会返回当前图片被base64编码的字符串
只需在服务端拿到这个字符串解码便可以还原成图片。

既然是webkit浏览器支持canvas,那么用于手机上也没问题,稍微修改mouse事件为touch事件,亲测android2.3.3上的海豚和QQ浏览器都可以。。
但是有个问题,toDataURL目前在android上支持的不是很好,参考http://code.google.com/p/android/issues/detail?id=7901

据说在iphone中支持(未测试)。但是还是有牛肉写了方法自己编码图片,只是效率低了很多,但毕竟能返回数据了。参考附件canvas_pad.html

html5确实比较强大的。这只是一个很小很小的应用。还有很多小游戏,video等等都能用她实现。。


对于IE9以下的支持网上应该是有控件的,我没再研究了。

html5是一次web变革?


 

 

  • 大小: 16.9 KB
分享到:
评论

相关推荐

    HTML5 canvas实现电子签名

    这篇博客“HTML5 canvas实现电子签名”深入探讨了如何利用HTML5的Canvas API创建一个功能完善的电子签名组件。在这个过程中,我们将讨论以下几个关键知识点: 1. **Canvas API基础**: - `canvas`元素是HTML5中...

    H5手机签字 canvas_sign 手机电子签字 电子签名

    在现代信息化社会,电子签名已经成为了商业活动中不可或缺的一部分,特别是在远程协作和无纸化办公的背景下。本技术分享将深入探讨如何使用HTML5中的Canvas API实现手机电子签字功能,即canvas_sign,它允许用户在...

    html5 canvas实现手写签名

    使用html5 canvas标签实现手写 但是效果不是很好 没有笔锋 后续慢慢改进 感谢实现过程中帮助我的人

    Vue Canvas 实现电子签名

    Vue Canvas 实现电子签名 ,并返回 Base64 数据

    canvasSignature是基于canvas实现手写签名电子签名功能

    总的来说,canvasSignature组件利用了HTML5 canvas的强大绘图能力,结合jQuery的便利性,为Web应用提供了一种简单、直观的电子签名解决方案。通过理解和应用这个组件,你可以提升网站的用户体验,特别是在需要用户...

    canvas电子签名,支持保存签名图片

    本主题聚焦于使用canvas技术实现电子签名并将其保存为图片的功能。Canvas是HTML5提供的一种强大的图形绘制工具,它允许开发者通过JavaScript在网页上进行动态图形编程。以下是对这个知识点的详细阐述: 首先,我们...

    基于mui的和html5电子签名

    通过Canvas元素,HTML5允许开发者在网页上动态绘制图形,这就为实现电子签名提供了画布。用户可以通过触控设备或鼠标在Canvas上绘制签名,然后将绘制的结果保存为图像或数据流,以便于后续的验证和存储。 【Mui框架...

    uniapp的移动端h5的横屏电子签名

    自定义一个h5页面,实现可以横屏手写电子签名的功能,且支持回显(图片可以转化为签字版的canvas,且支持在此基础上继续进行手写签名)由于uniapp微信小程序支持横竖屏切换配置,但是移动端h5不支持。自定义一个h5...

    用于各个浏览器(IE)html2canvas不工作解决方案

    用于各个浏览器(IE)html2canvas不工作解决方案 html2canvas在火狐、Chrome等浏览器好用,但是IE浏览器无效,导入这个js后就OK啦

    HTML5 canvas电子签名画板代码.zip

    在这个“HTML5 canvas电子签名画板代码”中,开发者利用canvas构建了一个功能齐全的电子签名应用,包括开启画板、橡皮擦功能、笔设置调整以及保存和撤销操作。 首先,canvas通过JavaScript API来实现动态绘图。`...

    商品展示 360度全景图-HTML5 Canvas 实现

    本项目基于HTML5的Canvas技术,实现了商品的360度全方位展示,适用于Chrome、Firefox以及IE9及以上的浏览器。 HTML5是现代网页开发的标准,它引入了许多新的API和元素,Canvas就是其中之一。Canvas是一个二维绘图上...

    H5 电子签名[jSignature实现]

    H5(HTML5)作为现代网页开发的标准,提供了丰富的功能和API,使得在浏览器端实现电子签名成为可能。jSignature是一款轻量级的JavaScript库,专为H5环境设计,能够帮助开发者轻松地添加电子签名功能到网页应用中。 ...

    基于html2canvas将当前页面保存为图片Demo

    这个技术在Web开发中有着广泛的应用,尤其是在H5(HTML5)开发中,比如创建屏幕截图、生成电子签名、页面分享预览等场景。基于这个库,我们可以实现用户在网页上操作后,将整个页面保存为一张图片,为用户提供一种...

    html5电子签名

    HTML5电子签名是一种在网页上实现用户签署文档的技术,它利用HTML5的Canvas元素和JavaScript技术,为用户提供了一种在浏览器上绘制并保存签名的方法。Canvas是HTML5中用于图形绘制的重要部分,允许开发者通过...

    HTML5 CanvasAPI

    HTML5的Canvas被纳入规范,因为它为浏览器端提供了二维绘图的能力,而且性能优秀,实现起来相对简单。 尽管HTML5 Canvas在执行性能上有着明显的优势,但它也存在一些限制。例如,Canvas上的图形是位图,不可缩放,...

    canvas画板工具 uni-modules、画板、canvas、签名、电子签名、简约风、万能、免费、支持横竖屏

    canvas画板工具是一种基于HTML5 canvas元素开发的交互式绘图工具,广泛应用于网页和移动应用中,尤其在uni-app框架下。它提供了丰富的功能,包括绘制曲线、直线、圆形和方形,以及进行清空、撤消、橡皮擦擦除、调整...

    HTML5 canvas星星连线

    HTML5的canvas元素是网页动态图形绘制的重要工具,它允许开发者在浏览器中直接进行像素级的画图操作。在这个"HTML5 canvas星星连线"的项目中,利用canvas结合JavaScript技术,实现了用户通过鼠标移动时在屏幕上连接...

    HTML5电子签名板文字涂鸦代码.zip

    HTML5电子签名板是一种利用网页技术实现的交互式签名应用,它主要依赖于HTML5的Canvas元素进行图形绘制。Canvas是HTML5中的一个核心特性,允许动态生成图像,包括用户输入的文字和图形。在这个"HTML5电子签名板文字...

Global site tag (gtag.js) - Google Analytics