检测视频缓冲时间,如果是,显示gif



我想知道是否有一种方法可以在视频缓冲时显示.gif。

我正在使用HTML5视频标签,在这个标签中,有没有一种方法可以检测视频何时缓冲,如果没有,还有其他方法吗?

我看过:

如何检测视频何时缓冲?

然而,我认为这对我没有帮助。。因为我不知道什么是NetStream或什么是actionscript-3。

html:

<div id="popup-box" class="popupInfo">
            <img src="button/loading.gif" id="loadingGif" />
            <video src="fragmenten/real_schade.mp4" controls="controls" preload="auto" id="video" onclick="this.play();">
                    Your browser doesn't support the video element.
            </video>
            <p class="buttons">
                <a href="http://www.reaal.nl/verzekering/autoverzekering/#routechecker" target="_blank" id="place_Holder" class="button btn1">Meer informatie</a>
                <a href="http://www.reaal.nl/verzekering/autoverzekering/#basisdekking"  target="_blank" id="place_Holder1" class="button licht hoverbtn2">Direct afsluiten</a>
            </p>
            <img src="button/sluit.png" class="close">
        </div>

当视频开始缓冲时,可以在视频元素上使用onwaiting事件处理程序来显示图像,当视频恢复时,可以使用onplaying事件处理程序(比较视频元素事件)

video.onwaiting = function(){
    showPlaceholder(placeholder, this);
};
video.onplaying = function(){
    hidePlaceholder(placeholder, this);
};

我创建了一个小小提琴,在那里你可以了解如何做到这一点(注意,我用代码模拟了1秒后的缓冲)。

我知道这个线程真的很旧,但我一直在努力做到这一点,我花了好几天的时间才找到如何做到这一步并使其正常运行,所以我想为像我一样挣扎的未来用户提供帮助。

我重新制作了上面的fiddle,使其能够播放1个以上的视频,还添加了一个css加载程序,因为它将使其更快,而不必下载gif。因此,它现在工作得更好,可扩展,而且更易于使用。我还删除了上面帖子中链接的上一篇Js Fiddle中的延迟。要扩展它,只需复制javascript的一部分并将标记更改为唯一即可。这是我的js Jsfidle

如果您希望使用Gif而不是css加载程序,请执行以下操作:

更改这些行:

<div id="placeholder_1" class="placeholder"><div class="loader">Loading...</div></div>

对此:

<div id="placeholder_1" class="placeholder"><img src="https://i.imgur.com/OirdkJp.gif"></div>

它的工作原理是Javascript检查视频是否正在缓冲,如果正在缓冲,Javascript将调用该html行<div id="placeholder_1" class="placeholder">,然后该html行将调用css加载程序进行显示。我没有做装载机,我是从这里买的

要扩展,请执行以下操作:


复制下面的代码并将所有这些标签更改为唯一的名称。对这一行做同样的事情:<div id="placeholder_1" class="placeholder">也用你制作的js标签的相同数字给你的视频添加一个id,例如:id="video_1"(基本上把1改成另一个数字)如果你有问题,请阅读本文底部的完整代码以获得更多帮助:

标签:

video_1
placeholder_1

代码:

var video = document.getElementById("video_1");
var placeholder = document.getElementById("placeholder_1");
placeholder_1.style.top = video_1.offsetTop + "px";
placeholder_1.style.left = video_1.offsetLeft + "px";
video_1.onwaiting = function() {
  showPlaceholder(placeholder_1, this);
};
video_1.onplaying = function() {
  hidePlaceholder(placeholder_1, this);
};
function showPlaceholder(img, vid) {
  img.style.height = vid.scrollHeight + "px";
  img.style.width = vid.scrollWidth + "px";
  img.style.display = "block";
}
function hidePlaceholder(img, vid) {
  img.style.display = "none";
}

这是完整的代码:

