简体   繁体   English

如何让 HTML5 Video pause() 方法工作?

[英]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:有两件事情:

  1. The media.pause() method just does not seem to work at all, like it would not even be there. media.pause() 方法似乎根本不起作用,就像它甚至不存在一样。
  2. The.addClass() and.removeClass() after media.pause() are not working either, but when I put console.log('anything'); media.pause() 之后的 .addClass() 和 .removeClass() 也不起作用,但是当我把 console.log('anything'); below it in the code, it prints in the console.在代码下方,它会在控制台中打印。 Also the objects that it is called on are there (console.log-ed it).它被调用的对象也在那里(console.log-ed)。

 // 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 中,为PlayPauseStopRecord等操作addremove单个 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM