
jQuery手写签名插件jSignature移动端应用
最近实习项目移动端需要用到手写签名,而移动端又是使用5+App开发的,所以就使用了jQuery手写签名插件jSignature进行相关功能的实现,思路及部分代码如下:
首先下载并引入jSignature插件,下载地址
引入方式如下:
<script src="../../js/jSignature.min.js"></script>
在这里我们只需引入.min.js即可。
由于移动端dpi较高,jSignature插件会出现画布模糊的情况,这里需要用到hidpi-canvas-polyfill
贴上GitHub地址:https://github.com/jondavidjohn/hidpi-canvas-polyfill,引入方式同上。
首先在body标签下定义div用于放置画布
<button id="btn1" type="button">清空</button>
<button id="btn2" type="button">确定</button>
<div id="signatureparent">
<div id="signature"></div>
<canvas id="canvas"></canvas>
</div>
这里id为signature的div用于放置手写签名画布,canvas用于重新绘制生成图片。
(由于jSignature生成的为base64格式,如想保存为jpg或png需要在画布上重新绘制保存)
js部分:
$(document).ready(function() { //初始化
var arguments = {
signatureLine: false, //去除默认画布上那条横线
lineWidth: '3'
};
$("#signature").jSignature(arguments); //初始化画板,初始化之后就可以进行操作
});
//获取base64数据,生成图片
document.getElementById("btn2").onclick = function(){
//getData:获取数据
//reset:复位/重置
// 获取签名的base64数据对
var datapair = $("#signature").jSignature("getData","image");
console.log(datapair);
var img = new Image();
img.src = "data:" + datapair[0] + "," + datapair[1];
// 新建canvas画布将背景色改为白色
canvas = document.getElementById("canvas");
context = canvas.getContext("2d");
// 创建新图片
img.addEventListener("load", function() {
// 绘制图片到canvas上
canvas.width = img.width;
canvas.height = img.height;
// 在canvas绘制前填充白色背景
context.fillStyle = "#fff";
context.fillRect(0, 0, canvas.width, canvas.height);
context.drawImage(img, 0, 0);
// 获取base64并保存成图片
getBase64(canvas, function(dataUrl) {
var newImg = document.createElement("img");
newImg.src = dataUrl;
// 将图片保存至本地
saveImgFile(uuid(),newImg.src,50);
// 清空画布
canvas.width = canvas.width;
});
}, false);
};
//重置画板
document.getElementById("btn1").onclick = function(){
$("#signature").jSignature("reset");
};
//canvas画布获取base64数据
function getBase64(canvas, callback) {
var dataURL = canvas.toDataURL("image/png");
if(typeof callback !== undefined) {
callback(dataURL);
}
};
//将base64保存成图片
function saveImgFile(filename, base64, quality){
var bitmap = new plus.nativeObj.Bitmap("test");
// 从本地加载Bitmap图片
bitmap.loadBase64Data(base64, function(){
console.log('加载图片成功');
bitmap.save( "_doc/"+localStorage.getItem('loginName')+"/images/"+filename+".png",{overwrite:true,quality:quality},function(i){
console.log('保存图片成功:'+JSON.stringify(i));
var w = plus.nativeUI.showWaiting( "保存中..." );
w.onclose=function(){
clearInterval(t);
}
var n=2;
var t=setInterval(function(){
n--;
w.setTitle("保存成功");
if(n<=0){
w.close();
clearInterval(t);
mui.back();
}
},1000);
},function(e){
console.log('保存图片失败:'+JSON.stringify(e));
var w = plus.nativeUI.showWaiting( "保存中..." );
w.onclose=function(){
clearInterval(t);
}
var n=2;
var t=setInterval(function(){
n--;
w.setTitle("保存失败");
if(n<=0){
w.close();
clearInterval(t);
mui.back();
}
},1000);
});
},function(e){
console.log('加载图片失败:'+JSON.stringify(e));
});
}
实际效果:
最后附上一篇中文开发手册:
https://www.cnblogs.com/zx-admin/p/6828350.html
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果