canvas 长按图片保存
通过定时器实现长按 1200 毫秒,然后执行保存二维码
var mm;
//长按分享
$('.qr_code').on('touchstart', function () {
console.log('----------------')
mm = setTimeout(function () {
// shareToPage();
var canvas = document.querySelector('.qr_code canvas');
saveCanvas(canvas, '医生二维码');
}, 1200);
});
$('.qr_code').on('touchend', function () {
clearTimeout(mm);
});
function getBlob(base64) {
var mimeString = base64.split(',')[0].split(':')[1].split(';')[0]; // mime类型
var byteString = atob(base64.split(',')[1]); //base64 解码
var arrayBuffer = new ArrayBuffer(byteString.length); //创建缓冲数组
var intArray = new Uint8Array(arrayBuffer); //创建视图
for (var i = 0; i < byteString.length; i += 1) {
intArray[i] = byteString.charCodeAt(i);
}
return new Blob([intArray], {
type: mimeString
});
}
function saveCanvas(canvas, fileName) {
// let canvas = code._el.querySelector("canvas");//获取生成二维码中的canvas,并将canvas转换成base64
var base64Text = canvas.toDataURL("image/png");
var blob = getBlob(base64Text); //将base64转换成blob对象
var link = document.createElement('a');
var href = window.URL.createObjectURL(blob);
link.href = href;
link.download = fileName; //a标签的下载属性
document.body.appendChild(link); // firefox需要把a添加到dom才能正确执行click
link.click();
// 延时保证下载成功执行,否则可能下载未找到文件的问题
setTimeout(function () {
JSBridge.showToast('二维码保存成功')
window.URL.revokeObjectURL(href); // 释放Url对象
document.body.removeChild(link);
}, 100);
}