实现类似 Medium 风格的视频加载

非常早之前写过关于一篇《[译]Medium 是如何优化图片加载的》 的文章。

最近在看一些视频封面的优化,其中会有一些黑屏的问题,于是乎想到了是不是可以借鉴这种风格。

大概原理还是,可以根据视频的 loadeddata 事件,然后将覆盖在上面的模糊的封面图隐藏,然后播放视频。

html

<div class="video-container">
  <video width="720" src=""></video>
  <div class="cover"></div> 
</div>  

CSS

.video-container {
  position: relative;
  width: 720px;
  display: none;
}

.video-container .cover {
  position: absolute;
  top:0;
  left: 0px;
  right: 0;
  height: 100%;
  background: url(https://img-1252472236.cos.ap-beijing.myqcloud.com/blog%2FWX20240518-130027%402x-min.png) 100% 100%;
  filter: blur(3px);
  transition: opaicty 0.05s 0.35s linear;
}

.video-container .cover.hide{
  opacity: 0;
}

这里面会有一个 transition 来增加动画效果。

JS 部分

var videoUrl = 'https://img-1252472236.cos.ap-beijing.myqcloud.com/%E3%80%904K%E3%80%91_72%20Seasons_%20of%20Makoto%20Shinkai%20%20%E6%96%B0%E6%B5%B7%E8%AA%A0%20%E3%80%8C%E4%BA%8C%E5%8D%81%E5%9B%9B%E7%AF%80%E6%B0%97%20%C2%B7%20%E4%B8%83%E5%8D%81%E4%BA%8C%E5%80%99%E3%80%8D.mp4';

var loadVideo = function() {
  $('.video-container').css('display', 'block');
  $('video')[0].src = videoUrl;
  $('video').on('loadeddata', function() {
    $('.cover').addClass('hide');
    this.play();
  })
}
$(document).ready(function() {
  $('.button').click(function() {
     loadVideo();                
  });
})

最后附上 Codepen

Codepen