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

Я знаю, что это старый вопрос, но если кто-то искал ответ, у меня была такая же проблема, и тогда я подумал, что это может быть из-за того, что сценарий загружается до загрузки страницы. Я переместил сценарий в нижнюю часть страницы, и он сработал.

 Смежные вопросы

  • Нет связанных вопросов^_^