在这个小项目中,我正在浏览器中编码视频播放器。当前,当您单击视频时,我正在使用“播放/暂停”按钮。 CSS中的动画正常工作,但是当我单击屏幕上的按钮时,它消失了,没错。当我再次单击时,我应该看到暂停按钮,但我只是再次拥有了播放按钮。最后,它的行为应类似于屏幕上YouTube上的按钮。在JavaScript中,它被捕获在变量const butto = player.querySelector('.buttom')
const player = document.querySelector('.player');
const video = player.querySelector('.viewer');
const progress = player.querySelector('.progress');
const progressBar = player.querySelector('.progress__filled');
const toggle = player.querySelector('.toggle');
const skipButtons = player.querySelectorAll('[data-skip]');
const ranges = player.querySelectorAll('.player__slider');
const butto = player.querySelector('.buttom')
//toggle
function togglePlay(){
if(video.paused){
video.play();
if (butto.style.display === "none") {
butto.style.display === "block";
}
else{butto.style.display = "none"}
}else{
video.pause();
if (butto.style.display === "block") {
butto.style.display === "none";
}else{butto.style.display ="block"}
}
}
function updateButton(){
const icon = this.paused ? '▷':'❚❚';
toggle.textContent = icon;
const videoclic = this.paused? '▷':'❚❚';
butto.textContent= videoclic
}
video.addEventListener('click',togglePlay);
video.addEventListener('play',updateButton);
video.addEventListener('pause',updateButton);
toggle.addEventListener('click',togglePlay);
butto.addEventListener('click',togglePlay);
butto.addEventListener('play',updateButton);
butto.addEventListener('pause',updateButton);
html {
box-sizing: border-box;
}
*, *:before, *:after {
box-sizing: inherit;
}
body {
margin: 0;
padding: 0;
display: flex;
background: #7A419B;
min-height: 100vh;
background: linear-gradient(135deg, #7c1599 0%,#921099 48%,#7e4ae8 100%);
background-size: cover;
align-items: center;
justify-content: center;
}
.player {
max-width: 750px;
border: 5px solid rgba(0,0,0,0.2);
box-shadow: 0 0 20px rgba(0,0,0,0.2);
position: relative;
font-size: 0;
overflow: hidden;
}
/* This css is only applied when fullscreen is active. */
.player:fullscreen {
max-width: none;
width: 100%;
}
.player:-webkit-full-screen {
max-width: none;
width: 100%;
}
.player__video {
width: 100%;
}
.player__button {
background: none;
border: 0;
line-height: 1;
color: white;
text-align: center;
outline: 0;
padding: 0;
cursor: pointer;
max-width: 50px;
}
.player__button:focus {
border-color: #ffc600;
}
.player__slider {
width: 10px;
height: 30px;
}
.player__controls {
display: flex;
position: absolute;
bottom: 0;
width: 100%;
transform: translateY(100%) translateY(-5px);
transition: all .3s;
flex-wrap: wrap;
background: rgba(0,0,0,0.1);
}
.player:hover .player__controls {
transform: translateY(0);
}
.player:hover .progress {
height: 15px;
}
.player__controls > * {
flex: 1;
}
.progress {
flex: 10;
position: relative;
display: flex;
flex-basis: 100%;
height: 5px;
transition: height 0.3s;
background: rgba(0,0,0,0.5);
cursor: ew-resize;
}
.progress__filled {
width: 50%;
background: #ffc600;
flex: 0;
flex-basis: 50%;
}
/* unholy css to style input type="range" */
input[type=range] {
-webkit-appearance: none;
background: transparent;
width: 100%;
margin: 0 5px;
}
input[type=range]:focus {
outline: none;
}
input[type=range]::-webkit-slider-runnable-track {
width: 100%;
height: 8.4px;
cursor: pointer;
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0), 0 0 1px rgba(13, 13, 13, 0);
background: rgba(255,255,255,0.8);
border-radius: 1.3px;
border: 0.2px solid rgba(1, 1, 1, 0);
}
input[type=range]::-webkit-slider-thumb {
height: 15px;
width: 15px;
border-radius: 50px;
background: #ffc600;
cursor: pointer;
-webkit-appearance: none;
margin-top: -3.5px;
box-shadow:0 0 2px rgba(0,0,0,0.2);
}
input[type=range]:focus::-webkit-slider-runnable-track {
background: #bada55;
}
input[type=range]::-moz-range-track {
width: 100%;
height: 8.4px;
cursor: pointer;
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0), 0 0 1px rgba(13, 13, 13, 0);
background: #ffffff;
border-radius: 1.3px;
border: 0.2px solid rgba(1, 1, 1, 0);
}
input[type=range]::-moz-range-thumb {
box-shadow: 0 0 0 rgba(0, 0, 0, 0), 0 0 0 rgba(13, 13, 13, 0);
height: 15px;
width: 15px;
border-radius: 50px;
background: #ffc600;
cursor: pointer;
}
.buttom{
position: absolute;
top: 50%;
left:50%;
height: 60px;
width: 60px;
background-color: rgba(100, 100, 100, 0.75);
border-radius: 50%;
transform: translate(-50%, -50%);
cursor:pointer;
animation-name: sizes ;
animation-duration: 500ms;
transform-origin: top left;
font-size: 35px;
position: absolute;
color: white;
top: 50%;
padding: 0;
border: none;
}
@keyframes sizes{
0% {transform: scale(1)
translate(-50%, -50%);}
100% {transform: scale(0)
translate(-50%, -50%);}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HTML Video Player</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="player">
<video class="player__video viewer" src="https://cdn.videvo.net/videvo_files/video/free/2019-05/small_watermarked/190416_08_Whales_Drone_004_preview.webm" allowfullscreen></video>
<button class ='buttom'>▷</button>
<div class="player__controls">
<div class="progress">
<div class="progress__filled"></div>
</div>
<button class="player__button toggle" title="Toggle Play">►</button>
<input type="range" name="volume" class="player__slider" min="0" max="1" step="0.05" value="1">
<input type="range" name="playbackRate" class="player__slider" min="0.5" max="2" step="0.1" value="1">
<button data-skip="-10" class="player__button">« 10s</button>
<button data-skip="25" class="player__button">25s »</button>
</div>
</div>
<script src="scripts.js"></script>
</body>
</html>
我已经仔细阅读了代码,如果我理解正确的问题,则可以在播放和暂停功能中添加事件监听器。这是我如何解决您的javascript文件中的问题的方法:
function togglePlay(){
if(video.paused){
video.play();
if (butto.style.display === "none") {
butto.style.display = "block";
} else {
player.addEventListener('mouseover', hoverIcon);
player.addEventListener('mouseout', hoverIconLeave);
} } else {
video.pause();
if (butto.style.display === "block") {
butto.style.display = "none";
}else{butto.style.display = "block"}
}
}
我为此声明为“主要”功能之外的独立功能的功能,这些功能是:
function hoverIcon() {
butto.style.display = "block";
}
function hoverIconLeave() {
butto.style.display = "none";
}
动画看起来有点偏离,但是您可以在CSS中进行更改,希望能有所帮助:)