JQueryを使用してHTML 5ビデオを再生/一時停止する


206

JQueryを使用してHTML5ビデオを制御しようとしています。タブ付きインターフェイスに2つのクリップがあり、合計6つのタブがあり、他のタブには画像のみがあります。タブをクリックしたときにビデオクリップを再生し、他のいずれかをクリックしたときに停止するようにしています。

これは簡単なことですが、うまく機能していないようです。ビデオの再生に使用しているコードは次のとおりです。

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

私は、ビデオ要素を制御できるようにするためにビデオ要素を公開する必要があることを読みましたが、例を見つけることができません。私はそれをJSを使って機能させることができます:

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

どんなアドバイスでも素晴らしいでしょう。ありがとう

回答:


356

あなたの解決策はここで問題を示してplayいます-jQuery関数ではなくDOM要素の関数です。したがって、DOM要素で呼び出す必要があります。ネイティブDOM関数でこれを行う方法の例を示します。相当するjQuery-これを既存のjQuery選択に合わせるためにこれを実行したい場合は-になります$('#videoId').get(0).play()。(getjQueryの選択からネイティブDOM要素を取得します。)


5
それは素晴らしいです、完璧に動作します、本当にありがとう。DOMをよりよく理解するのにも良い。
Barny83

1
この方法でJQueryを使用してビデオを制御すると、iPhoneでの再生に問題が発生するようです。タブにビデオ要素がありますが、jqueryはこれを明らかにしますが、ビデオ開始矢印をクリックしてもクリップは開始されません。$( '#videoId')。get(0).play()行を削除しても問題はありません。これを回避する最良の方法は何ですか?私はiOSの条件付きステートメントでjsを削除できると考えていました-とにかくビデオはiOSデバイスで自動開始されないのでこれを実行して喜んでいます-またはより簡単な解決策はありますか?どんな助けも大歓迎です。
Barny83

これでページ上のすべての<video>要素を一時停止するにはどうすればよいですか?
prismspecs

5
@russellsayshi-いいえ、動画は1つしか再生されません。prismspecsはすべてのビデオを求めました。正しい構文: $('video').each(this.play());すべてを再生します。$('video').each(this.pause());すべてを一時停止します。each()jQuery関数です。それに渡されるのは、各要素に適用されるJavaScript関数です。各要素が処理されるときに、thisその要素を表します。
ToolmakerSteve 2014

11
最初の要素だけをしたい場合は、交換することによって簡素化することができます.get(0)[0]。つまり$('video')[0].play();、特定のidの場合$('#videoId')[0].play();です。
ToolmakerSteve 2014

56

これは私がそれをうまく機能させる方法でした:

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

すべてのHTML5タグにクラス 'myHTMLvideo'があります


7
あなたはこれで三行を置き換えることによって、そのオーバーヘッドを節約することができるようにjQueryでラップする必要はありませんのでご注意:this.paused ? this.play() : this.pause();
ピート・ワッツ

56

できるよ

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

2
次のように切り替えることもできます:$( 'video')。trigger($( 'video')。prop( 'paused')? 'play': 'pause');
ダリオPm

21

なぜjQueryを使用する必要があるのですか?提案されたソリューションは機能し、おそらくjQueryオブジェクトを構築するよりも高速です。

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

jQueryの実装を主張する場合は、lonesomedayのソリューションをチェックしてください(playjQueryオブジェクトを呼び出せない理由の説明も)。
sudoは、2011

他のjQuery内でコードを使用することを考えていましたが、おそらくそうするでしょうが、現状ではその行を使用しているだけなので、持っていたコードで実行できたと思います...また、確信が持てませんでした混ぜるのが良い習慣だったら。とにかくアドバイスをありがとう。
Barny83

2
あなたは既にのためのjQueryオブジェクトをインスタンス化した場合movie1により$('movie1')他のjQueryの行動、それの罰金。ただし、この1か所だけで実行すると、パフォーマンスが低下する可能性があります。目立たないかもしれませんが、たくさん最適化したいです。
sudo

@sudowork-マジ?ビデオの再生を開始するときのパフォーマンスの低下について話し合っていますか?デバイスがビデオを再生するのに十分な速さであれば、ユーザーに気付かれずにjQueryアクションのバレルを実行するのに十分な速さです。
ToolmakerSteve 2014

19

複数のビデオを一時停止するために、これはうまく機能することがわかりました:

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

これは非常に便利なクリック機能に入れることができます。


4
次のように同じことを行うことができます:$( "video")。each(function(){this.pause()});
Marcel M.

1
$(this)-> "this"オブジェクトからjqueryオブジェクトを作成します。(0)を取得- >あなたが取り戻す...これ=== $(この)に.get(0)jQueryオブジェクトから"この"オブジェクトの元
Blackfire

14

lonesomedayの答えの延長として、あなたも使うことができます

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

呼び出されるget()またはeq()jQuery関数がないことに注意してください。play()関数の呼び出しに使用されるDOMの配列。これは覚えておくべき近道です。


12

私はこれが好きです:

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

それが役に立てば幸い。


4

私はビデオを埋め込むためにFancyBoxとjQueryを使用しています。IDを付けます。

おそらく、最良のソリューションでは、再生/一時停止を別の方法で切り替えることができませんでしたが、私とITの作業は簡単です!:)

の中に

`

<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

これは私たちが使用できる簡単な方法です

jqueryボタンクリック関数

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

ありがとう


1

注として、呼び出す前に、ブラウザがビデオ機能をサポートしているかどうかを確認してください。

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

これにより、動画タグをサポートしていないブラウザでのJavaScriptエラーが防止されます。


1

セレクターを使用した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');

IDを使用するJavaScript

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

または

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

0

これを使って.. $('#video1').attr({'autoplay':'true'});


2
「タブがクリックされたときにビデオクリップを再生しようとしています」-したがって、イベント制御による処理が必要です。
davidenke 2015

0

私もそれを次のように機能させました:

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

Plはあなたの答えにいくつかの説明を追加します
Sahil Mittal 2017

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>

こんにちは、Stack Overflowへようこそ。すでに多くの回答が含まれている質問に回答する場合は、提供する回答が実質的であり、元の投稿者がすでに精査した内容を単にエコーするのではなく、なぜ追加の洞察を追加してください。これは、提供したような「コードのみ」の回答では特に重要です。
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> 


あなたの答えの解決策は機能していないようです
クレイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.