Как связать звук с контроллером громкости на сайте
Хочу внедрить на сайт фоновую музыку. Хотелось бы, чтобы пользователь мог управлять только громкостью, музыку залупить. Есть код контроллера уровня громкости звука. Но я пока не особо разбираюсь, как привязать к нему саму музыку?
var controlBox = document.getElementsByClassName("control-box")[0];
var volumeControl = controlBox.querySelector(".volume-control");
var volumeInput = volumeControl.querySelector("input[type=range]");
function setBars() {
var volume = parseInt(volumeInput.value);
volumeControl.className = "volume-control";
if (volume > 0) {
controlBox.classList.add("volume-on");
volumeControl.classList.add("volume-" + volume);
} else {
controlBox.classList.remove("volume-on");
}
}
volumeInput.addEventListener("input", setBars);
setBars();
body {
margin: 0;
padding: 0;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: #ebebeb;
}
.volume-control {
width: 50%;
height: 50px;
display: flex;
align-items: baseline;
}
.volume-control .bars {
position: relative;
display: flex;
align-items: flex-end;
margin-left: 20px;
width: 150px;
height: 80%;
}
.volume-control .bars .bar {
width: 14%;
margin: 0 7%;
background-color: #bbb;
transition: .2s ease-in-out;
}
.volume-control .bars .bar:nth-child(1) {
height: 100%;
}
.volume-control .bars .bar:nth-child(2) {
height: 100%;
}
.volume-control .bars .bar:nth-child(3) {
height: 100%;
}
.volume-control .bars .bar:nth-child(4) {
height: 100%;
}
.volume-control .bars .bar:nth-child(5) {
height: 100%;
}
.volume-control .bars input[type=range] {
position: absolute;
left: -10%;
width: 110%;
height: 100%;
cursor: pointer;
opacity: 0;
}
.volume-control.volume-20 .bars .bar:nth-child(1),
.volume-control.volume-40 .bars .bar:nth-child(1),
.volume-control.volume-60 .bars .bar:nth-child(1),
.volume-control.volume-80 .bars .bar:nth-child(1),
.volume-control.volume-100 .bars .bar:nth-child(1),
.volume-control.volume-40 .bars .bar:nth-child(2),
.volume-control.volume-60 .bars .bar:nth-child(2),
.volume-control.volume-80 .bars .bar:nth-child(2),
.volume-control.volume-100 .bars .bar:nth-child(2),
.volume-control.volume-60 .bars .bar:nth-child(3),
.volume-control.volume-80 .bars .bar:nth-child(3),
.volume-control.volume-100 .bars .bar:nth-child(3),
.volume-control.volume-80 .bars .bar:nth-child(4),
.volume-control.volume-100 .bars .bar:nth-child(4),
.volume-control.volume-100 .bars .bar:nth-child(5) {
background-color: #000000;
}
<div class="control-box">
<div class="volume-control">
<source src="ark.mp3" type="audio/mp3">
<div class="bars">
<span class="bar"></span>
<span class="bar"></span>
<span class="bar"></span>
<span class="bar"></span>
<span class="bar"></span>
<input type="range" min="0" max="100" step="20" value="0">
</div>
</div>
</div>
Ответы (2 шт):
Автор решения: Air
→ Ссылка
Так как значение audio.volume от 0 до 1 а у тя от min="0" до max="100"
надо volumeInput.value * 0.01
замени это
volumeInput.addEventListener("input", setBars);
на это
volumeInput.addEventListener("input", () => {
audio.volume = volumeInput.value * 0.01
setBars()
});
Автор решения: Опан
→ Ссылка
Чтобы прикрутить музыку, нужно тег source обернуть тегами audio:
<audio>
<source src="ark.mp3" type="audio/mpeg"></source>
</audio>
А в начале JS-кода добавть это:
const audio = document.querySelector("audio");
Регулировку громкости прикрутить так, как в первом ответе и главное запустить воспроизведение командой audio.play()
повесив её на какое-то событие.