HTML5画布层难题(z索引)

HTML5画布层难题(z索引),html,css,canvas,z-index,transparency,Html,Css,Canvas,Z Index,Transparency,我在一个网站上工作,其中包括三层视觉效果: 第1层-具有垂直滚动的布局文本信息的div 第2层-固定在视图端口底部的页脚图像(30%高度) 第3层-固定全屏的画布动画层 难题: 我希望动画位于页脚图像上方 我希望页脚图像位于文本div之上 我希望文本div位于动画上方 我明白,在现实世界中,如果这些是物理剪纸,就不可能做到这一点。有没有一个可行的方法来实现这一点,在一个网站上编程 编辑: 我发现我提出了与设计相关的答案。正确地说:)我将线框它显示在这里。现在,我将进一步解释: 页脚图像是我所

我在一个网站上工作,其中包括三层视觉效果:

  • 第1层-具有垂直滚动的布局文本信息的div
  • 第2层-固定在视图端口底部的页脚图像(30%高度)
  • 第3层-固定全屏的画布动画层
  • 难题:

    • 我希望动画位于页脚图像上方
    • 我希望页脚图像位于文本div之上
    • 我希望文本div位于动画上方
    我明白,在现实世界中,如果这些是物理剪纸,就不可能做到这一点。有没有一个可行的方法来实现这一点,在一个网站上编程

    编辑: 我发现我提出了与设计相关的答案。正确地说:)我将线框它显示在这里。现在,我将进一步解释:

    页脚图像是我所在城市的天际线。 画布动画用于渲染飞越整个屏幕区域的鸟类。 文本信息(和背景div)应该在城市天线后面向下滚动。 但我不想让飞鸟在屏幕上的文字上盘旋:)


    是否有办法使画布仅对另一个元素(文本)透明你可以根据位置改变z指数你可以根据位置改变z指数你可以根据位置改变z指数你可以根据位置改变z指数你可以根据位置改变z指数你可以根据位置改变z指数你可以根据位置改变z指数我想我明白你的意思了。一种可能是将动画拆分为多个
    元素,每个元素根据它们在屏幕上的位置具有自己的位置和z索引(因此在页脚的底部,z索引为0,然后在页面的一半左右,会有另一个画布,z索引为-5或类似)绝对定位/JavaScript辅助将是正确调整大小和放置所有内容的最简单方法,尽管它不是唯一的选项

    Canvas2D api实际上也使这一点非常容易做到。。。根本不需要更改您的绘图逻辑!只需变换与左上角不完全对齐的任何画布的上下文,并在所有画布中正常绘制场景。例如,在绘图之前,运行

    context.save();
    //Determine canvas pixel position, possibly with jQuery
    context.translate(-myCanvasXPosition, -myCanvasYPosition);
    
    ...//draw
    
    context.restore();
    
    这将调整场景,使点(0,0)始终是所有画布的浏览器左上角(而不是每个画布的通常左上角),因此无论位于哪个画布,所有绘制逻辑都将绘制正确的对象。如果性能开始出现问题,您可以添加逻辑,以便仅尝试绘制当前绘制的画布中实际显示的元素


    使用这种方法,看起来像是一张背景图的东西实际上是不可见地缝合在一起的多张图,这将让你使这些图的不同部分具有不同的z索引。

    我想我明白你的意思了。一种可能是将动画拆分为多个
    元素,每个元素根据它们在屏幕上的位置具有自己的位置和z索引(因此在页脚的底部,z索引为0,然后在页面的一半左右,会有另一个画布,z索引为-5或类似)绝对定位/JavaScript辅助将是正确调整大小和放置所有内容的最简单方法,尽管它不是唯一的选项

    Canvas2D api实际上也使这一点非常容易做到。。。根本不需要更改您的绘图逻辑!只需变换与左上角不完全对齐的任何画布的上下文,并在所有画布中正常绘制场景。例如,在绘图之前,运行

    context.save();
    //Determine canvas pixel position, possibly with jQuery
    context.translate(-myCanvasXPosition, -myCanvasYPosition);
    
    ...//draw
    
    context.restore();
    
    这将调整场景,使点(0,0)始终是所有画布的浏览器左上角(而不是每个画布的通常左上角),因此无论位于哪个画布,所有绘制逻辑都将绘制正确的对象。如果性能开始出现问题,您可以添加逻辑,以便仅尝试绘制当前绘制的画布中实际显示的元素


    使用这种方法,看起来像是一张背景图的东西实际上是不可见地缝合在一起的多张图,这将让你使这些图的不同部分具有不同的z索引。

    我想我明白你的意思了。一种可能是将动画拆分为多个
    元素,每个元素根据它们在屏幕上的位置具有自己的位置和z索引(因此在页脚的底部,z索引为0,然后在页面的一半左右,会有另一个画布,z索引为-5或类似)绝对定位/JavaScript辅助将是正确调整大小和放置所有内容的最简单方法,尽管它不是唯一的选项

    Canvas2D api实际上也使这一点非常容易做到。。。根本不需要更改您的绘图逻辑!只需变换与左上角不完全对齐的任何画布的上下文,并在所有画布中正常绘制场景。例如,在绘图之前,运行

    context.save();
    //Determine canvas pixel position, possibly with jQuery
    context.translate(-myCanvasXPosition, -myCanvasYPosition);
    
    ...//draw
    
    context.restore();
    
    这将调整场景,使点(0,0)始终是所有画布的浏览器左上角(而不是每个画布的通常左上角),因此无论位于哪个画布,所有绘制逻辑都将绘制正确的对象。如果性能开始出现问题,您可以添加逻辑,以便仅尝试绘制当前绘制的画布中实际显示的元素


    使用这种方法,看起来像是一张背景图的东西实际上是不可见地缝合在一起的多张图,这将让你使这些图的不同部分具有不同的z索引。

    我想我明白你的意思了。一种可能是将动画拆分为多个
    元素,每个元素都有自己的位置和z索引,这取决于它们在屏幕上的位置(因此在页脚的底部有z)