用于播放和暂停视频的 Javascript 函数

标签 javascript html5-video

我正在尝试通过包含开始时间和结束时间的可点击播放按钮在特定时间点开始和暂停 html5 视频:

function videostart(id,start,end){

  var video = document.getElementsByTagName("video")[0];
  video.currentTime = start;
  video.play();

  video.addEventListener("timeupdate", function() {
  if (video.currentTime >= end) {
  video.pause();
  }}, false);

};

第一个调用工作正常,它从 0 点开始播放并在 2:24 结束。

<a href="#" onclick="videostart('1759',0.00,2.24); return false;">PLAY</a>

然而,第二个电话开始播放然后立即停止:

<a href="#" onclick="videostart('1760',2.25,7.24); return false;">PLAY</a>

如果我先点击第一个链接,它可以正常播放并从 0 播放到 2.24。

如果我先点击第二个链接,它可以正常播放,也可以正常停止。

但是,如果我先点击第一个链接然后点击第二个链接,它开始播放然后立即退出。

我可以,然后返回并播放第一个链接,我想播放多少次都没有问题。

最佳答案

.addEventListener() & .removeEventListener()

首先避免使用 onevent 属性处理程序:

<button onclick="fnc()">

您需要删除 timeupdate 事件处理程序,因为它会根据初始 end 值不断更新。这意味着需要 .addEventListener().removeEventListener()

演示

demo中有详细说明

/*
Register the document to the click event
When it's clicked, call function videoStart()
*/
document.addEventListener('click', videoStart);
// Declare variable
var END;
// Define function videoStart() -- pass Event Object
function videoStart(event) {
  // Reference the clicked button
  var button = event.target;
  // Get data-start value of clicked button
  var start = button.dataset.start;
  // Get data-end value of clicked button
  var end = button.dataset.end;
  // Assign value of end to END
  END = end;
  // Reference the video tag
  var video = document.querySelector("video");
  // Set time to start value
  video.currentTime = start;
  // Play video
  video.play();
  /* 
  Register video tag to timeupdate event 
  videoEnd() is the callback function
  */
  video.addEventListener("timeupdate", videoEnd);
};

// Define function videoEnd() -- pass the Event Object
function videoEnd(event) {
  // Reference the video tag
  var video = document.querySelector("video");
  /*
  if the current time is greater than or equal to END...
  pause video and remove the eventListener() so the next
  eventListener can be established according to new END
  argument.
  */
  if (video.currentTime >= END) {
    video.pause();
    video.removeEventListener("timeupdate", videoEnd);
  }
}
<video src='https://html5demos.com/assets/dizzy.mp4' width='320'></video>
<button data-start='0' data-end='3'>0 - 3</button>

<button data-start='3' data-end='5'>3 - 5</button>

关于用于播放和暂停视频的 Javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55186832/

相关文章:

javascript - 移动浏览器中的视频DOM函数: how to stop video from a timed function

html - 为什么有些 MP4 文件不能通过 HTML5 播放?

javascript - 如何正确设置调用 javascript 函数的 URL?

javascript - 如何动态计算iframe的高度?

Javascript 从怪异模式切换到标准模式

javascript - 如何在js文件中包含html文件

css - 居中全屏视频

javascript - 无法使用 Javascript 动态更改 HTML5 视频的来源

javascript - Chrome HTML5 <video> 请求 - 未发送 cookie

javascript - 输入文件 - 更改数据按钮文本的文本按钮