有一些关于缩放图像的帖子(例如HTML5 Canvas Image Scaling Issue); 但是,我需要了解如何在平滑的方式下快速缩放数百个简单的绘制元素(正方形、线条、弧等)。 我希望它看起来像动画,现在使用鼠标滚轮缩放(每次缩小 0.05)时转换不连贯。
优化 Canvas 中有一个有趣的见解,建议在非屏幕画布上预渲染,但这可能会在浏览器中引起内存问题(我们已经推到极限了)。
谢谢!
有一些关于缩放图像的帖子(例如HTML5 Canvas Image Scaling Issue); 但是,我需要了解如何在平滑的方式下快速缩放数百个简单的绘制元素(正方形、线条、弧等)。 我希望它看起来像动画,现在使用鼠标滚轮缩放(每次缩小 0.05)时转换不连贯。
优化 Canvas 中有一个有趣的见解,建议在非屏幕画布上预渲染,但这可能会在浏览器中引起内存问题(我们已经推到极限了)。
谢谢!
const imgCanvas = document.createElement('canvas');
const imgCtx = imgCanvas.getContext('2d');
// Draw the each elements to imgCtx
// ...
// Scale the canvas
ctx.scale(x, y);
// Draw the pre-drew image onto screen
ctx.drawImage(imgCanvas);
有几种技术可以提高性能,但最终它都取决于您在画布中放置的元素数量,因此在重构代码时,请考虑如何:
绘制更少的元素,例如在缩小图片中不需要绘制那些微小的标签
分组/聚类,这样您就可以绘制组中所有元素的表示形式,Google Maps做得非常好:https://cloud.google.com/blog/products/maps-platform/how-cluster-map-markers
使用JavaScript游戏引擎,性能是游戏引擎非常关注的问题,您可以利用其中之一:https://github.com/collections/javascript-game-engines
...请记住,在Web上提高性能并没有一种万无一失的解决方案;如果性能对您的应用程序至关重要,也许它不应该在浏览器上运行。