2016-02-26 78 views
1

我正在創建一個基本的天氣應用程序。它從開放天氣API獲取天氣數據,然後顯示溫度和位置。我找到了SKYCONS,並認爲它們將會是一種很好且簡單的方法來將圖標添加到我的應用中。但是,他們不會出現。Skycons沒有出現

<link rel="stylesheet" href="bootstrap.css"/> 
<link rel="stylesheet" href="style.css"/> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> 
<script src="https://rawgithub.com/darkskyapp/skycons/master/skycons.js"></script> 
<script src="Script.js"></script> 


<body> 
    <div class="col-xs-12 text-center"> 
     <h1>Weather App</h1> 
     <div class="container"> 
      <br> 
      <h3><span id = "city">{City here}</span><span id = "country">{Country here}</span></h3> 
      <h1><span id = "temperature">{Temperature here}</span><span id="unit">&#8457</span></h1> 
      <h2><span id = "weather">{Weather here}</span></h2> 
      <br> 
      <p class = "text"></p> 
      <br> 
      <figure id = "icon"><canvas id="partly-cloudy-night" width="175" height="175"></canvas></figure> 
      <br> 
     </div> 
    </div> 
</body> 

下面是腳本:

$(document).ready(function(){ 

    // gets user's location; shows Earth weather if location cannot be accessed 
    var longitude = 0; 
    var latitude = 0; 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function(position) { 
      latitude = Math.floor(position.coords.latitude); 
      longitude = Math.floor(position.coords.longitude); 
     }); 
    } 

    $.getJSON("http://api.openweathermap.org/data/2.5/weather?lat=" + latitude + "&lon=" + longitude + "&appid=44db6a862fba0b067b1930da0d769e98", function(json){ 

     // gets data from json 
     $("#city").html(json.name); 
     $("#country").html(", " + json.sys.country); 
     var weather = json.weather[0].main; 
     $("#weather").html(weather); 
     var tempInKelvin = parseFloat(json.main.temp); 
     var tempInCelsius = Math.round((tempInKelvin - 273.15)*10)/10; 
     var tempInFahrenheit = tempInCelsius + 32; 
     $("#temperature").html(tempInFahrenheit); // shows temperature in Fahrenheit by default 

     // switches between Fahrenheit and Celsius when clicked 
     var iterator = 1; // because .toggle() was deprecated in jQuery 1.9 
     $("#unit").on("click", function(){ 
      if (iterator % 2 == 1) { 
       $("#unit").html("&#8451"); // change to Celsius 
       $("#temperature").html(tempInCelsius); 
      } else { 
       $("#unit").html("&#8457"); // change back to Fahrenheit 
       $("#temperature").html(tempInFahrenheit); 
      } 
      iterator++; 
     }); 

     // Changes background according to time of day 
     var time = new Date(); 
     time = time.getHours(); 
     var color = ""; 
     if (time >= 19 || time <= 4) { 
      color = "#283048"; 
     } else if (time >= 17) { 
      color = "#F0CB35"; 
     } else if (time >= 7) { 
      color = "#C02425"; 
     } else { 
      color = "#FF512F"; 
     } 

     $("body").css("background-color", color); 

     // adds icon, depending on time and weather 
     var icons = new Skycons({"color": "red"}); 
     var htmlToAdd = ''; 
     switch (weather.toLowerCase()) { 
      case "clouds": 
       if (time >= 19 || time <= 4) { 
        htmlToAdd = '<canvas id="partly-cloudy-night" width="175" height="175"></canvas>'; 
        icons.set("partly-cloudy-night", Skycons.PARTLY_CLOUDY_NIGHT); 
       } else { 
        htmlToAdd = '<canvas id="cloudy" width="175" height="175"></canvas>'; 
        icons.set("cloudy", Skycons.CLOUDY); 
       } 
       $("#weather").html("Cloudy"); 
       break; 
      case "rain": 
       htmlToAdd = '<canvas id="rain" width="175" height="175"></canvas>'; 
       icons.set("rain", Skycons.RAIN); 
       break; 
      case "snow": 
       htmlToAdd = '<canvas id="snow" width="175" height="175"></canvas>'; 
       icons.set("snow", Skycons.SNOW); 
       break; 
      case "clear": 
       if (time >= 19 || time <= 4) { 
        htmlToAdd = '<canvas id="clear-night" width="175" height="175"></canvas>'; 
        icons.set("clear-night", Skycons.CLEAR_NIGHT); 
       } else { 
        htmlToAdd = '<canvas id="clear-day" width="175" height="175"></canvas>'; 
        icons.set("clear-day", Skycons.CLEAR_DAY); 
       } 
       break; 
      default: 
       htmlToAdd = '<canvas id="rain" width="175" height="175"></canvas>'; 
       icons.set("rain", Skycons.RAIN); 
     } 

     $("#icon").html(htmlToAdd); 
     icons.play(); 
    }); 
}); 

是的,我知道我在做的getJSON裏面的一切,但我不知道如何存儲到全局變量的JSON值沒有的getJSON的異步運作方式受阻礙。

回答

0

我知道這是一個古老的問題,但如果有人正在尋找答案,我有同樣的問題,然後我認爲這可能是因爲腳本在頁面加載之前加載。我將腳本移動到頁面的底部,它工作。