js实现复制图片到剪切板&下载图片

完整需求是这样的:生成一个二维码,然后提供复制和下载按钮。如果你是页面上已有一个图片,可以直接跳过前面的部分。

经后来测试,发现这种方法并不通用,我在qq和微信中不能粘贴,但是在钉钉中可以粘贴。具体原因没找到,所以最后放弃了复制图片?。

生成二维码,可以用qrcode
http://cdn.staticfile.org/jquery.qrcode/1.0/jquery.qrcode.min.js
github地址:https://github.com/davidshimjs/qrcodejs

$('#code').qrcode({
    render: 'canvas',   //可选canvas或table
    width: 100,
    height: 100,
    text: url   //需要生成二维码的内容
});

要实现复制和下载功能,首先我们需要把图片从canvs转为img。

var drawing = $('#code canvas')[0];
//确定浏览器支持<canvas>元素
if (drawing.getContext) {
    var context = drawing.getContext('2d');
    //取得图像的数据 URI
    var imgURI = drawing.toDataURL("image/png");
    //显示图像
    var image = document.createElement("img");
    image.src = imgURI;
    $('#code').html(image);
}

复制图片

// 选中区域
function getSelect (targetNode) {
    if (window.getSelection) {
        //chrome等主流浏览器
        var selection = window.getSelection();
        var range = document.createRange();
        range.selectNode(targetNode);
        selection.removeAllRanges();
        selection.addRange(range);
      } else if (document.body.createTextRange) {
        //ie
        var range = document.body.createTextRange();
        range.moveToElementText(targetNode);
        range.select();
      }
}
// 绑定点击事件
$('#copyBtn').off('click').click(e => {
  // 尝试过复制canvas和table,但不能达到预期效果。所以这里还是转为img再下载
  getSelect($('#code img')[0]);
  document.execCommand('copy');
  // copy之后清空选择区域
  window.getSelection().removeAllRanges();
})

下载图片

$('#downloadBtn').off('click').click(e => {
  var imgSrc = $('#code img').attr("src");
  if (!!window.ActiveXObject || "ActiveXObject" in window) {
     // 不支持download时,可提示用户右键下载
  } else {
     var alink = document.createElement("a");
     alink.href = imgSrc;
     alink.download = "图片.png";
     alink.click();
  }
})
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值