我正在使用这段代码来创建一个衰落的轨迹。它用于context.fillStyle = 'rgba(0,0,0,0.12)';
创建淡入淡出。问题是我想在元素顶部使用淡入淡出的痕迹,<video>
而淡入淡出隐藏了<video>
元素。
有没有办法让画布在<video>
不隐藏的情况下淡化?
我正在使用这段代码来创建一个衰落的轨迹。它用于context.fillStyle = 'rgba(0,0,0,0.12)';
创建淡入淡出。问题是我想在元素顶部使用淡入淡出的痕迹,<video>
而淡入淡出隐藏了<video>
元素。
有没有办法让画布在<video>
不隐藏的情况下淡化?
您可以将视频元素绘制到画布上,而不是使用全局 alpha -
更新
要启用淡出,您可以使用此修改后的代码(演示使用按钮触发淡出,但您可以从任何设置启动它fade = true
):
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 = false
,fadeVal = 1
然后调用loop()
.