检测是否正在播放HTML5视频元素

时间:2011-12-22 03:14:15

标签: javascript html5 video javascript-events html5-video

我已经查看了几个问题,以确定HTML5元素是否正在播放,但无法找到答案。我查看了W3文档,它有一个名为“播放”的事件,但我似乎无法让它工作。

这是我目前的代码:

var stream = document.getElementsByTagName('video');

function pauseStream() {
  if (stream.playing) {
    for (var i = 0; i < stream.length; i++) {
      stream[i].pause();
      $("body > header").addClass("paused_note");
      $(".paused_note").text("Stream Paused");
      $('.paused_note').css("opacity", "1");
    }
  }
}

17 个答案:

答案 0 :(得分:96)

在我看来,您可以查看!stream.paused

答案 1 :(得分:23)

我在How to tell if a <video> element is currently playing?的回答:
MediaElement没有告诉其是否正在播放的属性。但是你可以为它定义一个自定义属性。

Object.defineProperty(HTMLMediaElement.prototype, 'playing', {
    get: function(){
        return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2);
    }
})

现在,您可以在videoaudio这样的元素上使用它:

if(document.querySelector('video').playing){
    // Do anything you want to
}

答案 2 :(得分:20)

注意:此答案于2011年提供。请在继续之前查看有关HTML5视频的更新文档。

如果您只是想知道视频是否已暂停,请使用标记stream.paused

获取播放状态的视频元素没有属性。但是有一个“玩”的事件会在它开始播放时被触发。事件“已结束”在停止播放时触发。

所以解决方案是

  1. 对一个变量 videoStatus
  2. 进行decalre
  3. 为不同的视频事件添加事件处理程序
  4. 使用事件处理程序更新 videoStatus
  5. 使用 videoStatus 来识别视频的状态
  6. 此页面可让您更好地了解视频事件。在此页面上播放视频,了解事件是如何触发的 http://www.w3.org/2010/05/video/mediaevents.html

答案 3 :(得分:14)

jQuery(document).on('click', 'video', function(){
        if (this.paused) {
            this.play();
        } else {
            this.pause();
        }
});

答案 4 :(得分:11)

将eventlisteners添加到您的媒体元素。可触发的可能事件包括:Audio and video media events

<!DOCTYPE html> 
<html> 
<head>  
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Html5 media events</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head> 
<body >
    <div id="output"></div>
    <video id="myVideo" width="320" height="176" controls autoplay>
        <source src="http://www.w3schools.com/tags/mov_bbb.mp4" type="video/mp4">
        <source src="http://www.w3schools.com/tags/mov_bbb.ogg" type="video/ogg">
    </video>
    <script>
        var media = document.getElementById('myVideo');

        // Playing event
        media.addEventListener("playing", function() {
            $("#output").html("Playing event triggered");
        });
   
        // Pause event
        media.addEventListener("pause", function() { 
            $("#output").html("Pause event triggered"); 
        });

        // Seeking event
        media.addEventListener("seeking", function() { 
            $("#output").html("Seeking event triggered"); 
        });

        // Volume changed event
        media.addEventListener("volumechange", function(e) { 
            $("#output").html("Volumechange event triggered"); 
        });

    </script>   
</body> 
</html>

答案 5 :(得分:3)

我遇到了类似的问题,在之后已经开始播放之前我无法向播放器添加事件监听器,所以@ Diode的方法很遗憾不起作用。我的解决方案是检查玩家是否暂停&#34;属性设置为true或不。这是有效的,因为&#34;暂停&#34;甚至在视频开始播放之前和结束之后设置为true,而不仅仅是当用户点击了#34;暂停&#34;。

答案 6 :(得分:2)

以下是我们在http://www.develop.com/webcasts使用的内容,可防止人们在播放或暂停视频时意外离开网页。

$(document).ready(function() {

    var video = $("video#webcast_video");
    if (video.length <= 0) {
        return;
    }

    window.onbeforeunload = function () {
        var htmlVideo = video[0];
        if (htmlVideo.currentTime < 0.01 || htmlVideo.ended) {
            return null;
        }

        return "Leaving this page will stop your video.";
    };
}

答案 7 :(得分:1)

一个例子

&#13;
&#13;
var audio = new Audio('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3')

if (audio.paused) {
  audio.play()
} else {
  audio.pause()
}
&#13;
&#13;
&#13;

答案 8 :(得分:1)

function playPauseThisVideo(this_video_id){

  var this_video = document.getElementById(this_video_id);

  if(this_video.paused){

    console.log("VIDEO IS PAUSED");

  } else {

    console.log("VIDEO IS PLAYING");

  }

}

答案 9 :(得分:1)

您可以使用“播放”事件侦听器 =>

const video = document.querySelector('#myVideo');

video.addEventListener("playing", function () {
     // Write Your Code
});

答案 10 :(得分:0)

这是我的代码 - 通过调用视频播放或暂停功能play()并更改按钮图像。

通过调用功能volume()打开/关闭音量,按钮图像也会改变。

function play() { 
  var video = document.getElementById('slidevideo'); 
  if (video.paused) {
    video.play()
    play_img.src = 'img/pause.png'; 
  }
  else {
    video.pause()
    play_img.src = 'img/play.png';
  }
}

function volume() { 
  var video = document.getElementById('slidevideo');
  var img = document.getElementById('volume_img');
  if (video.volume > 0) {
    video.volume = 0
    volume_img.src = 'img/volume_off.png';  
  }
  else {
    video.volume = 1
    volume_img.src = 'img/volume_on.png';
  }
}

答案 11 :(得分:0)

我只是看了@tracevipin添加的链接http://www.w3.org/2010/05/video/mediaevents.html),我看到一个名为&#34;暂停&#34;的财产。

我已经测试过了,它运行得很好。

答案 12 :(得分:0)

我只是简单地使用html视频标记的onpause和onplay属性。创建一些javascript函数来切换全局变量,以便页面知道其他功能的视频状态。

以下Javascript:

   // onPause function
   function videoPause() {
      videoPlaying = 0;
   }

   // onPause function
   function videoPlay() {
      videoPlaying = 1;
   }

Html视频标记:

<video id="mainVideo" width="660" controls onplay="videoPlay();" onpause="videoPause();" >
                             <source src="video/myvideo.mp4" type="video/mp4">

                            </video>

你可以使用onclick javascript做一些事情,具体取决于视频播放中的状态变量。

希望这会有所帮助...

答案 13 :(得分:0)

我只是手动将其添加到媒体对象

let media = document.querySelector('.my-video');
media.isplaying = false;

...

if(media.isplaying) //do something

然后在我点击播放或暂停时切换它。

答案 14 :(得分:0)

我的要求是单击视频,如果正在播放则暂停,或者如果已暂停则播放。这对我有用。

<video id="myVideo" #elem width="320" height="176" autoplay (click)="playIfPaused(elem)">
  <source src="your source" type="video/mp4">
</video>

app.component.ts

内部
playIfPaused(file){
    file.paused ? file.play(): file.pause();
}

答案 15 :(得分:0)

var video_switch  = 0;

function play() {

    var media = document.getElementById('video');

    if (video_switch == 0)
    {
        media.play();
        video_switch = 1;
    }
    else if (video_switch == 1)
    {
        media.pause();
        video_switch = 0;
    }
}

答案 16 :(得分:-1)

播放视频时的一个示例

  let v = document.getElementById('video-plan');
  v.onplay = function() {
      console.log('Start video')
  };