Phát / tạm dừng video HTML 5 bằng JQuery


206

Tôi đang cố gắng kiểm soát video HTML5 bằng JQuery. Tôi có hai clip trong một giao diện theo thẻ, có tổng cộng sáu tab, các tab khác chỉ có hình ảnh. Tôi đang cố gắng làm cho các video clip phát khi tab của chúng được nhấp và sau đó dừng khi bất kỳ video nào khác được nhấp.

Đây phải là một điều đơn giản để làm nhưng tôi dường như không thể làm cho nó hoạt động, mã tôi đang sử dụng để phát video là:

$('#playMovie1').click(function(){
  $('#movie1').play();
      });

Tôi đã đọc được rằng phần tử video cần được hiển thị trong một chức năng để có thể kiểm soát nó nhưng không thể tìm thấy một ví dụ. Tôi có thể làm cho nó hoạt động bằng cách sử dụng JS:

document.getElementById('movie1').play();

Bất cứ lời khuyên nào cũng tuyệt vời cả. Cảm ơn

Câu trả lời:


356

Giải pháp của bạn cho thấy vấn đề ở đây - playkhông phải là hàm jQuery mà là hàm của phần tử DOM. Do đó, bạn cần gọi nó theo phần tử DOM. Bạn đưa ra một ví dụ về cách thực hiện điều này với các hàm DOM gốc. Tương đương với jQuery - nếu bạn muốn làm điều này để phù hợp với lựa chọn jQuery hiện có - sẽ là $('#videoId').get(0).play(). ( getlấy phần tử DOM gốc từ lựa chọn jQuery.)


5
Thật tuyệt, hoạt động hoàn hảo, thực sự cảm ơn. Cũng tốt để hiểu DOM tốt hơn.
Barny83

1
Sử dụng JQuery để kiểm soát video theo cách này dường như gây ra sự cố khi phát lại trên iPhone. Tôi có yếu tố video trong một tab, jquery tiết lộ điều này, nhưng sau đó nhấp vào mũi tên bắt đầu video không bắt đầu clip. Khi tôi xóa dòng $ ('# videoId'). Get (0) .play () không có vấn đề gì. Cách tốt nhất xung quanh này là gì? Tôi đã nghĩ rằng tôi có thể loại bỏ js bằng một tuyên bố chính xác cho iOS - video sẽ không tự động khởi động cho các thiết bị iOS vì vậy sẽ rất vui khi làm điều này - hay có một giải pháp đơn giản hơn? Bất kỳ trợ giúp nhiều đánh giá cao.
Barny83 ngày

Làm cách nào tôi có thể tạm dừng tất cả các yếu tố <video> trên một trang?
prismspecs

5
@russellsayshi - không, điều đó sẽ chỉ phát MỘT video; prismspecs yêu cầu TẤT CẢ các video. Cú pháp đúng: $('video').each(this.play());để chơi tất cả; $('video').each(this.pause());để tạm dừng tất cả. each()là một hàm jQuery, những gì được truyền vào nó là một hàm javascript, được áp dụng cho từng phần tử. Khi mỗi phần tử được xử lý, thisđại diện cho phần tử đó.
ToolmakerSteve

11
Nếu chỉ muốn phần tử đầu tiên, có thể đơn giản hóa bằng cách thay thế .get(0)bằng [0]. Vì vậy, $('video')[0].play();hoặc cho một id cụ thể $('#videoId')[0].play();.
ToolmakerSteve

56

Đây là cách tôi quản lý để làm cho nó hoạt động:

jQuery( document ).ready(function($) {
    $('.myHTMLvideo').click(function() {
        this.paused ? this.play() : this.pause();
    });
});

Tất cả các thẻ HTML5 của tôi đều có lớp 'myHTMLvideo'


7
Lưu ý rằng không cần phải bọc jQuery để bạn có thể tiết kiệm chi phí đó bằng cách thay thế dòng ternary bằng cái này:this.paused ? this.play() : this.pause();
Pete Watts

56

Bạn có thể làm

