javascript - 循环通过背景图像 onClick 工作 - 但仅在 secondClick

标签 javascript css loops onclick

我想在两个不同的主题(例如白天模式和夜间模式)之间循环点击背景图像和背景颜色。我正在使用以下代码,该代码有效,但存在两个问题:

  1. 该函数仅在第二次点击时更改背景。第一次点击链接不会更改背景 CSS。
  2. 我只有两个背景图像/颜色我想在它们之间循环,但我不知道如何使代码在两者之间循环,所以我有一个很长的数组,最终会中断。

代码:

var allImages = ["bg-clouds.png", "bg-cloudsNight.png", "bg-clouds.png", "bg-cloudsNight.png", "bg-clouds.png"];

var allColors = ["#b7d9ef", "#011157", "#b7d9ef", "#011157", "#b7d9ef"];

$(document).ready(function() {
    $("#theLink").click(function() {
        var newImageLink = allImages.pop();
        var newColor = allColors.pop();
        $("body").css("background-image", "url(" + newImageLink + ")");
        $("body").css("background-color", "" + newColor + "");
    });
}); 

你能告诉我为什么这个功能只在第二次点击时有效吗?

PS:您可以在 ewb.atworq.com/permagoo/上看到它的运行情况(#theLink 在左上角)

最佳答案

我会采取稍微不同的方法来解决第一次点击问题,让您永远循环颜色。

将如下内容添加到您的页面模板中:

<style>
.daytime {
   background-image: url('bg-clouds.png');
   background-color: #b7d9ef;
}
.nighttime {
   background-image: url('bg-cloudsNight.png');
   background-color: #011157;
}
</style>

然后编辑您的模板或其他内容:<body class="daytime">当页面呈现时

现在,您只需将类名从 daytime 更改为即可切换图像和颜色。至 nighttime像这样:

<script>
$(document).ready(function() {
    $('#theLink').click(function() {
        $('body').toggleClass('daytime nighttime');
        return false;
    });
});
</script>

调用.toggleClass()将删除元素上存在的任何类( daytime 将存在于第一个 click 上)并添加任何不存在的类( nighttime 将被添加)。

关于javascript - 循环通过背景图像 onClick 工作 - 但仅在 secondClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12760873/

相关文章:

javascript - 在父 div 中居中几个 div

html - 如何使用 Material 设计或自定义 CSS 设置 simple_form 的样式

css - 在伪元素上添加 CSS 类

javascript - 使用 'for..in' 和 'if' 迭代条件删除对象属性

MySQL存储过程用游标查找所有错误日期值

javascript - Postman 测试使用 HTTP 状态代码的 switch 语句

javascript - 如何在 JavaScript 中指定 Math.log() 的基数?

javascript - 如何让旋转结果后弹出警报?

JavaScript。计算百分比结果有 1% 的差异

c - 无法正确终止 "while"循环