html - 如何在视频标签中正确设置图片海报
问题描述
我将视频设置为桌面页面版本。当页面宽度小于 480 像素(移动版)时,我想将该视频更改为图像。我已经为视频标签设置了海报,但不知道如何使图像在手机上正确显示(现在它是所有设备上唯一显示的视频)。请告诉我如何正确设置图像。谢谢
.video {
position: fixed;
right: 0;
bottom: 0;
min-width: 100%;
min-height: 100%;
}
<main class="main">
<div class="main-background">
<video preload="none" autoplay playsinline muted loop class="video"
poster="./images/beach.jpg" id="video">
<source src="./video/Atropicallandscape.mp4" type="video/mp4">
</video>
</div>
</main>
解决方案
JavaScript 解决方案
您可以使用 JavaScript 来确定媒体大小,使用matchMedia()
=> MDN:方法返回一个新的MediaQueryList对象,然后可以使用该对象来确定文档是否与媒体查询字符串匹配,以及监视文档以检测何时匹配(或停止匹配)该媒体查询。
在您的 HTML 中,在您的视频元素父元素中添加图像元素,并添加一个辅助类来切换display: none;
CSS 中的元素样式,以便在您的媒体查询与您想要的大小匹配时使用。
然后创建一个函数并将事件传递给使用event.matches =>检查浏览器大小的函数e.matches
。条件可用于处理元素的显示切换。el.classList.add
您可以使用一个助手类,它简单地将 display 属性定义为 none ,如果使用/可以来回切换el.classList.remove
。
然后添加一个 eventListener 来使用你的函数来检查你的设备屏幕大小。
const main = document.querySelector('.main-background')
const video = main.querySelector('.video')
const image = main.querySelector('.image')
const mediaQuery = window.matchMedia('(max-width: 450px)')
function handleChange(e) {
if (e.matches) {
video.classList.add('hidden')
image.classList.remove('hidden')
}else{
image.classList.add('hidden')
video.classList.remove('hidden')
}
}
mediaQuery.addListener(handleChange)
.video {
position: fixed;
right: 0;
bottom: 0;
min-width: 100%;
min-height: 100%;
}
.image {
position: fixed;
right: 0;
bottom: 0;
min-width: 100%;
min-height: 100%;
background: url('https://picsum.photos/450/450') no-repeat;
}
.hidden {
display: none;
}
<main class="main">
<div class="main-background">
<video preload="none" autoplay playsinline muted loop class="video" poster="./images/beach.jpg" id="video">
<source src="./video/Atropicallandscape.mp4" type="video/mp4">
</video>
<div class="image hidden">
</div>
</div>
</main>
推荐阅读
- c++ - 如何在 std::unordered_map 中维护 std:: 队列而不丢失对队列所做的更改?
- flutter - 颤振返回多个小部件卡住
- javascript - 如何合并打字稿模块定义
- c# - 如何在第一次尝试时选择打开 Unity 游戏的显示器
- cplex - CPLEX - 发生溢出 (OPL IDE)
- snowflake-cloud-data-platform - 雪花:在预定时间之外启动任务
- javascript - 如何在 Sinon.js 中测试控制器中使用的辅助函数
- c# - Cosmos DB 在 LINQ 中查询日期时间在使用 ToList() 时有效,但在 IQueryable 时无效
- arrays - 将数字终端输入读入数组并对数组进行排序 [Bash]
- node.js - Webpack 仍然包含一个明确排除的文件夹