当前位置: 首页 > news >正文

vue移动端实现下载(截图)功能

前言

通过html2canvas实现截图功能然后保存

简介

html2canvas库允许我们直接在浏览器上拍摄网页或部分网页的“截图”,即浏览器实现截图的功能。

原理

屏幕截图是基于DO的。其基本原理就是读取已经渲染好的DOM元素的结构和样式信息,然后基于这些信息去构建截图,呈现在canvas画布中

操作步骤


安装:npm install html2canvas
引入:import html2canvas from 'html2canvas';
用法:可以只传一个参数,就是你要截图的DOM元素,该函数返回一个Promise对象,在它的then方法中可以获取到绘制好的canvas对象,通过调用canvas对象的toDataURL方法就可以将其转换成图片。html2canvas(document.body).then(function(canvas) {document.body.appendChild(canvas);
});

实际应用


//需要截图区域<div class="box" ref="imgBox">截图的区域</div><el-button @click="downLoad" type="primary">下载</el-button>

 

//保存图片的方法
//即使页面有滚动条也可进行相应配置,实现完整截图。
//有两种方式来实现保存图片:
//1.将URL放到a标签的href属性中,点击超链接来实现图片下载。downLoad() {html2canvas(this.$refs.imgBox, {height: this.$refs.imgBox.scrollHeight,	width: this.$refs.imgBox.scrollWidth,}).then((canvas) => {const link = document.createElement("a"); // 创建一个超链接对象实例link.download = "Button.png"; // 设置要下载的图片的名称link.href = canvas.toDataURL(); // 将图片的URL设置到超链接的href中link.click(); // 触发超链接的点击事件});},//2.打开一个新的窗口,实现图片保存。downLoad() {html2canvas(this.$refs.imgBox, {height: this.$refs.imgBox.scrollHeight,	width: this.$refs.imgBox.scrollWidth,}).then((canvas) => {let dataURL = canvas.toDataURL("image/png");var blob = this.changeToBlob(dataURL);//获取blob对象var url = URL.createObjectURL(blob);window.open(url);//创建一个新的浏览器窗口对象, 参数指定了该窗口将会打开的地址});},//Base64 to BlobchangeToBlob(dataURL) {var arr = dataURL.split(","),type = arr[0].match(/:(.*?);/)[1],//获取MIME 类型,即image/pngbstr = atob(arr[1]),count = bstr.length,u8arr = new Uint8Array(count);while (count--) {u8arr[count] = bstr.charCodeAt(count);}return new Blob([u8arr], {type: type,});},

结语:

如果你在导出的时候对图表处于未展开状态可以加延时器,如

   download() {this.showAllDataes();//数据展开函数setTimeout(() => {html2canvas(this.$refs.imgBox, {height: this.$refs.imgBox.scrollHeight,width: this.$refs.imgBox.scrollWidth,}).then((canvas) => {const link = document.createElement("a"); // 创建一个超链接对象实例const title = `全市场路演会议${this.filters.date}排行榜`;link.download = title; // 设置要下载的图片的名称link.href = canvas.toDataURL(); // 将图片的URL设置到超链接的href中link.click(); // 触发超链接的点击事件});}, 1000);},

 

http://www.lryc.cn/news/498861.html

相关文章:

  • 【Golang】Golang基础语法之面向对象:结构体和方法
  • 【西门子PLC.博途】——在S71200里写时间设置和读取功能块
  • 位运算(一)位运算简单总结
  • 工厂方法模式的理解和实践
  • C# 设计模式--观察者模式 (Observer Pattern)
  • 【开发语言】层次状态机(HSM)介绍
  • 03-13、SpringCloud Alibaba第十三章,升级篇,服务降级、熔断和限流Sentinel
  • 【k8s 深入学习之 event 聚合】event count累记聚合(采用 Patch),Message 聚合形成聚合 event(采用Create)
  • leetcode104.二叉树的最大深度
  • 蓝桥杯2117砍竹子(简单易懂 包看包会版)
  • LCD与lvgl
  • SpringBoot 赋能:精铸超稳会员制医疗预约系统,夯实就医数据根基
  • android studio 读写文件操作(应用场景二)
  • 小尺寸低功耗蓝牙模块在光伏清扫机器人上的应用
  • 防火墙有什么作用
  • MongoDB-BSON 协议与类型
  • 学习threejs,使用VideoTexture实现视频Video更新纹理
  • 怎么获取键值对的键的数值?
  • 数据结构排序算法详解
  • 在Linux设置postgresql开机自启动,创建一个文件 postgresql-15.service
  • 【kafka】消息队列的认识,Kafka与RabbitMQ的简单对比
  • ProjectSend 身份认证绕过漏洞复现(CVE-2024-11680)
  • Android笔记(三十四):onCreate执行Handler.post在onResume后才能执行?
  • 关闭模组的IP过滤功能
  • 算法分析与设计复习笔记
  • vue-amap 高德地图
  • Numpy基础练习
  • 一番赏小程序定制开发,打造全新抽赏体验平台
  • 【前端】将vue的方法挂载到window上供全局使用,也方便跟原生js做交互
  • Oracle查询优化:高效实现仅查询前10条记录的方法与实践