0

我正在使用这段代码来创建一个衰落的轨迹。它用于context.fillStyle = 'rgba(0,0,0,0.12)';创建淡入淡出。问题是我想在元素顶部使用淡入淡出的痕迹,<video>而淡入淡出隐藏了<video>元素。

有没有办法让画布在<video>不隐藏的情况下淡化?

4

1 回答 1

2

您可以将视频元素绘制到画布上,而不是使用全局 alpha -

更新

要启用淡出,您可以使用此修改后的代码(演示使用按钮触发淡出,但您可以从任何设置启动它fade = true):

ONLINE DEMO

var fade = false;
var fadeVal = 1;

ctx.globalAlpha = 0.2; //adjust as needed

function loop() {

    /// draw frame from video at current global alpha
    if (video1) ctx.drawImage(video1, 0, 0, w, h);

    /// if fade = true start fade out
    if (fade === true) {

        /// we need to make opaque again or the black box
        /// will be transparent resulting in none-working effect
        ctx.globalAlpha = 0.2 + (1-fadeVal);

        /// set fill color for black box
        ctx.fillStyle = 'rgba(0,0,0,' + (1 - fadeVal) + ')';

        /// draw on top of video 
        ctx.fillRect(0, 0, w, h);

        /// speed of fade out
        fadeVal -= 0.02;
    }

    /// when faded out, stop loop (stop video too, not shown)
    if (fadeVal >= 0) requestAnimationFrame(loop);

}
loop();

这将从先前绘制的帧中留下视频轨迹,并允许您淡出保留轨迹的视频。

这只是一个简单的示例,并且只是许多方法中的一种 - 适应您的需求。

要重新启动您设置的视频fade = falsefadeVal = 1然后调用loop().

于 2013-07-19T19:00:40.800 回答