【发布时间】:2017-12-31 03:22:28
【问题描述】:
我是 JS/jQuery 的新手,如果我犯了一个非常愚蠢的错误,请原谅我! :)
var backgroundTrackObj = document.createElement("audio");
backgroundTrackObj.src = "//tjone270.org/quakelive/2-24%20The%20Fiery%20Stronghold.mp3";
backgroundTrackObj.volume = 0.1;
var playpauseButton = $("#playpause_background");
function BackgroundTrack(nochange) {
if (typeof(Storage) !== "undefined") {
var bgMusic = localStorage.getItem("bgMusic");
if (bgMusic === "false") {
backgroundTrackObj.pause();
playpauseButton.removeClass("fa-pause");
playpauseButton.addClass("fa-play");
if (!nochange) {
localStorage.setItem("bgMusic", "false");
}
} else if (bgMusic === "true" || bgMusic === null) {
backgroundTrackObj.play();
playpauseButton.removeClass("fa-play");
playpauseButton.addClass("fa-pause");
if (!nochange || bgMusic === null) {
localStorage.setItem("bgMusic", "true");
}
}
} else {
backgroundTrackObj.play();
}
}
BackgroundTrack(true);
这是我的代码。我将它作为文件加载到当前页面(通过<script src>)。
我的导航栏中有一个可点击的图标:
<li><a class="navbar-brand" style="color: white; text-decoration: none;" onclick="BackgroundTrack(false)"><i id="playpause_background" class="fa"></i></a></li>
当页面加载时,它运行BackgroundTrack(true)。我希望它查看本地存储中的 bgMusic 键,如果发现具有“true”或“false”值,则相应地播放或不播放,并更改可点击图标的图标以匹配当前状态。
当我单击按钮时,没有任何反应,但是如果我手动设置本地存储密钥,音乐播放/不正确播放,但按钮本身不会设置 bgMusic 密钥。如果密钥以前不存在,BackgroundTrack(true) 会将密钥设置为“true” - 但这与我目前拥有的运气一样多。
我已经在 backgroundTrackObj var 上手动测试了 .play() 和 .pause() 方法,这在 Chrome 控制台中运行良好。然而,使用.addClass 和.removeClass 似乎根本不起作用。
有什么想法吗?
【问题讨论】:
-
在
jsfiddle或 SO Snippet 中提供一个活生生的例子。 -
由于它在控制台中工作正常,我认为你有问题 if ' if (typeof(Storage) !== "undefined") {'.我建议您从函数中删除除添加/删除类逻辑之外的所有内容,并逐个添加功能。
-
添加了jsFiddle链接@Mr.x
-
@Animus 我也是这么想的,但不可能是因为
bgMusic键是在本地存储中设置的,这意味着执行超出了那个点。 -
@ThomasJones 很抱歉很久没有回答。 codepen.io/anon/pen/dJWzEO 这就是我的意思。另外,最好使用cdn:bootstrapcdn.com/fontawesome
标签: javascript jquery twitter-bootstrap-3 local-storage font-awesome