-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
124 lines (115 loc) · 4.88 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
document.getElementById('weatherForm').addEventListener('submit', function(event) {
event.preventDefault();
const city = document.getElementById('cityInput').value;
const apiKey = document.getElementById('apiKeyInput').value;
const proxyUrl = 'https://cors-anywhere.herokuapp.com/';
// Проверка на наличие API ключа
if (!apiKey) {
alert('Пожалуйста, введите ваш API ключ.');
return;
}
// Получить широту и долготу по названию города
fetch(`${proxyUrl}http://api.openweathermap.org/geo/1.0/direct?q=${city}&limit=1&appid=${apiKey}`)
.then(response => response.json())
.then(data => {
if (data.length > 0) {
const { lat, lon } = data[0];
// Получить данные о погоде по широте и долготе
fetch(`${proxyUrl}https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&units=metric&lang=ru&appid=${apiKey}`)
.then(response => response.json())
.then(weatherData => {
const weatherResult = document.getElementById('weatherResult');
const weatherIcon = document.getElementById('weatherIcon');
const cityName = document.getElementById('cityName');
const temperature = document.getElementById('temperature');
const description = document.getElementById('description');
const humidity = document.getElementById('humidity');
const windSpeed = document.getElementById('windSpeed');
const backgroundAnimation = document.getElementById('backgroundAnimation');
cityName.textContent = `${weatherData.name}, ${weatherData.sys.country}`;
temperature.textContent = `Температура: ${weatherData.main.temp}°C`;
description.textContent = `Погода: ${weatherData.weather[0].description}`;
humidity.textContent = `Влажность: ${weatherData.main.humidity}%`;
windSpeed.textContent = `Скорость ветра: ${weatherData.wind.speed} м/с`;
const iconCode = weatherData.weather[0].icon;
weatherIcon.className = ''; // Сброс иконки
weatherIcon.classList.add('fas');
weatherIcon.classList.add(mapIconCodeToClass(iconCode));
// Установить анимацию фона в зависимости от погодного условия
backgroundAnimation.className = '';
backgroundAnimation.classList.add('background-animation');
backgroundAnimation.classList.add(mapIconCodeToBackground(iconCode));
})
.catch(error => console.error('Ошибка при получении данных о погоде:', error));
} else {
alert('Город не найден. Пожалуйста, попробуйте снова.');
}
})
.catch(error => console.error('Ошибка при получении данных о местоположении:', error));
});
function mapIconCodeToClass(iconCode) {
switch (iconCode) {
case '01d':
return 'fa-sun';
case '01n':
return 'fa-moon';
case '02d':
case '02n':
return 'fa-cloud-sun';
case '03d':
case '03n':
case '04d':
case '04n':
return 'fa-cloud';
case '09d':
case '09n':
return 'fa-cloud-showers-heavy';
case '10d':
case '10n':
return 'fa-cloud-rain';
case '11d':
case '11n':
return 'fa-bolt';
case '13d':
case '13n':
return 'fa-snowflake';
case '50d':
case '50n':
return 'fa-smog';
default:
return 'fa-question';
}
}
function mapIconCodeToBackground(iconCode) {
switch (iconCode) {
case '01d':
return 'sunny';
case '01n':
return 'night';
case '02d':
case '02n':
return 'cloudy';
case '03d':
case '03n':
case '04d':
case '04n':
return 'overcast';
case '09d':
case '09n':
return 'showers';
case '10d':
case '10n':
return 'rain';
case '11d':
case '11n':
return 'storm';
case '13d':
case '13n':
return 'snow';
case '50d':
case '50n':
return 'fog';
default:
return 'default';
}
}