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

html2canvs的一些问题

let html2canvas = null;

export default {
  beforeMount() {
    import('html2canvas').then((plugin) => {
      html2canvas = plugin.default;
    });
  },
  methods: {
    // 获取分享图片 base64
    getShareImgBase64() {
      return new Promise((resolve) => {
        setTimeout(() => {
          // #capture 就是我们要获取截图对应的 DOM 元素选择器
          html2canvas(document.querySelector('#capture'), {
            useCORS: true, // 【重要】开启跨域配置
            scale: window.devicePixelRatio < 3 ? window.devicePixelRatio : 2,
            allowTaint: true, // 允许跨域图片
          }).then((canvas) => {
            const imgData = canvas.toDataURL('image/jpeg', 1.0);
            resolve(imgData);
          });
        }, 300); // 这里加上 300ms 的延迟是为了让 DOM 元素完全渲染完成后再进行图片的生成
      });
    },
  },
};
  1. html2canvas(element: HTMLElement, options: object): Promise<HTMLCanvasElement>

options对象可选的值如下:

NameDefaultDescription
allowTaintfalse是否允许跨域图像污染画布
backgroundColor#ffffff画布背景颜色,如果在DOM中没有指定,设置“null”(透明)
canvasnull使用现有的“画布”元素,用来作为绘图的基础
foreignObjectRenderingfalse是否使用ForeignObject渲染(如果浏览器支持的话)
imageTimeout15000加载图像的超时时间(毫秒),设置为“0”以禁用超时
ignoreElements(element) => false从呈现中移除匹配元素
loggingtrue为调试目的启用日志记录
onclonenull回调函数,当文档被克隆以呈现时调用,可以用来修改将要呈现的内容,而不影响原始源文档。
proxynull用来加载跨域图片的代理URL,如果设置为空(默认),跨域图片将不会被加载
removeContainertrue是否清除html2canvas临时创建的克隆DOM元素
scalewindow.devicePixelRatio用于渲染的缩放比例,默认为浏览器设备像素比
useCORSfalse是否尝试使用CORS从服务器加载图像
widthElement widthcanvas的宽度
heightElement heightcanvas的高度
xElement x-offsetcanvas的x轴位置
yElement y-offsetcanvas的y轴位置
scrollXElement scrollX渲染元素时使用的x轴位置(例如,如果元素使用position: fixed)
scrollYElement scrollY渲染元素时使用的y轴位置(例如,如果元素使用position: fixed)
windowWidthWindow.innerWidth渲染元素时使用的窗口宽度,这可能会影响诸如媒体查询之类的事情
windowHeightWindow.innerHeight渲染元素时使用的窗口高度,这可能会影响诸如媒体查询之类的事情

忽略元素

options有一个ignoreElements参数可以用来忽略某些元素,从渲染过程中移除,除了设置该参数外,还有一种忽略元素的方法,就是在需要忽略的元素上增加data-html2canvas-ignore属性。

跨域的问题

对于允许跨域的图片我们可以在 Headers 里面看到

Access-Control-Allow-Origin:*

对于这个问题,最简单的解决方案就是直接在所在图片的 img 标签里面加上 crossOrigin = "anonymous",即:

<img crossorigin="anonymous" src="xxx" >

在某些情况下如果你发现加上 crossOrigin = "anonymous" 之后,图片显示不出来了,此时给图片的 url 中拼上一个随机字符串即可。

<img crossorigin="anonymous" :src="`xxx?_=${Date.now()}`" >

当然,想要永久的解决这个问题需要后端同学配合在图片服务器上设置 图片服务器配置 Access-Control-Allow-Origin: *

html2canvs官方文档

Options | html2canvas

相关文章:

  • 金仓数据库 KingbaseES 插件参考手册 S(3)
  • Flutter聊天布局之图片视频上传、显示、保存到相册
  • Deep Laplacian Pyramid Networks for Fast and Accurate Super-Resolution
  • 基于SSM框架实现学生管理系统
  • JavaScript聊天框插入表情: 点击表情时输入框失焦, 无法插入到输入框.
  • 使用esxcli命令升级VMware ESXi补丁
  • java调用python文件的几种方式【超细讲解!】
  • c++ 关于bfs和dfs的相对统一写法
  • 2023年湖北三类人员安全员A证报考条件需要什么资料?
  • Maven进阶-多环境开发与跳过测试
  • Activiti7工作流引擎
  • 物联网边缘-物联网准入或接入安全防护产品及解决方案
  • Java-序列化和反序列化
  • 怎么批量转换图片格式?这些方法帮助你一键转换
  • ADB基本用法
  • 【前端学习】-粗谈选择器
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • angular2开源库收集
  • const let
  • JavaScript服务器推送技术之 WebSocket
  • mysql_config not found
  • Octave 入门
  • Selenium实战教程系列(二)---元素定位
  • vue数据传递--我有特殊的实现技巧
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前端相关框架总和
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 日剧·日综资源集合(建议收藏)
  • 设计模式(12)迭代器模式(讲解+应用)
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 数据库巡检项
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #android不同版本废弃api,新api。
  • #define用法
  • $.ajax()
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (四)JPA - JQPL 实现增删改查
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ./和../以及/和~之间的区别
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net连接oracle数据库
  • .net网站发布-允许更新此预编译站点
  • .project文件
  • /bin/rm: 参数列表过长"的解决办法
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • [ C++ ] STL_vector -- 迭代器失效问题