使用Javascript根据屏幕大小更改<video> src

时间:2019-01-21 18:09:09

标签: javascript html video bootstrap-4 media-queries

我正在测试使用引导程序在我的计算机上本地构建站点。

我有一个<video>作为网站的标题。

我希望该视频在移动设备上显示完整的宽度和高度,并在台式机上显示该视频的裁剪/宽版。我尝试在<source>标记中使用内联媒体查询,以使src发生变化,但没有任何效果。

所以我换了档,并使用了一些JavaScript来进行更改。

所以疯狂的是,看来我的脚本有效。当我查看chrome开发工具时,src实际上在更改浏览器屏幕大小时会发生变化,但是,它不会反映在网站本身上,而是将我设置的src保留在html,好像忽略了我的脚本一样。

我已经尝试了所有可能想到的方法,但是我被困住了,不确定如何进一步进行下去。我的代码如下:

HTML

<video class="col-12" loop muted autoplay >
  <source id="hvid" src="media/test.mp4" type="video/mp4">
</video>

JS

let homeVideo = document.getElementById('hvid')
console.log(homeVideo.src)


function myFunction(x) {
  if (x.matches) { // If media query matches
    homeVideo.src = "media/test.mp4";
  } else {
   homeVideo.src = "media/test-3.mp4";
  }
}

var x = window.matchMedia("(max-width: 700px)")
myFunction(x) // Call listener function at run time
x.addListener(myFunction) // Attach listener function on state changes
;
console.log(homeVideo.src)

-编辑-

JS

var w = window.matchMedia("(max-width: 700px)");
 var vid = document.getElementById("vid");
 var source = document.getElementById("hvid");


window.addEventListener("resize", function screenres(){
  if (w.matches) {
    vid.pause();
    source.src = "media/test.mp4";
    vid.load();
    vid.play();
  } else {
    vid.pause();
    source.src = "media/test-3.mp4";
    vid.load();
    vid.play();
  };

});

HTML

  <div class="container">
      <div class="row">
          <video id="vid" class="col-12" loop muted autoplay>
            <source id="hvid" src="media/test.mp4" type="video/mp4">
          </video>
        </div>
    </div>

1 个答案:

答案 0 :(得分:0)

只需获取视口大小,然后基于该值,暂停视频,更改src链接,加载新视频并播放新视频。

但是请注意,您需要在更改浏览器大小后刷新页面才能看到视频更改。

如果您希望在屏幕调整大小和刷新页面时更改视频,则首先需要将上述JavaScript移至某个函数,并在触发resize事件时运行它。然后,对于页面加载,您需要从HTML中删除video元素,并使用createElement()方法在页面加载时将其添加,并根据视口宽度添加src属性值。


选中此 JSFiddle 或运行以下代码段,以获取上述内容的实际示例:

/* JavaScript */

  var w = window.matchMedia("(max-width: 700px)");
  var vid = document.getElementById("vid");
  var source = document.createElement("source");
  source.id = "hvid";
  source.setAttribute("type", "video/mp4");
  vid.appendChild(source);
  
  if (w.matches) {
    vid.pause();
    source.removeAttribute("src");
    source.setAttribute("src", "https://storage.googleapis.com/coverr-main/mp4/Love-Boat.mp4");
    vid.load();
    vid.play();
  } else {
    vid.pause();
    source.removeAttribute("src");
    source.setAttribute("src", "https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4");
    vid.load();
    vid.play();
  }

window.addEventListener("resize", function(){
  var w = window.matchMedia("(max-width: 700px)");
  var vid = document.getElementById("vid");
  var source = document.getElementById("hvid");
  
  if (w.matches) {
    vid.pause();
    source.src = "https://storage.googleapis.com/coverr-main/mp4/Love-Boat.mp4";
    vid.load();
    vid.play();
  } else {
    vid.pause();
    source.src = "https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4";
    vid.load();
    vid.play();
  }
});
/* CSS */

html, body {margin: 0; padding:0; width: 100%; height: 100%;}.row{display: block !important;}
<!-- CDN Links -->

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script><script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/><link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet"/>

<!-- HTML -->

<div class="container">
  <div class="row">
    <video id="vid" class="col-12" loop muted autoplay></video>
  </div>  
</div>