前提・実現したいこと
wordpressを使用したサイトで「ON」ボタンを押したらBGMが流れ、「OFF」ボタンを押したら曲が停止するようにしたいです。ですが、BGMが流れる時にページが遷移すると曲が途切れてしまいます。
sessionStorageを利用すれば出来そうだということまではわかったのですが、いまいち理解しきれてません。
下記コードをどのようにすれば良いかを教えてください。
よろしくお願いします。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
HTML
1<div id="Audio-Control"> 2 <audio id="bgm" preload="" autoplay="" loop="" muted=""> 3 <source src="<?php echo get_template_directory_uri();?>/bgm/akaifuusen.mp3" type="audio/mpeg"> 4 </audio> 5<input type="button" onClick="enableMute()" value="OFF"> 6<input type="button" onClick="disableMute()" value="ON"> 7</div>
JavaScript
1var el = document.getElementById("bgm"); 2 3function enableMute() { 4 el.muted = true; 5} 6 7function disableMute() { 8 el.muted = false; 9} 10 11//データを保存する処理 12disableMute.addEventListener("click", function() { 13 var t = document.getElementById("active").value; 14 15 //①sessionStorageにデータを保存する 16 window.sessionStorage.setItem("test", t); 17 18 //②sessionStorageからデータを取り出す 19 var t = window.sessionStorage.getItem("test"); 20 21 $('#Audio-Control button').toggleClass("t"); 22 23 24}, true); 25 26//データを削除する処理 27enableMute.addEventListener("click",function(){ 28 29 //③保存データを全部削除する場合 30 window.sessionStorage.clear(); 31 32},true); 33
試したこと
iframeやpjaxを利用する方法も見つけましたら、理解不足のため成功することはできませんでした。
上記コードで作成した場合、トップページで「ON」ボタンで再生後、他ページを表示させるとBGMは停止され、そのページで改めて「ON」ボタンを押すと初めから再生されます。
JavaScript
$('#Audio-Control button').toggleClass("active");
上記の"active"の部分が保持できればいいのかと思ってましたが。
・BGMを流すのに参考にしたサイト
https://blanche-toile.com/web/html5-audio-bgm-switch
・sessionStorageを参考にしたサイト
https://the-zombis.sakura.ne.jp/wp/blog/2012/05/12/post-1347/
http://javatechnology.net/javascript/sessionstorage-localstorage/
補足情報(FW/ツールのバージョンなど)
WordPress 5.2.3