改变JavaScript中的样式而不影响在浏览器中呈现的内容

问题描述 投票:3回答:2

我提取了几个遍布页面的块,通过Canvas​Rendering​Context2D.draw​Image()将它们绘制到画布上,然后将画布导出为PDF / JPG。

现在,在绘制它们时,我还想整理它们的外观和/或删除/显示某些块的部分,因为从静态的角度来看样式不再有意义。

我可以在body上添加一个类,不同的样式块,而body具有该类,构建画布,将其导出为选择的内容类型并删除body类,但这会使页面看起来古怪1到2秒。 (我猜我可以用装载机覆盖页面)

我可以克隆块,以不同的方式设置样式或应用任何样式(内联或通过类)并从中绘制图像,但这不是最佳的。

有关如何正确做到这一点的任何想法?我倾向于选择仿真这样的东西。在本地@print下拥有整个“导出样式”,并在将块绘制到画布上之前模拟它,而不会影响在浏览器中呈现的内容,但我不确定这是否可行。

javascript css canvas html5-canvas html2canvas
2个回答
1
投票

我知道这些不能回答你的具体问题,但也许这些是问题的可行替代方案。

这听起来像是在尝试制作可打印的东西。我认为这是由某种用户交互触发的......

这意味着您有一些界面选项。例如,您可以通过在整个事物上放置一个模式来“隐藏”屏幕,并显示“处理片刻”的消息。然后身体(或另一个元素)类解决方案工作。

您可以按照建议复制元素。如果你走那条路,我会在你改变它们的同时将副本移出屏幕。

 .element {
   position: fixed;
   left: -100vw;
 }

在不知道需要多少重复项的情况下,很难推荐这个选项。

或者,你可以将努力卸载到service worker吗?这需要复制到内存中,但它与DOM完全分离并在不同的线程中运行。

这是一个非常有趣的问题!


1
投票

我认为你可以使用node.cloneNode(true)对所有这些块进行深度克隆,将它们放在一个隐藏在用户视图之外的类名范围的公共根中,然后你秘密地修改它们的样式。

由于您修改了节点的克隆版本,因此原始内容保持不变。另外,使用classname范围,您的css可以准确地定位这些克隆。

© www.soinside.com 2019 - 2024. All rights reserved.