[英]How do I get the HTML5 Video pause() method to work?
I have a HTML video with a DIV containing custom controls over it.我有一个 HTML 视频,其中包含一个包含自定义控件的 DIV。
The play button works perfectly fine, but the pause button does not.播放按钮可以正常工作,但暂停按钮不能。 There are two wird things:
有两件事情:
// play video $('.funnel-video-poster').on('click', function() { var video_id = $(this).data('video-id'); document.getElementById(video_id).play(); $(this).find('.FVP-btn-play').addClass('hidden'); $(this).find('.FVP-btn-pause').removeClass('hidden'); }); // pause video $('.FVP-btn-pause').on('click', function() { var $poster = $(this).closest('.funnel-video-poster'), video_id = $poster.data('video-id'); var media = document.querySelector('#' + video_id); media.pause(); console.log(media); $poster.find('.FVP-btn-play').removeClass('hidden'); $poster.find('.FVP-btn-pause').addClass('hidden'); console.log($poster.find('.FVP-btn-play')); console.log($poster.find('.FVP-btn-pause')); });
.funnel-block.funnel-video video { display: block; margin: 0 auto; }.funnel-block.funnel-video.funnel-video-poster { background-repeat: no-repeat; position: relative; z-index: 2; margin-left: auto; margin-right: auto; cursor: pointer; }.funnel-block.funnel-video.funnel-video-poster.see-thru { background: transparent;important. }.funnel-block.funnel-video.funnel-video-poster:FVP-btn-play { width; 3rem: height; 3rem: line-height; 3rem: background; #3c3c3c: color; #fff: position; absolute: top; 50%: left; 50%: transform, translate(-50%; -50%): text-align; center: border-radius; 50%. }.funnel-block.funnel-video.funnel-video-poster:FVP-btn-pause { width; 3rem: height; 3rem: line-height; 3rem: background; #3c3c3c: color; #fff: text-align; center: border-radius; 50%: position; absolute: bottom. ;25rem: left; 50%: transform, translate(-50%; 0); }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="funnel-block"> <div class="py-5 funnel-video"> <video poster="https://www.tomasbradle.eu/webroot/stored_data/funnel_videos/funnel_block_50_ea8dec6d.png" id="funnel_video_50" equalizer-state="attached" width="640" height="360"> <source src="https://www.tomasbradle.eu/webroot/stored_data/funnel_videos/funnel_block_50_ea8dec6d.mp4"> Your browser does not support HTML 5 video </video> <div class="funnel-video-poster see-thru" data-video-id="funnel_video_50" style="width:640px;height:360px;margin-top:-360px"> <div class="FVP-btn-play hidden">Play</div> <div class="FVP-btn-pause">Pause</div> </div> </div> </div>
I did not change the CSS, apart from adding a hidden
class, which was not included.我没有更改 CSS,除了添加了一个
hidden
的 class,它不包括在内。 I did not look at the CSS in depth, it was not necessary to create a working solution.我没有深入研究 CSS,没有必要创建一个有效的解决方案。 However, I did notice the use of the
style
attribute in the HTML code.但是,我确实注意到 HTML 代码中使用了
style
属性。 It is best to avoid inline styles.最好避免内联 styles。
There was a problem with the HTML video code. HTML 视频代码存在问题。 Please readall about the HTML video element .
请阅读有关 HTML 视频元素的所有信息。 Everything that is necessary to understand my solution is there.
了解我的解决方案所需的一切都在那里。
The video playing problem may well have been caused by the fact that there were two sources in the video element, one was an image and the other was the video.视频播放问题很可能是由于视频元素中有两个来源,一个是图像,另一个是视频。 I did not investigate this further.
我没有进一步调查。 I suspect that the original code would load both the
png
image and the mp4
video at the same time, and sometimes one would be first and sometimes the other.我怀疑原始代码会同时加载
png
图像和mp4
视频,有时是第一个,有时是另一个。 This might well have given bizarre problems.这很可能会带来奇怪的问题。 If my suspicions are correct, then the video download would be aborted when the image was first (which probably would be more often).
如果我的怀疑是正确的,那么视频下载将在图像首次出现时中止(这可能会更频繁)。 I would be interested to know whether my suspicions are correct.
我很想知道我的怀疑是否正确。
I moved the hidden
class from Play
to Pause
as this is the state of the application to start with.我将
hidden
的 class 从Play
移到Pause
,因为这是应用程序的 state 开始。
There were several problems with the jQuery code. jQuery 代码存在几个问题。
In jQuery, a good way to add
and remove
a single class for actions such as Play
, Pause
, Stop
, and Record
is to use the toggleClass
function.在 jQuery 中,为
Play
、 Pause
、 Stop
和Record
等操作add
和remove
单个 class 的好方法是使用toggleClass
function。
Please note the correct way to start playing and pausing the video using the jQuery trigger
function.请注意使用 jQuery
trigger
function 开始播放和暂停视频的正确方法。
Here is one source of information about jQuery .这是有关 jQuery的信息来源之一。
Here is a working solution:这是一个有效的解决方案:
$('.FVP-btn-play').on('click', function() { $('video').trigger('play'); $('.FVP-btn-play').toggleClass('hidden'); $('.FVP-btn-pause').toggleClass('hidden'); }); $('.FVP-btn-pause').on('click', function() { $('video').trigger('pause'); $('.FVP-btn-play').toggleClass('hidden'); $('.FVP-btn-pause').toggleClass('hidden'); });
.funnel-block.funnel-video video { display: block; margin: 0 auto; }.funnel-block.funnel-video.funnel-video-poster { background-repeat: no-repeat; position: relative; z-index: 2; margin-left: auto; margin-right: auto; cursor: pointer; }.funnel-block.funnel-video.funnel-video-poster.see-thru { background: transparent;important. }.funnel-block.funnel-video.funnel-video-poster:FVP-btn-play { width; 3rem: height; 3rem: line-height; 3rem: background; #3c3c3c: color; #fff: position; absolute: top; 50%: left; 50%: transform, translate(-50%; -50%): text-align; center: border-radius; 50%. }.funnel-block.funnel-video.funnel-video-poster:FVP-btn-pause { width; 3rem: height; 3rem: line-height; 3rem: background; #3c3c3c: color; #fff: text-align; center: border-radius; 50%: position; absolute: bottom. ;25rem: left; 50%: transform, translate(-50%; 0). }:hidden { visibility; hidden; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="funnel-block"> <div class="py-5 funnel-video"> <video poster="https://www.tomasbradle.eu/webroot/stored_data/funnel_videos/funnel_block_50_ea8dec6d.png" src="https://www.tomasbradle.eu/webroot/stored_data/funnel_videos/funnel_block_50_ea8dec6d.mp4" width="640" height="360"> <p>Your browser does not support HTML 5 video</p> </video> <div class="funnel-video-poster see-thru" style="width:640px;height:360px;margin-top:-360px"> <div class="FVP-btn-play">Play</div> <div class="FVP-btn-pause hidden">Pause</div> </div> </div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.