创建HTML5无限画布
Creating a HTML5 infinite canvas
我正试图从头开始学习如何构建交互式画布,但在画布视口之外绘制东西(超过canvas.width
和canvas.height
的东西)时遇到了困难。我们的目标是拥有一个像无限画布一样的东西,在那里你可以滚动、缩放并把东西放在我想要的任何地方。
当我们缩小时,我发现了如何正确计算正确的插入点,算法是这样工作的:
查看组件是否应添加off画布的限制
如果是,请变换偏移量(x,y),添加点和画布边缘之间的距离。
我注意到event.pageX
和event.pageY
的值总是根据画布的宽度和高度提供给我的,所以如果我缩小了这些值,那么这些值就会比它应该的值小(因为我正在查看更多的像素)。变换算法在JS中的工作方式如下:
// pageX is 430, pageY is 480
// canvas has width=600 height=600
// scale is 0.6, meaning the canvas actually has size 360x360
var currentSize = canvas.width * scale; // 360
pageX = canvas.width + (pageX - currentSize);
pageY = canvas.width + (pageY - currentSize);
在纸上绘制这个逻辑似乎有效,但问题是我(显然)无法在画布限制之外绘制,所以我看不到结果。问题是:
- 这个逻辑正确吗
- 有办法实现我的目标吗?(指出正确的文献将不胜感激)
- 画布是适合这份工作的工具吗?还是我应该使用其他工具
我用来学习的完整例子可以在这把小提琴上找到。
更新
我有另一个想法来解决这个问题:我不在画布外绘制东西,而是简单地平移我的点,使其按比例适应画布的限制,然后应用缩放来放大/缩小。类似这样的东西:
// canvas is 500x500
var points = [
{text: 'Foo', x: 10, y: 10},
{text: 'Bar', x: 854, y: 552}, // does not fit inside
{text: 'Baz', x: 352, y: 440}
];
// The canvas can't show all these points, the ideal
// would be having a canvas of at least size 900x600,
// so I can use a rule of three to convert all points
// from this imaginary canvas to fit inside my 500x500
// in 900px, x=10
// in 500px, x=?
// hence, the formulas are `newX=x * 500 / 900` and `newY = y * 500 / 600`
var converted_points = [
{text: 'Foo', x: 5.55, y: 8.33},
{text: 'Bar', x: 474.44, y: 460},
{text: 'Baz', x: 195.55, y: 366.66}
];
在那之后,我想我只需要缩放/变换画布来进行缩放。这样的逻辑可以吗?
您可以使用名为TiledCanvas的库
它提供了缩放和移动的界面。使用所有的画布api绘制一个无限的空间。
它确实需要你说出你在哪里画画。
https://github.com/Squarific/TiledCanvas
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 结合jQuery和jetpack无限滚动
- HTML5页面底部棒
- Google/html5语音识别JavaScript SDK Chrome网络工具包SpeechRecognition
- Is onfling available for html, html5
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- 安卓平台上的QWebView HTML5地理位置
- HTML5在画布中加载较小的图像并保存实际大小的图像
- ng应用程序使脚本无限运行
- 如何检查用户在html5视频播放器中观看了完整的视频
- 使用具有内联样式的tidy-html5
- 从所有元素中删除HTML5验证
- javascript:将数据库中的数据插入到html5文本字段中
- html5视频中的Youtube类型注释
- 创建HTML5无限画布
- 在从无限滚动加载页面的html5音频播放器上连续播放时出现问题
- & # 39;无限# 39;有没有一种非flash (Java + HTML5 +CSS3)的方法来实现这种效果?
- 如何在所有html5视频都加载了无限滚动后才运行砖石