如何拥有一个无限大的画布?

时间:2011-08-28 02:18:28

标签: javascript html5

我正在构建一个使用画布绘制的Web应用程序。我希望有一个无限大的绘图空间(您可以在任何方向上滚动任意长度)并将数据/图像保存到数据库。

与此类似的事情已完成:http://wordsquared.com/,发挥它的人越多,它就越大。

我知道这需要以某种方式平铺图像,将它们保存到数据库中,然后只在视口中填充图像。如何完成这个和无限滚动/我应该从哪里开始?

2 个答案:

答案 0 :(得分:5)

这是一种非传统的方法,但只是让我感到震惊(理论上,未绑定的存储空间)无限。

您需要存储当前加载的电路板块,作为某种类型的唯一ID。块和它们的数据需要在一个包含以下列的表中:

  • 块ID
  • 块数据
  • 北方大块的ID
  • 南方的身份证件
  • 东的ID
  • 西部的身份证件

你需要使用jQuery或类似的东西使画布可拖动(this question有一些信息)。

现在,为要拖动的画布创建一个事件侦听器,并跟踪它移动的距离。释放后,如果画布未更改为其他块,则不执行任何操作。

如果画布已离开当前块,请使用存储的ID查找要加载的下一个块。如果ID为0,则假设该块尚不存在,并创建它。否则,加载块,替换现有块。将画布设置回中心。

具有足够长的ID和足够的存储空间,这将为您提供无限画布,因为不使用任何坐标系。它还允许包裹边缘或创建虫洞。

如何实现它,我不太确定,但你只需要跟踪画布的移动距离。谷歌地图做了类似的事情,所以我会看看他们是如何处理它的(我会很快这样做,看看我是否可以在这个答案中添加一些实现细节)。

这可能不是最实用或最简单的方法,但提出它很有趣。

编辑:我相信这是基本功能: http://candrews.net/blog/2010/10/introducing-sprymap/ 它是一个轻量级可拖动的JavaScript地图。你只需要追踪到多远。

答案 1 :(得分:0)

我已经建立了一个库来处理这个名为TiledCanvas的库 它提供缩放和移动的界面。并使用所有画布apis在无限空间绘制。

它允许你根据坐标动态加载块,你只需要给它一个函数来获得x,y和回调的参数,然后你只需要给它一些可以在画布上绘制的东西。

https://github.com/Squarific/TiledCanvas