前端js根据html代码使用canvas生成图片

这篇博客介绍了如何利用html2canvas库在JavaScript中实现网页内容的截图,并结合Vue.js实现保存按钮点击后自动下载图片的功能。通过设置放大倍数、处理滚动条和元素位置,解决了截图过程中的偏移和遮挡问题。
摘要由CSDN通过智能技术生成

图片示例:实现点击保存下载弹窗内容生成图片

 

 html2canvas:html2canvas - Screenshots with JavaScript下载地址html2canvas:html2canvas - Screenshots with JavaScript

 保存按钮事件: <i-button type="primary"  @click="savePic" style="width: 100px">保存</i-button>
savePic: function(){
                var _this = this;
                var width = $('.picStyleMain')[0].offsetWidth; //dom宽
                var height = $('.picStyleMain')[0].offsetHeight; //dom高
                var scale = 2;//放大倍数
                var canvas = document.createElement('canvas');
                canvas.width = width * 2;
                canvas.height = height * 2;
                canvas.style.width = width + 'px';
                canvas.style.height = height + 'px';
                var context = canvas.getContext('2d');
                context.scale(scale, scale);
                //设置context位置,值为相对于视窗的偏移量负值,让图片复位(解决偏移的重点)
                var rect = $('.picStyleMain').get(0).getBoundingClientRect();//获取元素相对于视察的偏移量
                context.translate(-rect.left, -rect.top);
                var opts = {
                    imageTimeout: 15000,
                    useCORS:true,  //防止图片跨域
                    x: 0,
                    y: 0,
                    scrollY: 0,
                    scrollX: 0,
                    logging: true,
                };
                var saveScroll = document.getElementsByClassName('ivu-modal-wrap')[3]
                saveScroll.scrollTop=0  //解决滚动条滑动时图片被遮挡问题
                html2canvas(document.querySelector(".picStyleMain"), opts).then((canvas) =>{
                    var imgSrc = canvas.toDataURL('image/png')
                    _this.canvasImg = imgSrc
                });
                let newName = this.applyNumber
                setTimeout(()=>{this.downloadImg(newName)},1000)
            },
            downloadImg(name) {
                let a = document.createElement('a') // 生成一个a元素
                a.style.display='none'
                let event = new MouseEvent('click') //创建一个单击事件
                a.download = name || 'photo' // 设置图片名称
                a.href= this.canvasImg
                a.dispatchEvent(event) //触发a的点击事件
            },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值