Відтворення / пауза 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.