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

Barny83
fuente

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).

solitario
fuente
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');
preguntarse
fuente
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'

Miguel Tavares
fuente
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();
trabajo de sudo
fuente
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.

Josh Holmes
fuente
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.

ozanmuyes
fuente
12

Me gusta este:

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

Espero eso ayude.


fuente
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>`
Alexander W
fuente
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

subindas pm
fuente
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.

Alex W
fuente
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();
Riyaz Hameed
fuente
0

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

Antares500
fuente
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();
});
Jasper Chang
fuente
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> 
Anusuya
fuente
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>
KEERTHAN SHETTY
fuente
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> 

prajeesh webandcrafts
fuente
La solución en su respuesta no parece funcionar
Cray el