$('video').trigger('play');
$('video').trigger('pause');

2
Bạn thậm chí có thể chuyển đổi: $ ('video'). Kích hoạt ($ ('video'). Prop ('đã tạm dừng')? 'Play': 'pause');
Darío Pm

21

Tại sao bạn cần sử dụng jQuery? Giải pháp đề xuất của bạn hoạt động và có thể nhanh hơn việc xây dựng một đối tượng jQuery.

document.getElementById('videoId').play();

Hãy xem giải pháp của lonesomeday nếu bạn khăng khăng triển khai jQuery (cũng để được giải thích lý do tại sao bạn không thể gọi playđối tượng jQuery).
sudo làm việc

Tôi đã nghĩ rằng tôi sẽ sử dụng mã trong các jQuery khác và có thể sẽ làm như vậy, nhưng vì hiện tại tôi chỉ sử dụng dòng đó nên tôi đoán nó có thể đã được thực hiện với mã tôi có ... tôi cũng không chắc nếu đó là thực hành tốt để trộn. Cảm ơn vì lời khuyên nào.
Barny83

2
Nếu bạn đã khởi tạo một đối tượng jQuery cho movie1qua $('movie1')cho hành động jQuery khác, sau đó nó tốt; tuy nhiên, nếu bạn đang làm việc đó chỉ ở một nơi này, bạn sẽ thấy mất hiệu suất. Nó có thể không đủ đáng chú ý, nhưng tôi thích tối ưu hóa nhiều.
sudo làm việc

@sudowork - nghiêm túc? Bạn đang thảo luận về việc giảm hiệu suất khi bắt đầu phát video? Nếu thiết bị của bạn đủ nhanh để phát video, thì nó đủ nhanh để thực hiện một loạt các hành động jQuery mà không cần người dùng nhận thấy.
ToolmakerSteve

19

Để tạm dừng nhiều video tôi đã thấy rằng điều này hoạt động độc đáo:

$("video").each(function(){
    $(this).get(0).pause();
});

Điều này có thể được đưa vào một chức năng nhấp chuột khá tiện dụng.


4
Bạn có thể làm tương tự như vậy: $ ("video"). Each (function () {this.pause ()});
Marcel M.

1
$ (this) -> bạn tạo đối tượng jquery từ đối tượng "this". get (0) -> bạn lấy lại đối tượng "this" ban đầu từ đối tượng jquery ... this === $ (this) .get (0)
Blackfire

14

Là một phần mở rộng của câu trả lời của lonesomeday, bạn cũng có thể sử dụng

$('#playMovie1').click(function(){
    $('#movie1')[0].play();
});

Lưu ý rằng không có hàm get () hoặc eq () được gọi. Mảng DOM được sử dụng để gọi hàm play (). Đó là một lối tắt để ghi nhớ.


12

Tôi thích cái này:

$('video').click(function(){
    this[this.paused ? 'play' : 'pause']();
});

Hy vọng nó giúp.


4

Tôi sử dụng FancyBox và jQuery để nhúng video. Cung cấp cho nó một ID.

Có lẽ không phải là giải pháp TỐT NHẤT có thể chuyển đổi chơi / tạm dừng khác nhau - nhưng dễ dàng cho tôi và CÔNG TRÌNH CNTT! :)

bên trong

`

<input type="hidden" id="current_video_playing">

<input type="hidden" id="current_video_status" value="playing">

<video id="video-1523" autobuffer="false" src="movie.mp4"></video>

<script>

// Play Pause with spacebar

$(document).keypress(function(e) { 

    theVideo = document.getElementById('current_video_playing').value

    if (e.which == 32) {

        if (document.getElementById('current_video_status').value == 'playing') {

            document.getElementById(theVideo).pause();

            document.getElementById('current_video_status').value = 'paused'

        } else {

            document.getElementById('current_video_status').value = 'playing'

            document.getElementById(theVideo).play();

        }

    }

});

</script>`

3

Đây là phương pháp dễ dàng chúng ta có thể sử dụng

trên chức năng bấm nút jquery

