2013-08-16 60 views
0

我正在學習JavaScript/JQuery。試圖實現身體標記顏色變化

我正在寫一個猜數遊戲,如果用戶猜測錯誤,我試圖.animate() a 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(); 
}); 
+1

我相信你需要'jquery.color'動畫顏色:https://github.com/jquery/jquery-color –

+0

我肯定肯定@DanielGimenez是正確的,需要顏色插件或jQuery UI來爲顏色設置動畫。 – adeneo

+0

使用CSS並應用具有轉換的類,如果他們猜錯了。 –

回答

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/

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'); 
}); 
+0

哇。絕對多一點讓我咀嚼!謝謝你的幫助。 – tcv

+1

提示是問題的根源,找到另一種獲取輸入的方式,並且應該很好,或者在動畫完成後等待提示。 –

+0

該項目的最終目標將使用網頁上的表單,而不是提示。所以,最後提示不會是一個因素。 – tcv