JQuery를 사용하여 HTML 5 비디오 재생 / 일시 정지


206

JQuery를 사용하여 HTML5 비디오를 제어하려고합니다. 탭 인터페이스에 두 개의 클립이 있고 총 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-아니요, 하나의 비디오 만 재생합니다. prismspecs가 모든 비디오를 요청했습니다. 올바른 구문 : $('video').each(this.play());모두 재생; $('video').each(this.pause());모두 일시 중지합니다. each()jQuery 함수이며, 전달되는 것은 각 요소에 적용되는 자바 스크립트 함수입니다. 각 요소가 처리 될 때 this해당 요소를 나타냅니다.
ToolmakerSteve

11
첫 번째 요소 만 원한다면로 교체 .get(0)하여 단순화 할 수 있습니다 [0]. 그래서 $('video')[0].play();또는 특정 ID에 대한 $('#videoId')[0].play();.
ToolmakerSteve

56

이것이 내가 작동하게하는 방법입니다.

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

모든 HTML5 태그에는 'myHTMLvideo'클래스가 있습니다.


7
jQuery를 래핑 할 필요가 없으므로 3 진 라인을 다음과 같이 대체하여 오버 헤드를 줄일 수 있습니다.this.paused ? this.play() : this.pause();
Pete Watts

56

넌 할 수있어

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

2
$ ( 'video'). trigger ($ ( 'video'). prop ( 'paused')? 'play': 'pause');
Darío Pm

21

왜 jQuery를 사용해야합니까? 제안 된 솔루션이 작동하며 jQuery 객체를 생성하는 것보다 빠릅니다.

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

jQuery 구현을 고집하는 경우 lonesomeday의 솔루션을 확인하십시오 ( playjQuery 객체를 호출 할 수없는 이유에 대한 설명도 참조하십시오).
sudo work

나는 다른 jQuery 내에서 코드를 사용할 것이라고 생각했지만 아마도 그렇게 할 것입니다. 그것이 혼합하는 것이 좋은 습관이라면 어쨌든 조언을 주셔서 감사합니다.
Barny83

2
다른 jQuery 작업 movie1$('movie1')위해 jQuery 객체를 이미 인스턴스화했다면 괜찮습니다. 그러나이 장소에서이 작업을 수행하면 약간의 성능 손실이 발생합니다. 눈에 띄지 않을 수도 있지만 많이 최적화하고 싶습니다.
sudo 작품

@ 스도 워크-진심으로? 비디오 재생을 시작할 때 성능 손실에 대해 이야기하고 있습니까? 장치가 비디오를 재생하기에 충분히 빠르면 사용자에게 알리지 않고 배럴당 jQuery 작업을 수행 할 수있을만큼 빠릅니다.
ToolmakerSteve

19

여러 비디오를 일시 중지 한 결과 이것이 잘 작동한다는 것을 알았습니다.

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

이것은 매우 편리한 클릭 기능에 넣을 수 있습니다.


4
다음과 같이 똑같이 할 수 있습니다 : $ ( "video"). each (function () {this.pause ()});
Marcel M.

1
$ (this)-> "this"객체에서 jquery 객체를 만듭니다. get (0)-> jquery 객체에서 원래 "this"객체를 가져옵니다 ... this === $ (this) .get (0)
Blackfire

14

외로움에 대한 답변의 연장선으로

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

get () 또는 eq () jQuery 함수가 호출되지 않습니다. play () 함수를 호출하는 데 사용되는 DOM의 배열. 명심해야 할 지름길입니다.


12

난이게 좋아:

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

도움이 되길 바랍니다.


4

FancyBox와 jQuery를 사용하여 비디오를 임베드했습니다. ID를 알려주십시오.

아마도 BEST 솔루션이 재생 / 일시 중지를 다르게 토글 할 수는 없지만 나와 나와 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를 사용하는 자바 스크립트로

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

또는

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

0

이것을 사용하십시오 .. $('#video1').attr({'autoplay':'true'});


2
"탭을 클릭 할 때 비디오 클립을 재생하려고합니다"-이벤트 제어 처리가 필요합니다.
davidenke

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> 

귀하의 답변에 대한 설명을 추가하십시오
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>

안녕하세요, 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> 


답변의 해결책이 효과가없는 것 같습니다
Cray
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.