JQuery kullanarak HTML 5 videosunu oynatma / duraklatma


206

JQuery kullanarak HTML5 videoları kontrol etmeye çalışıyorum. Sekmeli arayüzde iki klipim var, toplamda altı sekme var, diğerleri sadece resimlere sahip. Sekmelerini tıklatıldığında video klipleri oynatmaya çalışıyorum ve diğerlerinden tıklandığında duruyorum.

Bu yapmak için basit bir şey olmalı ama işe almak için sabırsızlanıyorum, videoyu oynatmak için kullanıyorum kodu:

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

Video elemanının kontrol edebilmek için bir fonksiyonda gösterilmesi gerektiğini okudum ama bir örnek bulamıyorum. JS kullanarak çalışmasını mümkün:

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

Herhangi bir tavsiye harika olurdu. Teşekkürler

Yanıtlar:


356

Çözümünüz sorunu burada göstermektedir - playbir jQuery işlevi değil, DOM öğesinin bir işlevidir. Bu nedenle bunu DOM öğesine çağırmanız gerekir. Bunun yerel DOM işlevleriyle nasıl yapılacağına dair bir örnek verirsiniz. JQuery eşdeğeri - bunu mevcut bir jQuery seçimine uyacak şekilde yapmak isterseniz - olurdu $('#videoId').get(0).play(). ( getyerel DOM öğesini jQuery seçiminden alır.)


5
Bu harika, mükemmel çalışıyor, teşekkürler. DOM'u daha iyi anlamak güzel.
Barny83

1
Videoyu bu şekilde kontrol etmek için JQuery kullanmak iPhone'da oynatmayla ilgili sorunlara neden oluyor gibi görünüyor. Bir sekmede video öğesi var, jquery bunu ortaya koyuyor, ancak video başlangıç ​​okuna tıklamak klibi başlatmıyor. $ ('# VideoId'). Get (0) .play () satırını kaldırdığımda sorun yok. Bunun en iyi yolu nedir? İOS için koşullu bir ifadeyle js'yi kaldırabileceğimi düşünüyordum - video zaten iOS cihazları için otomatik olarak başlatılmayacak, bu yüzden bunu yapmaktan memnuniyet duyarım - ya da daha basit bir çözüm var mı? Herhangi bir yardım çok takdir etmek.
Barny83

Bunun bir sayfadaki tüm <video> öğelerini duraklatmasını nasıl sağlayabilirim ?
prismspecs

5
@russellsayshi - hayır, bu yalnızca BİR video oynatacak; prismspecs TÜM videolar istedi. Doğru sözdizimi: $('video').each(this.play());tümünü oynatmak için; $('video').each(this.pause());hepsini duraklatmak için. each()jQuery işlevidir, içine geçirilen her öğeye uygulanan bir javascript işlevidir. Her eleman ele alındıkça, thiso elemanı temsil eder.
ToolmakerSteve

11
Sadece ilk elemanı istiyorsanız, değiştirerek kolaylaştırabilirsiniz .get(0)ile [0]. Yani $('video')[0].play();ya da belirli bir kimliği için $('#videoId')[0].play();.
ToolmakerSteve

56

Ben iş bu şekilde başardı:

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

Tüm HTML5 etiketlerim 'myHTMLvideo' sınıfına sahip


7
Üçlü çizgiyi bununla değiştirerek bu ek yükü kurtarabilmeniz için jQuery'ye sarılmanıza gerek olmadığını unutmayın:this.paused ? this.play() : this.pause();
Pete Watts

56

Yapabilirsin

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

2
Hatta geçiş yapabilirsiniz: $ ('video'). Trigger ($ ('video'). Prop ('paused')? 'Play': 'pause');
Darío Pm

21

Neden jQuery kullanmanız gerekiyor? Önerilen çözüm işe yarar ve muhtemelen bir jQuery nesnesi oluşturmaktan daha hızlıdır.

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

