vue使用html2canvas优化---节点过滤

这篇具有很好参考价值的文章主要介绍了vue使用html2canvas优化---节点过滤。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当你使用html2canvas对某个节点进行截图时,项目小dom节点少那还没什么性能问题,如果是个大项目,有成百上千个dom节点,那将是非常头疼的事情(产品经理:小张啊,你这个截图功能为什么需要这个长的时间,这让客户怎么用,重新改。小张:********...)。不多bb了,直接开始

 

html2canvas的配置项提供了一个回调函数 ignoreElements, 他的作用就是过滤节点的, html2canvas 他会对你的dom树进行循环,每次循环都会调用一次 ignoreElements,ignoreElements接收一个参数就是当前循环到的dom , 当你返回true就不会循环这个节点的子节点了,意思就是过滤了当前节点,反之则保留当前节点继续向下循环。

vue使用html2canvas优化---节点过滤

 

代码:

 1 function getImages(element){
 2     const canvas = await html2canvas(element, { 
 3         allowTaint: false,
 4         // 因为`allowTaint`表示是否允许被污染,而被污染的canvas是没法使用`toDataURL()`转`base64`流的,但是我们这需要`base64`,所有`allowTaint`需要被设置为`false`
 5         useCORS: true, // 允许跨域
 6         tainttest: true, // 检测每张图片都已经加载完成
 7         logging: true,
 8         ignoreElements:(e)=>{
 9             if(e.contains(element) || element.contains(e) || e.getAttribute('data-html2canvas') != null){
10                 return false
11             }
12             return true
13         },
14         backgroundColor: `rgb(255,255,255)`, // 转换图片可能会有白色底色,你可根据你的页面或者PM要求设置一下背景色,不要的话就null
15     })
16 
17     let imgUrl = canvas.toDataURL("image/jpeg");
18     if(imgUrl == 'data:,') return ''
19     console.log(imgUrl);
20     return imgUrl
21 }
element 指的是截取的目标节点

 重点在第9行,
e.contains(element) || element.contains(e)  的意思是当前循环的节点是目标节点的父级或子急级,直接一步到位, 速度直接提升80%,可以直接拿去甩到产品经理的脸上,他还会夸你nb。嗯,爽不爽!!!

e.getAttribute('data-html2canvas') != null 这个就是在节点上加了一个 data-html2canvas 属性,若第3行和第7行
 1 <!DOCTYPE html>
 2 <html lang="zh">
 3   <head data-html2canvas>
 4     <meta charset="utf-8">
 5     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 6     <meta name="viewport" content="width=device-width,initial-
 7     <link data-html2canvas rel="stylesheet" href="css.css" >
 8   </head>
 9   <body>
10     <noscript>
11       <strong>We're sorry but api-gateway-admin-front doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
12     </noscript>
13     <div id="app"></div>
14   </body>
15 </html>
过滤的时这个css也会保留



 文章来源地址https://www.toymoban.com/news/detail-524944.html

到了这里,关于vue使用html2canvas优化---节点过滤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • angular:html2canvas对ion-avatar节点渲染不正确

    问题:         如题 解决办法:         简单实现头像遮罩         从实际效果来看,ion-avatar做了一些优化,在缩小图片时,细节显示的更楚,而普通的img是稍模糊些的。         具体原因得看源码,暂时定位到object-fit无法在canvas2html中体现

    2024年02月09日
    浏览(36)
  • vue2 -- 截图工具html2canvas

    可以将网页中的指定元素或整个页面截取为图片,以便保存或分享。 在 Vue 中使用 html2canvas 实现 1:安装 html2canvas 库。你可以使用 npm 安装,命令如下: 2:在需要使用 html2canvas 的 Vue 组件中,引入 html2canvas 库: :3:编写截图逻辑。你可以在组件的方法中编写,例如:

    2024年01月19日
    浏览(51)
  • html2canvas使用文档

    Install NPM Install Yarn 以 vue 举例,这样写起来比较方便 如果想要将图片导出,可以这样写 名称 默认值 描述 allowTaint false 是否允许跨源图像污染画布 backgroundColor #ffffff 画布背景色(如果在DOM中未指定),为透明设置null canvas null 用作绘图基础的现有画布元素 foreignObjectRendering

    2024年03月28日
    浏览(56)
  • vue-element使用html2canvas实现网页指定区域(指定dom元素)截图

    直接上代码: ** 如果要截取的dom元素、区域涉及到v-if或者v-show的条件表达式时,截取的方法请在nextTick里面调用----例如: this.$nextTick(() = { this.saveImageNew() }) 否之获取dom元素的时候会获取不到!!!!!!!!

    2024年02月04日
    浏览(65)
  • html2canvas使用指南

      最近项目中需要使用到将网页中的内容下载成图片,通过按钮点击将页面保存下来,方便同事使用进行工作汇报。如图: 然后我想到了 html2canvas ,就可以解决我现在遇到的问题了。我火速从官网下载了js文件,这里附上链接:   http://html2canvas.hertzen.com/  这里   html2canvas

    2024年02月14日
    浏览(58)
  • vue中使用html2canvas报错 Unable to find element in cloned iframe

    安装 npm install --save html2canvas 使用 home.vue !!报错 Uncaught (in promise) Unable to find element in cloned iframe 原因:使用了 elementUI中的el-popover组件,挂载到body里的 解决:

    2024年01月19日
    浏览(79)
  • 解决使用 html2canvas 截图不全问题

    1、截图不全 之前没用过这个,网上找了代码之后发现有滚动条的情况下会截图不全,仅能展示出当前页面展示出来的内容,类似于这种情况,这是带滚动条的html,第一张和第二张分别为滚动条在顶部以及在底部的展现 下载成pdf之后分别为这样,只有窗口展示的部分,滚动条

    2024年02月11日
    浏览(51)
  • vue使用html2canvas实现一键截图并赋值到剪贴板,只截取当前显示器上可视的内容

    使用 html2canvas 和 clipboard API 实现整页截图并填充至剪切板。 访问剪切板的api只支持在https或者本地localhost上使用,如果是http,则无法使用 首先需要从npm安装html2canvas 然后在代码中导入这个包: 之后绑定一个按钮来实现该功能,比如点击一个按钮,然后就开始截图当前页面并

    2024年02月15日
    浏览(58)
  • vue2如何将页面生成 pdf 导出 html2Canvas + jspdf

    npm i html2canvas npm i jspdf import html2canvas from \\\'html2canvas\\\'; import jsPDF from \\\'jspdf\\\' export const htmlToPDF = async (htmlId, title = \\\"报表\\\", bgColor = \\\"#fff\\\") = {   let pdfDom = document.getElementById(htmlId)   pdfDom.style.padding = \\\'0 10px !important\\\'   const A4Width = 595.28;   const A4Height = 841.89;   let canvas = await html2canvas(pd

    2024年02月16日
    浏览(58)
  • 【vue-qrcode + html2canvas】前端二维码生成与下载

    其实一开始搜的时候,很多还都是推荐的 vue-qrcode ,于是就先用这个,但是发现想要在二维码中间放一个自定义的image的时候,这个库有点麻烦,需要自己将 image 图片盖在二维码上面(官方教程也是如此)。好吧,一开始我也这么干了,但是盖完之后,我需要下载这个有居中

    2024年04月17日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包