HTMLにvideoタグで動画を埋め込んだ場合に、コントロールパネルでなく独自のボタンを設置して音声のオン/オフを切り替える方法をご紹介します。
目次
videoタグに任意の音声切り替えボタンを設置した例
今回やりたいことはこちらです。
「音声をオンにする」のボタンをクリックすると、風の音と虫の声が聞こえ、ミュートが解除されるのが確認できるかと思います。
仕様は以下の通りです。
仕様
- 動画が自動再生されている。
- 最初は音声がミュートになっている。
- 音声切換ボタンを押すと、ミュートが解除される。
- ボタンのテキストが「音声をオンにする」から「音声をオフにする」へと変わる。
コードの見本
コードの見本がこちらです。style.cssやscript.jsの読み込みは省略させていただきます。
<div class="movie"><video class="js-video" src="movie/sky.mp4" autoplay muted></video></div>
<div class="movie__btn"><button class="js-video-button">音声をオンにする</button></div>
/* 動画の縦横比を意地 */
.movie {
margin: 100px 0 0;
width: 100%;
position: relative;
}
.movie::before {
padding-top: 65%;
display: block;
content: "";
}
.movie video {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
}
.movie__btn {
margin-top: 1em;
text-align: center;
}
.movie__btn button {
color: inherit;
font-family: inherit;
font-size: 12px;
padding: 0.5em 1em;
border-radius: 50px;
box-shadow: initial;
display: inline-block;
appearance: none;
border: 1px solid #333;
background-color: initial;
cursor: pointer;
}
// videoタグとbuttonタグを変数に格納
const video = document.querySelector(".js-video");
const videoButton = document.querySelector(".js-video-button");
// mutedを操作する関数を定義
const toggleAudio = () => {
video.muted = !video.muted;;
}
videoButton.addEventListener('click', () => {
// 関数を実行
toggleAudio();
// テキストを操作
if (videoButton.textContent === '音声をオンにする') {
videoButton.textContent = '音声をオフにする';
} else {
videoButton.textContent = '音声をオンにする';
}
});
コードの解説
重要なところを抜粋して解説いたします。
videoタグの属性を設定
<video class="js-video" src="movie/sky.mp4" autoplay muted></video>
ページの読み込みと同時に動画を再生したいので、videoタグにautoplay属性をつけています。また最初は音声をミュートにしたいので、muted属性をつけています。
属性をコントロールする関数を定義
// muted属性を操作する関数を定義
const toggleAudio = () => {
video.muted = !video.muted;;
}
videoタグにmuted属性がなければmutedをつけて、muted属性が存在すればmutedを外す関数を定義しています。
ボタンをクリックした時の処理を指定
videoButton.addEventListener('click', () => {
// 関数を実行
toggleAudio();
// テキストを操作
if (videoButton.textContent === '音声をオンにする') {
videoButton.textContent = '音声をオフにする';
} else {
videoButton.textContent = '音声をオンにする';
}
});
ボタンをクリックすると、
- 上で定義した属性をコントロールする関数を作動させる。
- 現在表示されているボンタのテキストに応じて、表示内容を切り替える。
の2点を行なっています。
「音声をオンにする」「音声をオフにする」のところは任意のテキストに変更することが可能です(変更の際はHTMLのテキストの変更も必要です)。
以上、「HTMLのvideoタグに任意の音声切り替えボタンを設置する方法」でした。今回は音声の切り替えでしたが、今回の方法を応用することで他のvideoタグの属性も制御できそうです!
ご覧いただきありがとうございました。