【发布时间】:2021-11-03 05:50:33
【问题描述】:
我正在尝试加载视频并将其缩略图绘制到画布中。我遇到的问题是,当视频图像准备好复制时,我找不到触发的事件。当加载数据事件触发时,大小设置正确,但画布图像为空白。如果我取消注释计时器以延迟一秒钟,则画布被填充,但没有延迟它不是。是否有一些我忽略的事件,或者其他方式来告诉视频元素何时能够复制?我尝试了 load、canplay、canplaythrough、loadeddata、progress,但似乎都没有在正确的时间出现。
<html>
<head>
<script>
var video, image, width, height;
function copy(src) {
video = document.getElementById('video');
video.addEventListener('loadeddata', x => finishCopy());
video.src = src;
}
function finishCopy() {
width = document.defaultView.getComputedStyle(video).width.replace(/[^.0-]/g, '');
height = document.defaultView.getComputedStyle(video).height.replace(/[^.0-]/g, '');
image = document.getElementById('image');
image.width = width;
image.height = height;
//setTimeout(draw, 1000);
draw();
}
function draw() {
let ctxt = image.getContext('2d');
ctxt.drawImage(video, 0, 0, width, height);
}
</script>
</head>
<body >
<video id="video" autostart="false" ></video>
<canvas id="image"></canvas>
</body>
</html>
【问题讨论】:
标签: javascript html5-canvas dom-events html5-video