我有一个视频,我想根据视频的当前时间在几个不同的点暂停它。将有3个停靠点,一停在5秒,一停在10秒,一停在15秒。在每个停靠点,都会出现一个按钮以继续播放视频。我不确定如何进行这项工作,因为currentTime
从未精确达到这些点,所以目前我不得不使用>=
时间停止,这意味着5秒停止点将不断触发。>
var video = $('#video').get(0);
video.addEventListener('timeupdate', function() {
if(this.currentTime >= 5) {
console.log('5 seconds');
this.pause();
$('button').css('display','block');
}
if(this.currentTime >= 10) {
console.log('10 seconds');
this.pause();
$('button').text('Part 3');
$('button').css('display','block');
}
if(this.currentTime >= 15) {
console.log('15 seconds');
this.pause();
$('button').text('Part 4');
$('button').css('display','block');
}
});
$('button').click(function() {
video.play();
$('button').css('display','none');
});
button {
display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<video id="video" autoplay>
<source src="https://www.w3schools.com/html/mov_bbb.mp4">
</video>
<button>Part 2</button>
答案 0 :(得分:4)
如您所见,timeupdate
并不总是精确地位于 间隔。可能要花几毫秒的时间。
要解决您遇到的问题,您可以存储一个变量,该变量保存发生timeupdate
的视频中的最后一点,并将其包括在您的if
条件中:
var $video = $('#video');
var video = $video.get(0);
video.addEventListener('timeupdate', function() {
var lastCheckedAt = $video.data('lastcheck') || 0;
$video.data('lastcheck', this.currentTime);
if (this.currentTime >= 5 && lastCheckedAt < 5) {
console.log('5 seconds');
this.pause();
$('button').show();
} else if (this.currentTime >= 10 && lastCheckedAt < 10) {
console.log('10 seconds');
this.pause();
$('button').text('Part 3').show();
} else if (this.currentTime >= 15 && lastCheckedAt < 15) {
console.log('15 seconds');
this.pause();
$('button').text('Part 4').show();
}
});
$('button').click(function() {
video.play();
$('button').hide();
});
button {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<video id="video" autoplay>
<source src="https://www.w3schools.com/html/mov_bbb.mp4">
</video>
<button>Part 2</button>
还请注意使用show()
和hide()
而不是直接调用css()
。