作者:微信小助手
发布时间:2020-07-21T21:04:38
内容格式无法自定义。
翻页情况无法处理。
视窗区域不可控。
图片跨域不支持。生成的图片存在跨域限制问题。
绘制清晰度低。即使使用api scale
放大后绘制,又会由于生成base64格式图片内容过长导致无法传输。
圆弧计算精度低。由于html2canvas是计算像素后绘制到canvas上,而canvas展示又会经过浏览器绘制,导致像素精度降低。
深度节点出现黑色情况。由于DOM结构过深,经过像素计算后,会偶尔出现像素丢失情况。
svg
和
xhtml
分别表示解析方式。利用不同的解析方式,实现了svg内部嵌入html的方式。
encodeURIComponent(svg)
将对应的svg转换成base64就可以。优势是容易上手且不依赖第三方库。
SVG无法连接到外部的资源。比如通过cdn引入的css以及html中的图片连接都会被限制。
不支持js执行。现如今SPA页面都需要执行JS后才会渲染对应的DOM节点,而SVG却不支持JS的执行。
SVG位置和大小不确定。遇到需要及时展示的情况,需要实时计算位置才行。
newImage()
的方式生成图片,在
image.onload
阶段使用canvas绘制图片。此时会产生跨域限制,需要通过
crossOrigin='Anonymous'
设置来解决这个问题。
drawImage
中的参数控制图片坐标和canvas中的绘制坐标。
drawImage
中包含几个参数:控制图片的sx, sy, sWidth, sHeight和控制canvas绘制的x, y, width, height。参数具体含义如图中所示。
圆角矩形:通过截断的方式绘制特定背景的圆角矩形。原理是通过 createPattern
的方式在canvas上获取图片内容,再利用Path的方式,绘制对应的路线,利用 canvas.arc
绘制圆弧部分,利用 canvas.lineTo
绘制直线部分,截取想要的内容,实现圆角矩形。
图片内容获取。 context.createPattern(imgUrl,"no-repeat")
圆角矩形区域绘制
绘制内容
文本自动换行:思路是通过 measureText
获得当前文本宽度,每次添加一个字,比对此时文本宽度和行宽,超过时候绘制当前行,进行换行,y增加行高,重复这个过程。
实现了一套移动端截屏方法。解决了现有第三方库html2canvas绘制清晰度低,圆弧计算精度低,深层DOM解析出错的问题。
采用原子化实现方法。支持截屏自定义绘制,而不是如html2canvas和svg只能通过复数次绘制不同DOM节点,来拼凑目标的方式。