//Video one.
var video = document.getElementById("video_1");
var placeholder = document.getElementById("placeholder_1");
placeholder_1.style.top = video_1.offsetTop + "px";
placeholder_1.style.left = video_1.offsetLeft + "px";
video_1.onwaiting = function() {
  showPlaceholder(placeholder_1, this);
};
video_1.onplaying = function() {
  hidePlaceholder(placeholder_1, this);
};
function showPlaceholder(img, vid) {
  img.style.height = vid.scrollHeight + "px";
  img.style.width = vid.scrollWidth + "px";
  img.style.display = "block";
}
function hidePlaceholder(img, vid) {
  img.style.display = "none";
}
//Video two.
var video = document.getElementById("video_2");
var placeholder = document.getElementById("placeholder_2");
placeholder_2.style.top = video_2.offsetTop + "px";
placeholder_2.style.left = video_2.offsetLeft + "px";
video_2.onwaiting = function() {
  showPlaceholder(placeholder_2, this);
};
video_2.onplaying = function() {
  hidePlaceholder(placeholder_2, this);
};
function showPlaceholder(img, vid) {
  img.style.height = vid.scrollHeight + "px";
  img.style.width = vid.scrollWidth + "px";
  img.style.display = "block";
}
function hidePlaceholder(img, vid) {
  img.style.display = "none";
}
//Video three,
var video = document.getElementById("video_3");
var placeholder = document.getElementById("placeholder_3");
placeholder_3.style.top = video_3.offsetTop + "px";
placeholder_3.style.left = video_3.offsetLeft + "px";
video_3.onwaiting = function() {
  showPlaceholder(placeholder_3, this);
};
video_3.onplaying = function() {
  hidePlaceholder(placeholder_3, this);
};
function showPlaceholder(img, vid) {
  img.style.height = vid.scrollHeight + "px";
  img.style.width = vid.scrollWidth + "px";
  img.style.display = "block";
}
function hidePlaceholder(img, vid) {
  img.style.display = "none";
}
//Video four.
var video = document.getElementById("video_4");
var placeholder = document.getElementById("placeholder_4");
placeholder_4.style.top = video_4.offsetTop + "px";
placeholder_4.style.left = video_4.offsetLeft + "px";
video_4.onwaiting = function() {
  showPlaceholder(placeholder_4, this);
};
video_4.onplaying = function() {
  hidePlaceholder(placeholder_4, this);
};
function showPlaceholder(img, vid) {
  img.style.height = vid.scrollHeight + "px";
  img.style.width = vid.scrollWidth + "px";
  img.style.display = "block";
}
function hidePlaceholder(img, vid) {
  img.style.display = "none";
}
.placeholder {
  display: none;
  position: absolute;
  background-size: cover;
  text-align: center;
  float: left;
  z-index: 300000;
}
.loader,
.loader:before,
.loader:after {
  background: #ff8000;
  -webkit-animation: load1 1s infinite ease-in-out;
  animation: load1 1s infinite ease-in-out;
  width: 1em;
  height: 4em;
}
.loader {
  color: #ff8000;
  text-indent: -9999em;
  margin: 88px auto;
  position: relative;
  font-size: 11px;
  -webkit-transform: translateZ(0);
  -ms-transform: translateZ(0);
  transform: translateZ(0);
  -webkit-animation-delay: -0.16s;
  animation-delay: -0.16s;
}
.loader:before,
.loader:after {
  position: absolute;
  top: 0;
  content: '';
}
.loader:before {
  left: -1.5em;
  -webkit-animation-delay: -0.32s;
  animation-delay: -0.32s;
}
.loader:after {
  left: 1.5em;
}
@-webkit-keyframes load1 {
  0%,
  80%,
  100% {
    box-shadow: 0 0;
    height: 4em;
  }
  40% {
    box-shadow: 0 -2em;
    height: 5em;
  }
}
@keyframes load1 {
  0%,
  80%,
  100% {
    box-shadow: 0 0;
    height: 4em;
  }
  40% {
    box-shadow: 0 -2em;
    height: 5em;
  }
}
<video id="video_1" controls preload="none">
  <source src="http://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4" />
</video>
<div id="placeholder_1" class="placeholder">
  <div class="loader">Loading...</div>
</div>
<video id="video_2" controls preload="none">
  <source src="http://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4" />
</video>
<div id="placeholder_2" class="placeholder">
  <div class="loader">Loading...</div>
</div>
<video id="video_3" controls preload="none">
  <source src="http://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4" />
</video>
<div id="placeholder_3" class="placeholder">
  <div class="loader">Loading...</div>
</div>
<video id="video_4" controls preload="none">
  <source src="http://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4" />
</video>
<div id="placeholder_4" class="placeholder">
  <div class="loader">Loading...</div>
</div>

最新更新