Reproduzca / pause video HTML 5 usando JQuery


206

Estoy tratando de controlar videos HTML5 usando JQuery. Tengo dos clips en una interfaz con pestañas, hay seis pestañas en total, los otros solo tienen imágenes. Estoy tratando de hacer que los videoclips se reproduzcan cuando se hace clic en su pestaña y luego se detiene cuando se hace clic en cualquiera de los otros.

Esto debe ser algo simple de hacer, pero parece que no puedo hacer que funcione, el código que estoy usando para reproducir el video es:

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

He leído que el elemento de video debe exponerse en una función para poder controlarlo, pero no puedo encontrar un ejemplo. Puedo hacer que funcione usando JS:

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

Cualquier consejo sería genial. Gracias

Respuestas:


357

Su solución muestra el problema aquí: playno es una función jQuery sino una función del elemento DOM. Por lo tanto, debe invocarlo sobre el elemento DOM. Usted da un ejemplo de cómo hacer esto con las funciones DOM nativas. El equivalente de jQuery, si desea hacer esto para encajar con una selección de jQuery existente, sería $('#videoId').get(0).play(). ( getobtiene el elemento DOM nativo de la selección jQuery).


55
Eso es genial, funciona perfectamente, gracias de hecho. Es bueno entender el DOM mejor también.
Barny83

1
Usar JQuery para controlar el video de esta manera parece causar problemas con la reproducción en el iPhone. Tengo el elemento de video en una pestaña, jquery lo revela, pero luego al hacer clic en la flecha de inicio del video no se inicia el clip. Cuando elimino la línea $ ('# videoId'). Get (0) .play () no hay problema. ¿Cuál es la mejor manera de evitar esto? Estaba pensando que podría eliminar el js con una declaración condicional para iOS: el video no se iniciará automáticamente para dispositivos iOS de todos modos, así que estaría encantado de hacer esto, ¿o hay una solución más simple? Cualquier ayuda muy apreciada.
Barny83

¿Cómo puedo hacer que esta pausa todos los elementos <video> en una página?
prismspecs

55
@russellsayshi: no, eso solo reproducirá UN video; prismspecs solicitó TODOS los videos. Sintaxis correcta: $('video').each(this.play());para jugar todo; $('video').each(this.pause());Pausar todo. each()es una función jQuery, lo que se le pasa es una función de JavaScript, que se aplica a cada elemento. A medida que se maneja cada elemento, thisrepresenta ese elemento.
ToolmakerSteve

11
Si solo quiere el primer elemento, puede simplificarlo reemplazando .get(0)con [0]. Entonces $('video')[0].play();o para una identificación específica $('#videoId')[0].play();.
ToolmakerSteve

57

Tu puedes hacer

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

2
Incluso puede alternar: $ ('video'). Trigger ($ ('video'). Prop ('paused')? 'Play': 'pause');
Darío Pm

56

Así es como logré hacerlo funcionar:

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

Todas mis etiquetas HTML5 tienen la clase 'myHTMLvideo'


77
Tenga en cuenta que no es necesario envolver en jQuery para que pueda guardar esa sobrecarga reemplazando la línea ternaria con esto:this.paused ? this.play() : this.pause();
Pete Watts

21

¿Por qué necesitas usar jQuery? Su solución propuesta funciona, y probablemente sea más rápido que construir un objeto jQuery.

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

Consulte la solución de lonesomeday si insiste en una implementación de jQuery (también para obtener una explicación de por qué no puede invocar playun objeto jQuery).
sudo trabajo

Estaba pensando que usaría el código dentro de otro jQuery, y probablemente lo haré, pero tal como está, solo estoy usando esa línea, así que supongo que podría haberse hecho con el código que tenía ... también no estaba seguro si esa era una buena práctica para mezclar. Gracias por el consejo de todos modos.
Barny83

2
Si ya haya creado una instancia de un objeto jQuery para movie1a través $('movie1')de otras acciones jQuery, entonces está bien; sin embargo, si lo hace solo en este lugar, encontrará alguna pérdida de rendimiento. Puede que no sea lo suficientemente notable, pero me gusta optimizar mucho.
sudo trabajo

@sudowork - ¿en serio? ¿Está discutiendo la pérdida de rendimiento cuando comienza a reproducir un video? Si su dispositivo es lo suficientemente rápido como para reproducir video, es lo suficientemente rápido como para hacer un barril de acciones jQuery sin que el usuario lo note.
ToolmakerSteve

19

Para pausar varios videos, descubrí que esto funciona bien:

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

Esto se puede poner en una función de clic que es bastante útil.


44
Puede hacer lo mismo así: $ ("video"). Each (function () {this.pause ()});
Marcel M.

1
$ (this) -> crea un objeto jquery a partir de "este" objeto. get (0) -> obtiene el objeto original "this" del objeto jquery ... this === $ (this) .get (0)
Blackfire

14

Como una extensión de la respuesta de lonesomeday, también puedes usar

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

Observe que no se llama a la función get () o eq () jQuery. La matriz de DOM utilizada para llamar a la función play (). Es un atajo a tener en cuenta.


12

Me gusta este:

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

Espero eso ayude.


4

Uso FancyBox y jQuery para incrustar un video. Dale una identificación.

Quizás la MEJOR solución no podría alternar entre reproducción / pausa de manera diferente, ¡pero es fácil para mí y FUNCIONA! :)

En el

``

<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

Estos son los métodos fáciles que podemos usar.

en la función de clic del botón jQuery

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

Gracias


1

Solo como nota, asegúrese de verificar si el navegador admite la función de video, antes de intentar invocarlo:

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

Eso evitará errores de JavaScript en los navegadores que no admiten la etiqueta de video.


1

Por JQuery usando selectores

$("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');

Por Javascript usando ID

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

O

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

0

utilizar este.. $('#video1').attr({'autoplay':'true'});


2
"Estoy tratando de hacer que los videoclips se reproduzcan cuando se hace clic en su pestaña", por lo que se necesita un manejo controlado por eventos.
davidenke

0

También lo hice funcionar así:

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

Agregue alguna explicación a su respuesta
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>

Hola, bienvenido a Stack Overflow. Cuando responda una pregunta que ya tiene muchas respuestas, asegúrese de agregar una idea adicional de por qué la respuesta que está brindando es sustantiva y no simplemente haciendo eco de lo que ya ha sido examinado por el póster original. Esto es especialmente importante en las respuestas de "solo código", como la que ha proporcionado.
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> 


La solución en su respuesta no parece funcionar
Cray el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.