現在、どのくらいのビデオが視聴され、再生されたかを特定しようとしていますが、特定の時点で機能をトリガーしたいと考えています。ビデオの再生数を保存する
私が発生する問題は、どのくらい監視されたかを把握する方法がわからないことです。たとえば、30秒間視聴して10秒間巻き戻した場合、本質的に30秒間で20回は視聴されませんでしたが、currentTime
と表示されます。
const video = document.getElementById("video");
const set = new Set();
const percent = .8;
let toWatch;
function mediaWatched (curr) {
alert(`${curr}% of media watched`)
}
function handleMetadata(e) {
toWatch = Math.ceil(video.duration * percent);
console.log(toWatch, video.duration);
}
function handleTimeupdate (e) {
set.add(Math.ceil(video.currentTime));
let watched = Array.from(set).pop();
if (set.has(toWatch) && watched === toWatch) {
video.removeEventListener("timeupdate", handleTimeupdate);
console.log(watched);
mediaWatched(
Math.round(watched/Math.ceil(video.duration) * 100)
);
}
}
video.addEventListener("loadedmetadata", handleMetadata);
video.addEventListener("timeupdate", handleTimeupdate);
<video width="400" height="300" controls="true" poster="" id="video">
<source type="video/mp4" src="http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_2mb.mp4" />
</video>
どのように私は、もし80%が見てきたし、少なくとも再生された機能を起動するために、このような振る舞いを追加することができますか?
ありがとうございます!
私は何をしようとしていることであるビデオが(自動またはプレイクリックで)開始されると、私は(set.has(toWatch)&&見た場合のとき 'に耳を傾ける必要があり、私の' timeupdate'イベントを持っていること===ウォッチ&& videoWatchedFor> = toWatch){'。今私があなたのアプローチで持っている問題は、 'timeupdate'が1秒間に3〜4回呼び出されるので、' setInterval'は1000msのタイムアウトを持たないということです。私は 'play'イベントにアタッチすることを考えましたが、ビデオが一時停止してもタイマーはカウントされます。 –
それからあなたはそれを演奏に付けることができ、一時停止すると間隔をクリアします。それから演劇でそれは続けるだろう。 – Carlo