画布上的视频不断调整大小

微妙的电影院

我无法调整正在显示视频的画布的大小。调整大小后,它会连续不断地晃动到“之前”和“之后”窗口大小之间的不同大小。

我尝试了这篇文章的想法,这似乎使Chrome稍微平静了下来,但对Firefox没有影响。

一篇文章给了我一些想法,但仍然没有解决。似乎我要在一个循环中多次调用resize(我看不到),或者画布的上下文不知道如何确定最终的尺寸。有任何想法吗?

<!DOCTYPE html>

<html>
<head>
    <title>overflow</title>
<style>
#c {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    width: 100%;
    height: 100%;
    z-index: 1;
}
#hold {
    position: fixed;
}

#v {
    position: absolute;
    height: auto;
    width: 100%;
    z-index: 0;

}
#see {
    position: relative;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 2;

}
</style>
</head>

<body>
<canvas id=c></canvas>

<div id=hold>
<video id=v>
</video>
</div>

<canvas id=see></canvas>


<script>
window.onload = start;

function start() {

    var v = document.getElementById('v');
    var house = document.getElementById('hold');
    var base = document.getElementById('c');
    var canvas = base.getContext('2d');
    var cover = document.getElementById('see');
    var canvastwo = cover.getContext('2d');


    v.src=("keyed.ogv")
    v.load();
    v.play();

    resize();

    function resize() {
        var wth = (window.innerWidth * 0.65);
        house.width = wth;
        house.height = (wth * 9/16);
        house.style.marginTop=((window.innerHeight/2) - (house.height/2) + "px");
        house.style.marginLeft=((window.innerWidth/2) - (house.width/2) + "px");
        cover.width = (wth/2);
        cover.height = (house.height/2);
        cover.style.marginTop=((window.innerHeight/2) - (cover.height/2) + "px");
        cover.style.marginLeft=((window.innerWidth/2) - (cover.width/2) + "px");
        var rw = cover.width;
        var rh = cover.height;

        canvastwo.clearRect(0, 0, rw, rh);
        draw(v, canvastwo, rw, rh);
    }

    window.onresize = resize;

function draw(o,j,w,h) {
    if(v.paused || v.ended) return false;
    j.drawImage(o,0,0,w,h);
    setTimeout(draw,20,o,j,w,h);
    }

}
</script>
</body>
</html>
用户名

setTimeout随着上下文的变化,您似乎像在这里使用函数一样锁定了函数使用的旧值因此,当您调整大小时,循环仍会使用不再与新大小对应的旧值,并导致这些大小之间的视频切换。

尝试更多地“全局化”值,以使循环调用在涉及参数时是干净的。这样,您可以确保变量在每个回合中都包含正确的值。

还要更改setTimeout与的值,requestAnimationFrame以使环路更低电平(更有效),并使之更流畅,因为这与监视器的空白间隙同步。这对于视频尤为重要,因为否则视频将setTimeout无法与监视器同步,因此会跳过帧

这是您需要更改的基本代码:

/// put these into you start block to keep them "global"
/// for the functions within it.
var w, h;

resize函数中更改此部分

/// ...
w = cover.width;
h = cover.height;

canvastwo.clearRect(0, 0, w, h);

/// argument free call to draw:
draw();

最后是循环:

function draw() {
    if(v.paused || v.ended) return false;
    canvastwo.drawImage(v,0,0,w,h);
    requestAnimationFrame(draw);
}

这将删除抽搐的视频,并像视频元素本身一样将更新同步到监视器。

ONLINE DEMO

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么这个画布不断增长?(动态调整画布大小)

来自分类Dev

画布粒子-在“窗口调整大小”上更新画布大小

来自分类Dev

在窗口调整大小上动态调整画布大小

来自分类Dev

在tkinter画布上动态调整矩形大小

来自分类Dev

画布上的Tkinter调整大小滚动条无法调整

来自分类Dev

画布上的Tkinter调整大小滚动条无法调整

来自分类Dev

调整画布图像的大小

来自分类Dev

无法调整画布大小

来自分类Dev

如何调整画布大小

来自分类Dev

调整画布图像的大小

来自分类Dev

调整画布元素的大小

来自分类Dev

如何在画布上重新绘制以调整大小而不会模糊?

来自分类Dev

如何在画布上移动/调整大小/旋转ContentControl?

来自分类Dev

在画布上绘制可调整大小的矩形

来自分类Dev

无法从窗口调整大小和jQuery绑定画布上的DOM中获取画布

来自分类Dev

调整画布项目的大小

来自分类Dev

调整画布大小而不裁剪

来自分类Dev

调整画布元素/形状的大小

来自分类Dev

在画布中调整图像大小

来自分类Dev

使用 getImageData 调整画布大小

来自分类Dev

画布调整大小 photoshop 脚本

来自分类Dev

android VideoView调整视频大小

来自分类Dev

如何调整WEBM视频的大小

来自分类Dev

在 PyQt 中调整视频大小

来自分类Dev

在 AVMutableVideoCompositionLayerInstruction 中调整视频大小

来自分类Dev

画布叠加在视频上

来自分类Dev

在 HTML 中调整 SVG 大小而不调整画布大小

来自分类Dev

根据视频大小调整div的大小

来自分类Dev

在html5画布上拖动图像并调整其大小