javascript - HTML5 Canvas 分层

标签 javascript html canvas

我有 2 个使用 HTML5 Canvas 的不同代码。我希望能够将两者叠加在一起。我希望视频出现在动画广场的背景中。有没有办法在 HTML5 Canvas 中做到这一点?

方形动画:

 <canvas id="ex1" width="525" height="200" style="border: 5px solid black;" ></canvas>

 <p id="text"> Increase/Decrease Speed</p>
 <input type="button" value="+" id="btnAdd">
 <input type="button" value="-" id="btnSub">
<script>

 var x = 0;
var y = 15;
var speed = 10;
var isRight = true;

document.getElementById('text').innerText = speed;

document.getElementById('btnAdd').addEventListener('click', function (event) {

    if (isRight) speed++;
    else speed--;
    document.getElementById('text').innerText = speed;

});

document.getElementById('btnSub').addEventListener('click', function (event) {
    if (isRight) speed--;
    else speed++;
    document.getElementById('text').innerText = speed;

});

function animate() {

    reqAnimFrame = window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame;

    reqAnimFrame(animate);

    x += speed;

    if (x <= 0 || x >= 475) {
        speed = -speed;

        isRight = !isRight;
    }
    document.getElementById('text').innerText = speed;

    draw();
}

 function draw() {
    var canvas = document.getElementById("ex1");
    var context = canvas.getContext("2d");

    context.clearRect(0, 0, 525, 200);
    context.fillStyle = "#ff00ff";
    context.fillRect(x, y, 40, 40);
}

animate();

</script>

视频 Canvas :

 <canvas id='canvas'></canvas>
 <script type="text/javascript">                
    var video = document.createElement('video');
    video.src = 'gold.mp4';
    video.controls = true;
    document.body.appendChild(video);

    var canvas = document.getElementById('canvas')
    var ctx = canvas.getContext('2d');

    video.onplay = function() {
        canvas.width = video.videoWidth;
        canvas.height = video.videoHeight;
            draw();
    };

    function draw() {
        if(video.paused || video.ended) return false;
            ctx.drawImage(video, 0, 0);
            setTimeout(draw, 20);
    }
</script>

最佳答案

首先,您要将 Canvas 元素的位置属性设置为absolute。然后,对于每个 Canvas ,您需要设置它们的 z-index

例如,如果您希望类 canvasOne 的元素位于 canvasTwo 后面

canvas { 
    position: absolute;
}

.canvasOne {
    z-index: -1;
}

.canvasTwo {
    z-index: 0;
}

什么绝对positioning实现的目的是它允许您将多个元素设置到同一位置,因为它将元素从页面的正常流程中取出。

z-index允许您控制元素的堆栈顺序,或者换句话说,元素层的顺序。

关于javascript - HTML5 Canvas 分层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20428126/

相关文章:

jquery - 使用 jquery 查找文本框是否被禁用或未被禁用

javascript - 当用户输入逗号时,Angularjs 会破坏标签

javascript - javascript中类的单个实例

html - 仅对列表中的某些元素设置样式

angular - 当我展开一个标签部分时,所有克拉箭头都朝上。只有选定的箭头应该出现

javascript - 似乎无法通过关键事件更改图像位置

java - 安卓 Canvas 。如何在随机位置设置圆圈?

android - Android 上的 QML Canvas ,方向问题

javascript - HTML onclick 中多个音频文件的问题

javascript - 如何更改 (jQuery) FullCalendar 中事件源的颜色?