$("#button").click(function(event){
    $('video').trigger('play');
    $('video').trigger('pause');
}

Cảm ơn


1

Cũng như một ghi chú, đảm bảo bạn kiểm tra xem trình duyệt có hỗ trợ chức năng video hay không, trước khi bạn thử gọi nó:

if($('#movie1')[0].play)
    $('#movie1')[0].play();

Điều đó sẽ ngăn lỗi JavaScript trên các trình duyệt không hỗ trợ thẻ video.


1

Bằng cách sử dụng bộ chọn của JQuery

$("video_selector").trigger('play');  
$("video_selector").trigger('pause');
$("div.video:first").trigger('play');$("div.video:first").trigger('pause');
$("#video_ID").trigger('play');$("#video_ID").trigger('pause');

Bằng Javascript sử dụng ID

video_ID.play();  video_ID.pause();

HOẶC LÀ

document.getElementById('video_ID').play();  document.getElementById('video_ID').pause();

0

dùng cái này.. $('#video1').attr({'autoplay':'true'});


2
"Tôi đang cố gắng làm cho các video clip phát khi tab của chúng được nhấp" - vì vậy cần xử lý sự kiện được kiểm soát.
davidenke

0

Tôi cũng làm cho nó hoạt động như thế này:

$(window).scroll(function() {
    if($(window).scrollTop() > 0)
        document.querySelector('#video').pause();
    else
        document.querySelector('#video').play();
});


0
<video style="min-width: 100%; min-height: 100%; " id="vid" width="auto" height="auto" controls autoplay="true" loop="loop" preload="auto" muted="muted">
<source src="video/sample.mp4" type="video/mp4">
<source src="video/sample.ogg" type="video/ogg">
</video>
<script> 
$(document).ready(function(){
document.getElementById('vid').play(); });
</script> 

Xin thêm một số lời giải thích cho câu trả lời của bạn
Sahil Mittal

0
    enter code here
<form class="md-form" action="#">
  <div class="file-field">
    <div class="btn btn-primary btn-sm float-left">
      <span>Choose files</span>
      <input type="file" multiple>
    </div>
    <div class="file-path-wrapper">
      <input class="file-path validate" type="text" placeholder="Upload one or more files">
    </div>
  </div>
</form>

<video  width="320" height="240" id="keerthan"></video>

<button onclick="playVid()" type="button">Play Video</button>
<button onclick="pauseVid()" type="button">Pause Video</button> 
<script>
    (function localFileVideoPlayer() {

  var playSelectedFile = function (event) {
    var file = this.files[0]
    var type = file.type
    var videoNode = document.querySelector('video')




    var fileURL = URL.createObjectURL(file)
    videoNode.src = fileURL
  }
  var inputNode = document.querySelector('input')
  inputNode.addEventListener('change', playSelectedFile, false)
})()
function playVid() { 
  keerthan.play(); 
} 

function pauseVid() { 
  keerthan.pause(); 
} 

</script>

Xin chào, chào mừng bạn đến với Stack Overflow. Khi trả lời một câu hỏi đã có nhiều câu trả lời, vui lòng đảm bảo thêm một số thông tin chi tiết bổ sung về lý do tại sao câu trả lời bạn cung cấp là thực chất và không chỉ đơn giản lặp lại những gì đã được áp dụng bởi poster gốc. Điều này đặc biệt quan trọng trong các câu trả lời "chỉ mã", chẳng hạn như câu trả lời bạn đã cung cấp.
chb

-1

var vid = document.getElementById("myVideo"); 
function playVid() { 
  vid.play(); 
} 
function pauseVid() { 
  vid.pause(); 
} 
<video id="myVideo" width="320" height="176">
  <source src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" type="video/mp4">
  <source src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.ogg" type="video/ogg">
  Your browser does not support HTML5 video.
</video>
<button onclick="playVid()" type="button">Play Video</button>
<button onclick="pauseVid()" type="button">Pause Video</button><br> 


Giải pháp trong câu trả lời của bạn dường như không hiệu quả
Cray
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.