javascript - 响应式视频浏览器不稳定,Safari 除外

标签 javascript html css

我有一个元素,其中我有一个视频作为背景,并且由于鼠标在屏幕上的 x 轴位置,该视频倒带。所以简而言之,如果你的光标在屏幕的左侧,视频在 00:00 (0%),如果光标在中间,视频在 02:00 (50%),等等......我已经使用此脚本进行了此操作:

    var mouseX;
    $(document).mousemove( function(e) {
        mouseX = e.pageX; 

        var timV = $(".video1").get(0).duration;
        var valV = (timV*mouseX/$(window).width());
        var valC = $(".video1").get(0).currentTime;

        $(".video1").get(0).currentTime = valV;
    });

我还创建了一支笔,所以你可以自己试试:https://codepen.io/honzis1364/pen/bvBZOB

但问题是,视频回放在某些浏览器上时断断续续,大部分浏览器都是如此。 Safari 非常完美,它可以让视频来回倒带,即使鼠标左右快速移动也没有问题。但是在 Chrome 上它开始倒带断断续续,就像每 20 帧左右。而 Firefox 是个灾难,只有在你停止光标移动后它才会倒带,你可以自己试试。

我可以从 Safari 上传视频,如果有人无法在 Safari 上进行测试,那就完美了。

我想这是浏览器的问题,比如它没有足够的内存来显示视频的每一帧之类的?

有人能告诉我如何(如果可以)解决这个问题,这样视频倒带在每个浏览器中都像 Safari 一样流畅吗?

非常感谢同事们!

最佳答案

这可能是因为您的 mousemove 事件触发太多,浏览器必须不断将视频光标移动到正确的值。你试过了吗throttling它?此外,也许将其四舍五入到最接近的 .1 值也有助于提高性能:

var mouseX;
$(document).mousemove($.throttle(100, function(e) {
  mouseX = e.pageX;

  var vid = $('.video1').get(0);

  var timV = vid.duration;
  var valV = timV * mouseX / $(window).width();
  vid.currentTime = valV.toFixed(1);
}));

概念验证示例,使用热链接的 mp4 视频(如果链接被删除,示例可能无法工作):

$(function() {
  var mouseX;
  $(document).mousemove($.throttle(100, function(e) {
    mouseX = e.pageX;

    var vid = $('.video1').get(0);

    var timV = vid.duration;
    var valV = timV * mouseX / $(window).width();
    vid.currentTime = valV.toFixed(1);
  }));
});
body {
  margin: 0;
  padding: 0;
  overflow: hidden;
  background: #333;
  background-attachment: fixed;
  background-size: cover;
}

#video-background {
  position: fixed;
  min-width: 100%;
  min-height: 100%;
  width: auto;
  height: auto;
  z-index: -100;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  object-fit: cover;
  object-position: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-throttle-debounce/1.1/jquery.ba-throttle-debounce.js"></script>
<video muted loop id="video-background" class="video1">
  <source src="https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" type="video/mp4">
</video>

关于javascript - 响应式视频浏览器不稳定,Safari 除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49364495/

相关文章:

javascript - JS中如何将十进制转换为二进制?

css - 将内联样式传输到外部样式表

javascript - 字体可以省略空格字符吗?

javascript - 访问对象并将其设置为 null throw 数组元素

javascript - 循环根据长度精确迭代,但每次迭代插入相同的记录

javascript - 如何在模型 View 转换后获取正在绘制的对象的二维尺寸以在 webgl 上进行 HitTest

html - 为什么文本会超出div?

html - Firefox 和 Windows 中的 CSS 水平菜单问题

javascript - 页面加载后弹出 youtube 视频

javascript - "Show full site"绕过 css 媒体查询的按钮