Відтворення / пауза HTML 5 відео за допомогою JQuery


206

Я намагаюся контролювати HTML5 відео за допомогою JQuery. У мене два кліпи в інтерфейсі з вкладками, всього шість вкладок, на інших просто зображення. Я намагаюся змусити відтворювати відеокліпи, коли натискається їх вкладка, а потім зупинятись, коли натискають будь-які інші.

Це потрібно зробити простою справою, але я не можу, здається, змусити його працювати, код, який я використовую для відтворення відео:

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

Я прочитав, що відео-елемент потрібно виставити у функції, щоб мати можливість керувати ним, але не можу знайти приклад. Я можу змусити його працювати за допомогою JS:

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

Будь-яка порада була б чудовою. Дякую

Відповіді:


356

Ваше рішення показує проблему тут - playне функція jQuery, а функція елемента DOM. Тому вам потрібно викликати його на елементі DOM. Ви наводите приклад того, як це зробити з нативними функціями DOM. Еквівалент jQuery - якщо ви хочете зробити це, щоб відповідати існуючому вибору jQuery - був би $('#videoId').get(0).play(). ( getотримує нативний елемент DOM з вибору jQuery.)


5
Це чудово, працює прекрасно, справді дякую. Добре також краще зрозуміти DOM.
Barny83

1
Використання JQuery таким чином, щоб керувати відео, може спричинити проблеми з відтворенням на iPhone. У мене є елемент відео на вкладці, jquery виявляє це, але після натискання на стрілку запуску відео кліп не запускається. Коли я видаляю рядок $ ('# videoId'). Get (0) .play (), немає проблем. Що є найкращим способом цього? Я думав, що можу видалити js із умовною заявою для iOS - відео все одно не буде автоматично запущено для пристроїв iOS, тому я би радий це зробити - чи є більш просте рішення? Будь-яка допомога дуже цінується.
Barny83

Як я можу зробити цю паузу всіма елементами <video> на сторінці?
призмиспект

5
@russellsayshi - ні, це буде лише одне відео; Prismspecs запитував ВСІ відео. Правильний синтаксис: $('video').each(this.play());відтворити всіх; $('video').each(this.pause());призупинити всіх. each()є функцією jQuery, що передається в неї - це функція javascript, яка застосовується до кожного елемента. Оскільки кожен елемент обробляє, thisпредставляє цей елемент.
ToolmakerSteve

11
Якщо потрібно лише перший елемент, можна спростити, замінивши .get(0)на [0]. Так $('video')[0].play();або для певного ідентифікатора $('#videoId')[0].play();.
ToolmakerSteve

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'). Тригер ($ ('video'). Prop ('призупинено')? 'Play': 'pause');
Даріо Пм

21

Для чого потрібно використовувати jQuery? Пропоноване рішення працює, і це, мабуть, швидше, ніж побудова об’єкта jQuery.

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

Перегляньте рішення lonesomeday, якщо ви наполягаєте на реалізації jQuery (також для пояснення того, чому ви не можете просто зателефонувати playна об’єкт jQuery).
робота

Я думав, що буду використовувати код в інших jQuery, і, ймовірно, це зроблю, але, як він стоїть, я просто використовую цей рядок, так що, мабуть, це можна було зробити з кодом, який я мав ... також я не був впевнений якщо це було гарною практикою змішувати. Дякую за пораду все одно.
Barny83

2
Якщо ви вже створили об'єкт jQuery для movie1через $('movie1')інші дії jQuery, то це добре; однак, якщо ви робите це лише в одному місці, ви знайдете деяку втрату продуктивності. Це може бути недостатньо помітно, але мені подобається багато оптимізувати.
робота по

@sudowork - серйозно? ви обговорюєте втрату продуктивності під час запуску відтворення відео? Якщо ваш пристрій досить швидкий для відтворення відео, він досить швидкий, щоб виконувати барель jQuery дій, не помічаючи користувача.
ToolmakerSteve

19

Для паузи декількох відео я виявив, що це добре працює:

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

Це може бути вкладено у функцію клацання, яка дуже зручна.


4
Ви можете зробити так само: $ ("video"). Кожен (функція () {this.pause ()});
Марсель М.

1
$ (this) -> ви створюєте об'єкт jquery з "цього" об'єкта. get (0) -> ви отримуєте назад оригінальний "цей" об'єкт від jquery object ... this === $ (this) .get (0)
Blackfire

14

Як продовження відповіді самотнього дня ви також можете використовувати

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

Зауважте, що функція jQuery не називається get () або eq (). Масив DOM, який використовується для виклику функції play (). Це ярлик, про який потрібно пам’ятати.


12

Мені подобається цей:

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

Сподіваюся, це допомагає.


4

Я використовую FancyBox та jQuery, щоб вставити відео. Дайте йому посвідчення особи.

Можливо, не найкраще рішення могло б перемикати гру / паузу по-різному - але це легко для мене і ЦЕ РОБОТИ! :)

В

`

<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');

За допомогою JavaScript за допомогою 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> 

Додайте пояснення до своєї відповіді
Сахіл Міттал

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. Відповідаючи на запитання, на яке вже є багато відповідей, будь ласка, не забудьте додати трохи додаткового розуміння того, чому відповідь, яку ви надаєте, є суттєвою, а не просто повторює те, що вже було перевірено оригінальним плакатом. Це особливо важливо у відповідях "лише для коду", таких як той, який ви надали.
чб

-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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.