javascript - 打开和关闭模式时自动播放和停止
问题描述
我是 javascript 新手,在打开和关闭模式时遇到自动播放视频和停止视频的问题。
目前,如果我在视频控件之外单击,此脚本允许我关闭模式,并且也必须修复。它旨在能够在单击视频主体时播放/暂停视频,并在单击视频时关闭模态。
同时,在打开模态时,视频应该能够自动播放,同样在关闭模态时,视频停止。
我不熟悉这些功能,是否有人可以建议对当前脚本进行任何改进?
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8">
<style>
.trailer{
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 1;
background: rgba(0, 0, 0, 0.7);
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
visibility: hidden;
opacity: 0;
}
.trailer.active{
visibility: visible;
opacity: 1;
}
.trailer #mainvid{
position: relative;
max-width: 1200px;
outline: none;
}
.trailer-close{
position: absolute;
top: 30px;
right: 30px;
cursor: pointer;
filter: invert(1);
max-width: 32px;
}
@media (max-width: 991px) {
.trailer #mainvid{
max-width: 90%;
}
}
</style>
</head>
<body>
<div class="banner">
<div class="content">
<p>Testing Testing 1 2 3</p>
<a href="#" onclick="toggle();">
<button>Play Video</button>
</a>
</div>
</div>
<div class="trailer" id="main">
<video id="mainvid" src="/video/products/container accomodation/main/main video.mp4" controls="true"></video>
</div>
<script type="text/javascript">
function toggle(){
var trailer = document.querySelector(".trailer")
trailer.classList.toggle("active");
video.pause();
video.currentTime = 0;
}
window.addEventListener('mouseup',function(){
var traileractive = document.querySelector(".trailer.active")
traileractive.classList.toggle("active");
})
</script>
</body>
</html>
解决方案
要处理视频播放器的状态,我们可以简单地使用 的play
pause
函数HTMLMediaElement
。使用此代码,它会处理所有所需的功能。
var videoElem = document.querySelector(".trailer video");
var trailerElem = document.querySelector(".trailer")
function toggle() {
trailerElem.classList.add("active");
videoElem.play();
videoElem.currentTime = 0;
}
function handleTrailerClick(event) {
if (event && event.target && event.target.nodeName !== "VIDEO") {
videoElem.pause();
trailerElem.classList.remove('active');
}
}
function handleVideoClick(event) {
event.preventDefault();
videoElem.paused ? videoElem.play() : videoElem.pause();
}
document.querySelector("#playButton").addEventListener('click', toggle)
document.querySelector(".trailer").addEventListener('click', handleTrailerClick);
document.querySelector(".trailer video").addEventListener('click', handleVideoClick);
.trailer {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 1;
background: rgba(0, 0, 0, 0.7);
width: 100%;
height: 100%;
display: none;
justify-content: center;
align-items: center;
}
.trailer.active {
display: flex;
}
.trailer #mainvid {
position: relative;
max-width: 1200px;
outline: none;
}
.trailer-close {
position: absolute;
top: 30px;
right: 30px;
cursor: pointer;
filter: invert(1);
max-width: 32px;
}
@media (max-width: 991px) {
.trailer #mainvid {
max-width: 90%;
}
}
<div class="banner">
<div class="content">
<p>Testing Testing 1 2 3</p>
<button id="playButton">Play Video</button>
</div>
</div>
<div class="trailer" id="main">
<video id="mainvid" src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerEscapes.mp4" controls="true"></video>
</div>
推荐阅读
- java - SurfaceView - 时间戳相对于预期的现在似乎不可信
- reactjs - 无法获取 React Form 值
- entity-framework - EF 迁移 - 微服务 - 使用 EF 迁移从 DB1 获取值并在 DB2 中更新(用于修补数据,一次)
- swift - ARKit 2.0 – 如何阻止音频在 SCNView 中播放?
- java - 我是否必须阻止循环操作处理程序调用
- java - 如何在 Spring Boot Cors 中设置标题?
- ios - 如何在另一个故事板中快速在 xib 文件中显示新控制器
- apache-spark - pyspark union over RDDs 的组合
- javascript - IntelliJ 显示无效 HTML 警告 - 来自不同模块的源
- node.js - ExpressJS 路由将参数保存到 Store.js