• html2canvs的一些问题


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

    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

  • 相关阅读:
    洋葱集团携手OceanBase实现分布式升级,全球数据首次实现跨云融合
    石子合并终极版 (GarsiaWachs算法) [o(n*n)] 板子
    pc网站和手机端h5网站开发接入微信支付
    在 Python 3.9 中删除前缀和后缀的新字符串方法
    CountDownLatch和CyclicBarrier
    ESP32-C3入门教程 蓝牙篇③——基于微信小程序和Esp Blufi实现 WiFi配网
    Java刷题面试系列习题(十一)
    一文拿下HTTP
    Java进阶——多线程相关,实际应用中的积累,持续更新
    Tomcat动静分离和负载均衡(多实例试验)
  • 原文地址:https://blog.csdn.net/qq_22560431/article/details/126605178