使用HTML5画布进行侧面滚动

时间:2011-08-25 06:14:53

标签: html5 canvas side-scroller

我有一个尺寸如下的画布:500x200。在这个画布里面我画了一些块(实际上是表格单元格)。关于我应该通过AJAX获取多少块的信息,但每个单元的大小是固定的 - 100x50。所以,我可以在我的画布里面只显示水平5块,垂直4块。但是其他街区呢?如果脚本返回表30x30单元格怎么办?我如何侧面滚动(鼠标首选)我的画布,所以用户可以其余的单元格(没有缩小,只滚动)。

如果您需要更多信息,请告诉我,我会提供。 谢谢。

3 个答案:

答案 0 :(得分:2)

实现此目的的最简单方法是实现鼠标平移。

在鼠标按下事件中,开始平移并保存鼠标位置

在鼠标移动事件中,将上下文(ctx.translate(x,y))翻译为当前鼠标位置与原始位置之间的差异,然后重绘场景。

在鼠标注册事件中,停止平移。

有更难的方法。您可以在画布中实现滚动条,就像Mozilla Bespin所做的那样(......它变成了Mozilla Skywriter,然后与Ace合并并放弃了所有Canvas的使用)。他们使用的代码非常好。

或者你可以实现DOM滚动条与你的画布一起使用,这在所有情况下都不是很容易。这涉及添加几个虚拟div以提供真实滚动条的外观和功能。我已经这样做但是代码现在还没有发布。但是,如果那就是你真正想要的东西,那就没有理由你试试。

答案 1 :(得分:1)

答案 2 :(得分:0)

我和Simon Sarris在一起,但作为替代方案,您可以克隆画布,并用空白画布替换它,然后将原始画布渲染为图像。我有一些像这样的MooTools js,这对我的使用很好,ymmv:

    var destinationCanvas = this.canvas.clone()l
    destinationCanvas.cloneEvents( this.canvas, 'mousemove');
    var destCtx = destinationCanvas.getContext('2d');
    destCtx.drawImage(
        this.canvas, 
        (this.options.scrollPx)*-1, 
        0
    );
    destinationCanvas.replaces( this.canvas );
    this.canvas.destroy();
    this.canvas = destinationCanvas;
    this.ctx        = destCtx; // this.canvas.getContext('2d');