尝试实现body标签颜色更改

时间:2013-08-16 19:02:53

标签: javascript jquery jquery-ui jquery-animate

我正在学习Javascript / JQuery。

我正在编写一个猜数字游戏,如果用户猜错,我正在.animate()backgroundColor进行id更改。我已经看到了一些这方面的例子,特别是在JQuery网站上发现了一个我正在尝试使用的例子。

您可以在此处查看代码:https://github.com/thecompu/hc

否则,它在下面。

注意:如果您在浏览器中运行index.html,则会将随机数记录到控制台,但如果您没有打开控制台,则无法看到它。但是,数字选择仅在1到10之间。

现在发生的事情是,如果您猜错号码,我会再次提示您,就像我想要的那样。但我也希望身体背景颜色变为红色。相反,在用户给出正确答案后,背景颜色会更改,并且不会设置动画。

$(document).ready(function () {
    var answer = Math.floor(Math.random() * 10) + 1;
    console.log(answer);

    function game() {
        var guess = prompt("Choose a number!");
        guess = Number(guess);
        if (guess !== answer) {
            $("#bg").animate({
                backgroundColor: "#F00",
                color: "#000",
            }, 1000);
            console.log("Nope!");
            game();
        } else {
            console.log("Yay!");
        }
    }
    game();
});

2 个答案:

答案 0 :(得分:3)

您无法使用jQuery本机动画背景颜色。但是,您可以使用CSS转换来执行相同操作,仅使用正文类。

<强> CSS

body
{
    transition: 1s;
    -webkit-transition: 1s;
}

body.blue
{
    background: blue;
}

body.red
{
    background: red;
}

然后只需使用javascript将一个类添加到正文中,就像在这个小提琴中一样:

http://jsfiddle.net/jakelauer/bUNkJ/

答案 1 :(得分:1)

即使项目中包含jquery颜色,问题仍然存在。问题的根源是使用prompt。它可以防止浏览器执行,并且由于你不断重新调用它,你永远不会给动画一个机会。

这是一个使用jquery-ui(它是你的项目的一部分)以及jquery.color的事件驱动方法。它远非完美,但你明白了这一点:

$(document).ready(function () {
    $('#guessPrompt').dialog({
        autoOpen: false,
        buttons: {}
    });

    $('#guessInput').keypress(function () {
        if ($('#guessInput').val() != answer) {
            $('#guessInput').val('');
            $('#guessPrompt').dialog('close');
            $("#bg").animate({
                backgroundColor: "#F00",
                color: "#000"
            }, {
                duration: 1000,
                always: function () {
                    console.log('hi');
                    $('#guessPrompt').dialog('open');
                    $('#bg').css('backgroundColor', '#888');
                }
            });
            console.log('Nope');
        } else {
            console.log('yay');
        }
    });
    var answer = Math.floor(Math.random() * 10) +1;
    $('#guessPrompt').dialog('open');
});