2016-02-26 95 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

我知道这是一个古老的问题,但如果有人正在寻找答案,我有同样的问题,然后我认为这可能是因为脚本在页面加载之前加载。我将脚本移动到页面的底部,它工作。