Phát hiện khi video HTML5 kết thúc


252

Làm thế nào để bạn phát hiện khi một <video>phần tử HTML5 đã chơi xong?


Tài liệu rất hữu ích với trang thử nghiệm từ Apple: developer.apple.com/l Library / safari / # samplecode / Kẻ Tất cả những gì bạn muốn biết về các sự kiện video HTML5!
viebel

Câu trả lời:


311

Bạn có thể thêm một người nghe sự kiện với 'kết thúc' là thông số đầu tiên

Như thế này :

<video src="video.ogv" id="myVideo">
  video not supported
</video>

<script type='text/javascript'>
    document.getElementById('myVideo').addEventListener('ended',myHandler,false);
    function myHandler(e) {
        // What you want to do after the event
    }
</script>

8
Đây là video duy nhất. Sự kiện "kết thúc" hoạt động trên toàn bộ internet. Bravo!
Isaac

10
Tại sao bạn kiểm tra nếu e tồn tại?
Allan Stepps

3
@ ALLanStepps Từ những gì tôi có thể thu thập, if(!e) { e = window.event; }tuyên bố rằng câu trả lời này ban đầu bao gồm là mã dành riêng cho IE để nhận sự kiện mới nhất từ ​​bên trong một trình xử lý sự kiện được đính kèm attachEventtrên các phiên bản đầu tiên của IE. Vì trong trường hợp này, trình xử lý được đính kèm addEventListener(và những phiên bản IE đầu tiên đó không liên quan đến những người giao dịch với video HTML5), nên nó hoàn toàn không cần thiết và tôi đã gỡ bỏ nó.
Mark Amery

3
Một điểm cần lưu ý khi sử dụng phương pháp này, Safari trên El Capitan verson của OS X (10.11) không bắt được sự kiện 'đã kết thúc'. Vì vậy, trong trường hợp đó, tôi cần sử dụng sự kiện 'timeupdate' và sau đó kiểm tra xem khi này. Thời gian hiện tại bằng 0 lần nữa.
Cam

2
Cũng nhớ đặt vòng lặp thành false, nếu không sự kiện đã kết thúc sẽ không được kích hoạt.
Israel Morales

134

Hãy xem tất cả mọi thứ bạn cần biết về bài đăng Video và âm thanh HTML5 tại trang web Opera Dev trong phần "Tôi muốn cuộn các điều khiển của riêng mình".

Đây là phần thích hợp:

<video src="video.ogv">
     video not supported
</video>

sau đó bạn có thể sử dụng:

<script>
    var video = document.getElementsByTagName('video')[0];

    video.onended = function(e) {
      /*Do things here!*/
    };
</script>

onendedlà một sự kiện tiêu chuẩn HTML5 trên tất cả các yếu tố truyền thông, xem tài liệu sự kiện về yếu tố truyền thông HTML5 (video / âm thanh) .


2
Tôi đã cố gắng bắt sự kiện "kết thúc" chính xác theo cùng một cách, như bạn đã trình bày, nhưng sự kiện này không nổ ra. Tôi đang ở trong Safari 5.0.4 (6533.20.27)
AntonAL

@AntonAL: Tôi sẽ đăng câu hỏi này dưới dạng câu hỏi mới nếu bạn gặp vấn đề.
Alastair Forge

@ Tất cả: Bạn cũng có thể làm như thế này. <video class = "video_player" id = "video" poster = "hình ảnh / video-pc.jpg" tabindex = "0" height = "100%" onends = "myHandler ()">
VendettaDroid

5
@AlastairPitts Điều này không hợp lệ trên Chrome. Câu trả lời của Darkroro là cách duy nhất để tôi làm việc với Chrome. Điều này vẫn hoạt động trên Firefox.
Jeff

Liên kết chết. w3schools.com/tags/ref_eventattribut.asp => Sự kiện truyền thông
Aurelien

36

YÊU CẦU

$("#video1").bind("ended", function() {
   //TO DO: Your code goes here...
});

HTML

<video id="video1" width="420">
  <source src="path/filename.mp4" type="video/mp4">
  Your browser does not support HTML5 video.
</video>

Các loại sự kiện Tham chiếu DOM âm thanh và video HTML


11
-1. .on()đã được ưa thích hơn .bind()kể từ jQuery 1.7, được phát hành vào năm 2011. Ngoài ra, vui lòng định dạng mã của bạn đúng cách.
Mark Amery

4

Đây là một ví dụ đầy đủ, tôi hy vọng nó sẽ giúp =).

<!DOCTYPE html> 
<html> 
<body> 

<video id="myVideo" controls="controls">
  <source src="your_video_file.mp4" type="video/mp4">
  <source src="your_video_file.mp4" type="video/ogg">
  Your browser does not support HTML5 video.
</video>

<script type='text/javascript'>
    document.getElementById('myVideo').addEventListener('ended',myHandler,false);
    function myHandler(e) {
        if(!e) { e = window.event; }
        alert("Video Finished");
    }
</script>
</body> 
</html>

4

Đây là một cách tiếp cận đơn giản kích hoạt khi video kết thúc.

<html>
<body>

    <video id="myVideo" controls="controls">
        <source src="video.mp4" type="video/mp4">
        etc ...
    </video>

</body>
<script type='text/javascript'>

    document.getElementById('myVideo').addEventListener('ended', function(e) {

        alert('The End');

    })

</script>
</html> 

Trong dòng 'EventListener' thay thế từ 'đã kết thúc' bằng 'tạm dừng' hoặc 'phát' để ghi lại các sự kiện đó.


Bạn có một lỗi cú pháp trong mã JS này. Mất tích) sau danh sách đối số
frzsombor

1

Bạn chỉ có thể thêm onended="myFunction()"vào thẻ video của bạn.

<video onended="myFunction()">
  ...
  Your browser does not support the video tag.
</video>

<script type='text/javascript'>
  function myFunction(){
    console.log("The End.")
  }
</script>

0

Bạn có thể thêm người biết lắng nghe tất cả các sự kiện phim nicluding ended, loadedmetadata, timeupdatenơi endedchức năng được gọi khi video kết thúc

$("#myVideo").on("ended", function() {
   //TO DO: Your code goes here...
      alert("Video Finished");
});

$("#myVideo").on("loadedmetadata", function() {
      alert("Video loaded");
  this.currentTime = 50;//50 seconds
   //TO DO: Your code goes here...
});


$("#myVideo").on("timeupdate", function() {
  var cTime=this.currentTime;
  if(cTime>0 && cTime % 2 == 0)//Alerts every 2 minutes once
      alert("Video played "+cTime+" minutes");
   //TO DO: Your code goes here...
  var perc=cTime * 100 / this.duration;
  if(perc % 10 == 0)//Alerts when every 10% watched
      alert("Video played "+ perc +"%");
});
<!DOCTYPE html>
<html>

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>

<body>

  <video id="myVideo" controls="controls">
    <source src="your_video_file.mp4" type="video/mp4">
      <source src="your_video_file.mp4" type="video/ogg">
        Your browser does not support HTML5 video.
  </video>

</body>

</html>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.