让 SublimeVideo 宽度自适应

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您的旅程每个阶段提供云产品。 立即开始使用 $200 免费积分!

自从该网站的 v9 版本发布后,我一直在 SublimeVideo 中使用视频播放器,用于 屏幕录制区域。 SublimeVideo 类似于 VideoJSMediaElement.js 等项目,它是一个 polyfill,用于 HTML5 视频。 也就是说,您使用常规的简洁 HTML5 <video> 标记,它会确保视频可以在尽可能多的浏览器/平台/版本上看到。

SublimeVideo 与其他项目有何不同?

  • 它们托管资源,而不是您。 这意味着节省了一些带宽,但更重要的是,这意味着您始终能获得最新最好的版本,这在快速变化的浏览器环境中很重要。
  • 它是所有这些项目中最漂亮的。 我认为是主观的。
  • 它不是免费的。 而其他项目是免费的。

我非常喜欢为 使我们前端开发人员生活更轻松的服务付费 的想法,所以我加入了进来(我为 Star 计划的服务付费)。

请注意,SublimeVideo 用于您自己托管在某个地方的视频。 它们不会为您托管视频。 如果您想要托管视频以及类似地在任何地方都能正常使用的播放器,而不必担心带宽,您可能应该只使用 YouTubeVimeoBlip.tv

定期使用 SublimeVideo 时,您只需在 <head> 中加载它们的 JavaScript

<script src="//cdn.sublimevideo.net/js/YOURTOKEN.js"></script>

然后像这样使用 HTML5 视频

<video class="sublime" width="640" height="360" poster="video-poster.jpg" preload="none">
  <source src="//yoursite.com/video.mp4" />
  <source src="//yoursite.com/video.webm" />
</video>

这非常有效,但生成的视频播放器具有固定宽度和高度。 在像我这里这样的自适应宽度/响应式网站中,固定尺寸的媒体不能很好地播放。 我更希望视频能够根据需要随着它所在的列一起缩小和放大。

我已经多次解决过自适应宽度视频的想法。 最终,我帮助开发了 FitVids.js,这是一个 jQuery 插件,用于轻松地使来自最受欢迎来源的所有视频都可以在自适应宽度设计中工作。 不幸的是,FitVids.js 不适用于 SublimeVideo。 为了便于解释,它们只是不同的东西,使它们协同工作会比它值得的麻烦更多。

不过好消息是,经过一番恳求(我确信他们收到了很多关于此方面的请求),他们发布了一个新的 API 部分,专门用于调整大小。 因此,使视频宽度自适应就像监视 window.resize 事件一样简单,当它触发时,计算新的宽度和高度,并使用 sublimevideo.resize 函数进行更改。

这是我使用的完整代码。 其中有一些额外的奖励部分,通过代码注释进行了解释。 请注意,此代码使用了少量 jQuery。 另请注意,<video> 元素上的“sublime”类已删除

<video id="the-video" width="570" height="320" poster="poster.jpg" controls preload="none">
  ...
</video>

<script>
(function() {

  // Prevents some flickering
  $('#the-video').css("visibility", "hidden");

  // Fluid column video is inside of
  var fluidParent = $(".main-column"),
  newWidth, newHeight;

  // Gets called when video needs resizing
  function resizeVideo() {
    newWidth = fluidParent.width();
    // 1.78125 == Aspect Ratio of my videos
    sublimevideo.resize('the-video', newWidth, newWidth/1.78125);
  };

  $(window).resize(function() {
    resizeVideo();
  });

  // When the resources are ready, 
  // load up the video and size it correctly
  sublimevideo.ready(function() {
    sublimevideo.prepare('the-video');
    resizeVideo();
  });

  }());
</script>

如果您想查看它的实际效果,可以在 单个视频页面 上查看。