Bir jQuery uygulamasında ısrar ederseniz, yalnız çözümünü kontrol edin (ayrıca playbir jQuery nesnesini neden çağıramayacağınıza dair bir açıklama için ).
sudo çalışma

Ben diğer jQuery içinde kod kullanmak olacağını düşünüyordum, ve muhtemelen bunu yapacak, ama duruyor gibi ben sadece bu satırı kullanıyorum sanırım ben vardı kod ile yapılmış olabilir ... ayrıca emin değildi karıştırmak için iyi bir uygulama olsaydı. Yine de tavsiye için teşekkürler.
Barny83

2
Zaten bir jQuery nesnesi örneği ettiyseniz movie1aracılığıyla $('movie1')diğer jQuery eylemler, daha sonra 's cezayı; ancak, bunu sadece bu yerde yapıyorsanız, performans kaybı bulacaksınız. Yeterince fark edilmeyebilir, ancak çok optimize etmeyi seviyorum.
sudo çalışmaları

@sudowork - cidden mi? video oynatmaya başlarken performans kaybını mı tartışıyorsunuz? Cihazınız videoyu oynatacak kadar hızlıysa, kullanıcının farkına varmadan bir varil jQuery eylemi yapmak için yeterince hızlıdır.
ToolmakerSteve

19

Birden fazla videoyu duraklatmak için bunun iyi çalıştığını gördüm:

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

Bu, oldukça kullanışlı bir tıklama işlevine yerleştirilebilir.


4
Aynısını şu şekilde yapabilirsiniz: $ ("video"). Each (function () {this.pause ()});
Marcel

1
$ (this) -> "this" nesnesinden jquery nesnesi oluşturursunuz. get (0) -> jquery nesnesinden orijinal "this" nesnesini geri alırsınız ... this === $ (this) .get (0)
.get

14

Yalnız günün cevabının bir uzantısı olarak,

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

Çağrılan get () veya eq () jQuery işlevi olmadığına dikkat edin. DOM'nin play () işlevini çağırmak için kullanılan dizisi. Akılda tutulması gereken bir kısayol.


12

Bunu beğendim:

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

Umarım yardımcı olur.


4

Bir videoyu süslemek için FancyBox ve jQuery kullanıyorum. Ona bir kimlik verin.

Belki de EN İYİ çözüm oynatmayı / duraklatmayı farklı bir şekilde değiştiremezdi - ama benim ve BT İŞLERİ için kolay! :)

İçinde

'

<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

Kullanabileceğimiz kolay yöntemler bu

jquery düğmesi tıklama işlevi

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

Teşekkürler


1

Not olarak, çağırmaya çalışmadan önce tarayıcının video işlevini destekleyip desteklemediğini kontrol ettiğinizden emin olun:

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

Bu, video etiketini desteklemeyen tarayıcılarda JavaScript hatalarını önler.


1

Seçicileri kullanarak JQuery tarafından

$("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 kullanarak Javascript tarafından

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

VEYA

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

0

bunu kullan.. $('#video1').attr({'autoplay':'true'});


2
"Sekmeleri tıklatıldığında video klipleri oynatmaya çalışıyorum" - böylece olay kontrollü bir işleme ihtiyaç duyulmaktadır.
davidenke

0

Ayrıca şu şekilde çalışmasını sağladım:

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

Cevabınıza biraz açıklama ekleyin
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>

Merhaba, Stack Overflow'a hoş geldiniz. Zaten birçok cevabı olan bir soruyu cevaplarken, lütfen sağladığınız yanıtın neden önemli olduğuna ve yalnızca orijinal poster tarafından incelenmiş olanları yankılamadığına dair bazı ek bilgiler eklediğinizden emin olun. Bu özellikle sağladığınız gibi "yalnızca kod" yanıtlarında önemlidir.
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> 


Cevabınızdaki çözüm çalışmıyor gibi görünüyor
Cray
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.