0

我正在学习 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();
});
4

2 回答 2

3

您不能原生使用 jQuery 为背景颜色设置动画。但是,您可以使用 CSS 转换来做同样的事情,只使用 body 类。

CSS

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

body.blue
{
    background: blue;
}

body.red
{
    background: red;
}

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

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

于 2013-08-16T19:10:40.103 回答
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');
});
于 2013-08-16T19:26:34.877 回答