Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将加载程序图像添加到HTML5视频?_Javascript_Jquery_Html_Video - Fatal编程技术网

Javascript 如何将加载程序图像添加到HTML5视频?

Javascript 如何将加载程序图像添加到HTML5视频?,javascript,jquery,html,video,Javascript,Jquery,Html,Video,除了海报图像,我希望在下载视频时显示加载器图像(动画gif)。这是怎么可能的?您可以将侦听器附加到视频的加载开始事件,并使用它在视频元素顶部覆盖动画GIF,然后在触发加载数据事件后隐藏加载覆盖。请参阅,以获取可连接到的事件列表 它们还有一个。这相当复杂,您必须收听各种视频事件才能正确显示/隐藏和更新加载程序图像的宽度。这些事件包括(但不限于):loadstart,progress,loadeddata,等待,查找,查找。您可以使用某个开源播放器(例如)或下载其源代码以进一步检查。一种便宜的方法是

除了海报图像,我希望在下载视频时显示加载器图像(动画gif)。这是怎么可能的?

您可以将侦听器附加到视频的
加载开始
事件,并使用它在视频元素顶部覆盖动画GIF,然后在触发
加载数据
事件后隐藏加载覆盖。请参阅,以获取可连接到的事件列表


它们还有一个。

这相当复杂,您必须收听各种视频事件才能正确显示/隐藏和更新加载程序图像的宽度。这些事件包括(但不限于):
loadstart
progress
loadeddata
等待
查找
查找
。您可以使用某个开源播放器(例如)或下载其源代码以进一步检查。

一种便宜的方法是在
海报
属性中使用动画GIF,该属性将在视频开始播放时被替换。例如:

<video poster="loading.gif" preload="auto" controls autoplay>
   <source type="video/mp4" src="video.mp4"/>
</video>

我花了很长时间才真正弄明白如何做到这一点,但我将在这里分享,因为我终于找到了一种方法!想想看,这很可笑,因为加载是所有视频都必须做的事情。你可能认为他们在创建html5视频标准时会考虑到这一点

我原本认为应该有效(但不会)的理论是这样的

  • 通过js和css加载时将加载bg图像添加到视频
  • 准备好游戏时移除
  • 很简单,对吧?问题是我无法在设置源元素或设置video.src属性时显示背景图像。天才/幸运的最后一击是(通过实验)发现,如果海报设置为某个位置,背景图像不会消失。我使用的是假海报图像,但我想它也适用于透明的1x1图像(但为什么要担心有另一个图像)。因此,这可能是一种黑客行为,但它是有效的,我不必在代码中添加额外的标记,这意味着它将在我所有使用html5视频的项目中工作

    HTML

    JS


    这对我来说非常有效,但只在mac上的chrome和safari中进行了测试。如果有人发现错误或改进,请告诉我

    这是我对这个问题的解决方案,因为pixelearth的答案在firefox上似乎不起作用(可能是假海报的问题)

    HTML

    <video id="video1" height="236" preload="auto" controls>
      <source src="yourVideo.mp4">
      Your browser does not support HTML5 video.
    </video>
    
    CSS

    $('#video1').on('loadstart', function (event) {
      $(this).addClass('background');
      $(this).attr("poster", "/your/loading.gif");
    });
    
    $('#video1').on('canplay', function (event) {
      $(this).removeClass('background');
      $(this).removeAttr("poster");
    });
    
    video.background {
      background: black
    }
    
    有了这个答案,你就不必为了那些不是为之而制作的目的而乱搞假海报或滥用属性。希望这有帮助

    当然,可以添加更多的事件来添加海报属性,例如如果它不能在视频中间进一步播放,需要更多的缓冲

    您可以找到一个显示我的代码的JSFIDLE

    
    
    isVideoLoaded上
    标记显示和隐藏加载程序

    this.isVideoLoaded=false;
    checkVideoLoaded(){
    this.isVideoLoaded=true;
    }
    
    <video id="video1" height="236" preload="auto" controls>
      <source src="yourVideo.mp4">
      Your browser does not support HTML5 video.
    </video>
    
    $('#video1').on('loadstart', function (event) {
      $(this).addClass('background');
      $(this).attr("poster", "/your/loading.gif");
    });
    
    $('#video1').on('canplay', function (event) {
      $(this).removeClass('background');
      $(this).removeAttr("poster");
    });
    
    video.background {
      background: black
    }