ตรวจสอบเมื่อวิดีโอ HTML5 เสร็จสิ้น


252

คุณตรวจพบได้อย่างไรเมื่อ<video>องค์ประกอบHTML5 เล่นเสร็จแล้ว?


เอกสารที่มีประโยชน์มากพร้อมหน้าทดสอบจาก Apple: developer.apple.com/library/safari/#samplecode/…ทั้งหมดที่คุณอยากรู้เกี่ยวกับเหตุการณ์วิดีโอ HTML5!
viebel

คำตอบ:


311

คุณสามารถเพิ่มผู้ฟังเหตุการณ์ด้วย 'สิ้นสุด' เป็นพารามิเตอร์แรก

แบบนี้ :

<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
นี่เป็นวิดีโอเพียงเหตุการณ์ "จบ" ซึ่งใช้ได้กับอินเทอร์เน็ตทั้งหมด ไชโย!
Isaac

10
ทำไมคุณถึงตรวจสอบว่ามีอีเมลอยู่หรือไม่
อัลลัน Stepps

3
@ AllanStepps จากสิ่งที่ฉันสามารถรวบรวมได้if(!e) { e = window.event; }ข้อความที่คำตอบแรกรวมอยู่นี้คือรหัสเฉพาะ IE สำหรับรับเหตุการณ์ล่าสุดจากภายในตัวจัดการเหตุการณ์ที่แนบมากับattachEventIE เวอร์ชันเริ่มต้น เนื่องจากในกรณีนี้ตัวจัดการจะถูกแนบกับaddEventListener(และ IE รุ่นแรกนั้นไม่เกี่ยวข้องกับผู้ที่เกี่ยวข้องกับวิดีโอ HTML5) มันไม่จำเป็นอย่างสมบูรณ์และฉันได้ลบมันออกไปแล้ว
Mark Amery

3
อีกประเด็นหนึ่งที่ควรทราบเมื่อใช้วิธีนี้ Safari บน El Capitan verson ของ OS X (10.11) ไม่ได้ตรวจจับเหตุการณ์ 'สิ้นสุด' ดังนั้นในกรณีนั้นฉันต้องใช้เหตุการณ์ 'timeupdate' จากนั้นตรวจสอบว่าเมื่อใดเวลานี้ในปัจจุบันเท่ากับ 0 อีกครั้ง
บแคม

2
นอกจากนี้อย่าลืมตั้งค่าการวนซ้ำเป็นเท็จมิฉะนั้นเหตุการณ์ที่สิ้นสุดจะไม่ถูกเรียกใช้
Israel Morales

134

ดูทุกสิ่งที่คุณต้องรู้เกี่ยวกับโพสต์วิดีโอและเสียง HTML5ที่ไซต์ Opera Dev ในส่วน "ฉันต้องการหมุนการควบคุมของฉันเอง"

นี่คือส่วนที่เกี่ยวข้อง:

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

จากนั้นคุณสามารถใช้:

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

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

onendedเป็นเหตุการณ์มาตรฐาน HTML5 ในทุกองค์ประกอบสื่อดูเอกสารประกอบองค์ประกอบสื่อ HTML5 (วิดีโอ / เสียง)


2
ฉันพยายามจับ "จบ" เหตุการณ์แบบเดียวกับที่คุณนำเสนอ แต่เหตุการณ์นี้ไม่เริ่มทำงาน ฉันอยู่ภายใต้ Safari 5.0.4 (6533.20.27)
Antonal

@tontonal: ฉันจะโพสต์คำถามนี้หากคุณมีปัญหา
อลาสแตร์ทุ่ม

@ ทั้งหมด: คุณสามารถทำได้เช่นนี้เช่นกัน <video class = "video_player" id = "video" poster = "images / video-pc.jpg" tabindex = "0" height = "100%" onended = "myHandler ()">
VendettaDroid

5
@AlastairPitts สิ่งนี้ไม่ถูกต้องบน Chrome คำตอบของ Darkroro เป็นวิธีเดียวที่ฉันจะได้ทำงานกับ Chrome สิ่งนี้ยังคงใช้ได้กับ Firefox
Jeff

ลิงก์ที่ตายแล้ว w3schools.com/tags/ref_eventattributes.asp => กิจกรรมสื่อ
Aurelien

36

jQuery

$("#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>

ประเภทเหตุการณ์HTML อ้างอิงเสียงและวิดีโอ DOM


11
-1 .on()เป็นที่ต้องการมา.bind()ตั้งแต่ jQuery 1.7 ซึ่งเผยแพร่ในปี 2011 นอกจากนี้โปรดจัดรูปแบบโค้ดของคุณอย่างถูกต้อง
Mark Amery

4

นี่เป็นตัวอย่างที่สมบูรณ์ฉันหวังว่ามันจะช่วย =)

<!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

นี่เป็นวิธีการง่ายๆที่จะเปิดใช้งานเมื่อวิดีโอจบ

<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> 

ในบรรทัด 'EventListener' จะแทนที่คำว่า 'ลงท้าย' ด้วย 'หยุดชั่วคราว' หรือ 'เล่น' เพื่อบันทึกเหตุการณ์เหล่านั้นเช่นกัน


คุณมีข้อผิดพลาดทางไวยากรณ์ในรหัส JS นี้ ไม่มี) หลังจากรายการอาร์กิวเมนต์
frzsombor

1

คุณสามารถเพิ่มลงonended="myFunction()"ในแท็กวิดีโอของคุณ

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

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

0

คุณสามารถเพิ่มฟังเหตุการณ์วิดีโอทั้งหมดended, loadedmetadata, timeupdateโดยไม่ให้endedฟังก์ชั่นถูกเรียกเมื่อสิ้นสุดวิดีโอ

$("#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>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.