sunniejs/vue-canvas-poster

同页面多张海报时,widthPixels重新计算宽高bug

walkerliu01 opened this issue · 2 comments

你好,请使用下面的模板创建 issue 以帮助我们更快的排查问题,不规范的 issue 会被关闭,感谢配合。

Browser version [浏览器类型和版本]
chrome 最新版

vue-canvas-poster version [vue_canvas_poster 版本]
1.2.1

Vue version [Vue 版本]
2.6.1

reappear link [重现链接]

One-line summary [描述问题]
场景: 页面上同时需要生成三张海报, 海报背景宽高微 1080px 1920px , 但是由于某些场景问题 需要根据 组件的widthPixels属性去动态的调整海报生成的宽高,我看源码会在字符串原型链上的.toPx()方法 去计算缩放比例, 重设宽高 只有一张海报的时候后没问题, 但是三张海报的时候,由于 重置setStringPrototype(1) 是最开始的时候执行, 但是在异步任务里执行的, 会导致在promise.then中, 没有重置scale缩放比例, 这时候使用.toPx()方法会沿用上一次的缩放 导致 比如三张海报都需要计算scale, 实际结果是 第一张没问题, 第二张延用了上一个的宽度缩放,但是高度没缩放,同时重置了 setStringPrototype(1) 缩放比, 第三张又没问题, 依次类推 第偶数张的海报 宽度缩了, 但高度没缩

Other comments [其他信息]

解决方式:
在源码this.canvasWidthInPx = width.toPx() 之前加上 setStringPrototype(1);

Browser version [浏览器类型和版本]
chrome 最新版

vue-canvas-poster version [vue_canvas_poster 版本]
1.2.1

Vue version [Vue 版本]
2.6.1

reappear link [重现链接]

One-line summary [描述问题]
只有一张图片的时候,频繁生成图片的话,会有几率出现异常。
宽度是[widthPixels]的值,高度反而是[painting]的height