如果您想展示一个真正大小为9000x500左右的东西(例如游戏关卡)在一个500x500的画布上,这是没问题的。
您需要将画布视为更大场景的“视口”。将画布(或其他所有物体)移动到适当的位置,并在该位置绘制所有相关物品即可。
以下是一个示例:
单击画布并按住左箭头键,可以看到场景滚过,而红色玩家点保持“静止”。
当您滚动100x100的画布时,您会看到被绘制在窗口外的物体,例如(330,50)。通过翻译画布,它们就出现在视野中了。
我认为值得提的是,在画布中进行优化非常重要。上面给出的示例是制作视口的一种非常简单的方法,但随着代码的发展,您会越来越想知道自己正在绘制什么以及绘制了多少。例如,您将要避免绘制完全在屏幕之外的对象,如果您的游戏或应用程序有一个大小为9000x500的背景,则可能不希望每次都绘制整个背景!
所以这里的重点是概念,但您需要认真考虑如何实现它以及让画布执行多少工作。如果您在侧向滚动应用程序中遇到性能问题,请务必告知我们 :)
我一直觉得,将你的画布包裹在一个宽度和高度与你的视口相同且溢出设置为隐藏的 div 中更有效,然后绘制整个画布并滚动 div 到你想查看的位置。
因此,HTML 代码应该如下:
<div id='wrapper' style='width: 200px; height: 200px; overflow: hidden;'>
<canvas width='1000' height='1000'></canvas>
</div>
而JavaScript代码可能如下:
function scrollWrapper(x, y){
var wrapper = document.getElementById('wrapper');
wrapper.scrollTop = x;
wrapper.scrollLeft = y;
}
然后只需使用您想要查看的x和y调用该函数。如果您想移动而不仅仅是跳转,可以将其包装在setTimeout或其他一些内容中。