我正在学习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();
});
答案 0 :(得分:3)
您无法使用jQuery本机动画背景颜色。但是,您可以使用CSS转换来执行相同操作,仅使用正文类。
<强> CSS 强>
body
{
transition: 1s;
-webkit-transition: 1s;
}
body.blue
{
background: blue;
}
body.red
{
background: red;
}
然后只需使用javascript将一个类添加到正文中,就像在这个小提琴中一样:
答案 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');
});