Погода является неотъемлемой частью нашей жизни, влияя на нашу повседневную деятельность, планы путешествий и даже на наше настроение. Разве не было бы здорово иметь визуально привлекательную и информативную панель мониторинга погоды, которая предоставляет данные о погоде в реальном времени вместе с информативными диаграммами и картами? В этой статье мы познакомим вас с процессом создания интерактивной панели мониторинга погоды под названием Earth Flow с использованием HTML, CSS и JavaScript.
Настройка среды
Прежде чем углубляться в код, давайте удостоверимся, что у нас есть необходимые зависимости и библиотеки. Earth Flow использует платформу Bootstrap, карты Leaflet, Highcharts для визуализации данных и Font Awesome для значков. Убедитесь, что в разделе <head>
вашего HTML-файла есть следующие ссылки:
<!-- Required meta tags --> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <!-- Bootstrap CSS v5.2.1 --> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" /> <!-- Leaflet map --> <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" /> <!-- Google Font - Space Grotesk --> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk&display=swap" rel="stylesheet" /> <!-- Font Awesome --> <script src="https://kit.fontawesome.com/ada9dfd0e0.js" crossorigin="anonymous"></script> <!-- Custom CSS --> <link rel="stylesheet" href="./style.css" />
В дополнение к ссылкам на CSS и шрифты нам нужно включить необходимые библиотеки JavaScript в конце тега <body>
:
<!-- Highcharts --> <script src="https://code.highcharts.com/highcharts.js"></script> <script src="https://code.highcharts.com/modules/series-label.js"></script> <script src="https://code.highcharts.com/modules/exporting.js"></script> <script src="https://code.highcharts.com/modules/export-data.js"></script> <script src="https://code.highcharts.com/modules/accessibility.js"></script> <!-- Bootstrap JavaScript Libraries --> <script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-7VPbUDkoPSGFnVtYi0QogXtr74QeVeeIs99Qfg5YCF+TidwNdjvaKZX19NZ/e6oz" crossorigin="anonymous"></script> <!-- Leaflet map --> <script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script> <!-- jQuery --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <!-- Custom JavaScript --> <script src="./index.js"></script>
Теперь, когда наша среда настроена, давайте приступим к реализации кода.
Построение HTML-структуры
Первый шаг — определить HTML-структуру нашей панели прогноза погоды. У нас будет заголовок, основной раздел и нижний колонтитул. Вот фрагмент структуры HTML:
<!DOCTYPE html> <html lang="en"> <head> <title>Earth Flow</title> <!-- Required meta tags, CSS links, and libraries --> </head> <body> <header> <!-- Navbar --> </header> <main> <!-- Location and weather overview section --> <!-- Weekly charts section --> </main> <footer> <!-- Footer content --> </footer> </body> </html>
Эта панель навигации включает логотип Earth Flow, название бренда и поле ввода для поиска, позволяющее пользователям искать определенное место. Мы использовали значки Font Awesome, чтобы улучшить визуальную привлекательность кнопки поиска.
Разработка раздела «Обзор погоды»
В разделе обзора погоды отображаются текущие погодные условия, включая температуру, влажность и скорость ветра. Он также предоставляет карту для визуализации местоположения. Вот HTML-код этого раздела:
<section class="topSection"> <div class="container-fluid"> <div class="row"> <h2>Today OverViews</h2> <div class="col col-lg-6 col-12 DailyWeather"> <div class="countryDiv d-flex"> <!-- Country icon and name --> <!-- Temperature, humidity, and wind speed --> </div> <div class="WeatherDailyList"></div> </div> <div class="col col-lg-6 col-12 weatherMapContainer"> <div class="weatherMap"></div> </div> </div> </div> <img src="" alt="" /> </section>
Внутри контейнера .DailyWeather
мы отобразим значок и название страны, температуру, влажность и скорость ветра. Контейнер .WeatherDailyList
будет динамически заполнять данные о погоде за разные промежутки времени. .weatherMapContainer
будет держать карту листовки, чтобы визуализировать местоположение. Не забудьте включить необходимые классы CSS для правильного стиля.
Включая недельные графики
Чтобы предоставить пользователям информацию о еженедельных тенденциях погоды, мы добавим информативные графики. Вот код HTML для раздела недельных графиков:
<section class="weeklyCharts"> <div class="container-fluid"> <div class="row"> <div class="d-flex"> <h3>Weekly OverViews</h3> <a href="#temprature" class="text-secondary"> More</a> </div> <div class="col col-lg-6 col-12"> <figure class="highcharts-figure humidityChart"> <div id="humidity"></div> </figure> </div> <div class="col col-lg-6 col-12"> <figure class="highcharts-figure"> <div id="temprature"></div> </figure> </div> <div class="col col-lg-6 col-12"> <figure class="highcharts-figure"> <div id="pressure"></div> </figure> </div> <div class="col col-lg-6 col-12"> <figure class="highcharts-figure"> <div id="overViewAll"></div> </figure> </div> </div> </div> </section>
Этот раздел включает четыре цифры Highcharts, представляющие влажность, температуру, давление и общие погодные тенденции. Вы можете настроить заголовки диаграмм, подзаголовки и количество диаграмм в соответствии со своими предпочтениями.
Стилизация с помощью CSS
Чтобы наша панель мониторинга погоды выглядела привлекательно, мы добавим пользовательский CSS. Вы можете определить свои стили в теге <style>
в файле HTML или связать внешний файл CSS. Вот обзор основных используемых классов CSS:
.navbar
: стили общего вида панели навигации..brandName
: управляет расположением и выравниванием названия бренда и логотипа..search-input-Div
: стили для поля ввода поиска и значка поиска..topSection
: определяет макет раздела обзора погоды..DailyWeather
: стили макета ежедневной информации о погоде..weatherMapContainer
: настраивает внешний вид контейнера карты погоды..weeklyCharts
: определяет расположение и интервалы раздела недельных графиков..humidityChart
,.highcharts-figure
: стили отдельных фигур диаграммы.
Не стесняйтесь настраивать эти стили в соответствии с желаемой эстетикой дизайна.
Получение данных о погоде
Теперь самое интересное — получение данных о погоде в реальном времени с помощью OpenWeatherMap API. Мы будем использовать JavaScript для получения данных о погоде и динамического обновления приборной панели. Вот код, отвечающий за получение данных о погоде:
const endpoints = { weather: { baseUrl: 'https://api.openweathermap.org/data/2.5/forecast', apiKey: '4f944c0231428c0ac6ebf79e36eba04d' }, }; let countryChoice = 'Addis Ababa'; fetchWeatherData(countryChoice); $('.searchIcon').click(function() { const userChoice = $('.search-input').val(); if (userChoice !== '') { countryChoice = userChoice; fetchWeatherData(countryChoice); } }); function fetchWeatherData(city) { const weatherURL = `${endpoints.weather.baseUrl}?q=${city}&appid=${endpoints.weather.apiKey}&units=metric`; fetch(weatherURL) .then((response) => response.json()) .then((data) => { weatherData(data); }) .catch((error) => { console.log("Error:", error); }); } const weatherData = (data) => { // Process and display weather data };
В объекте endpoints
мы храним базовый URL-адрес API OpenWeatherMap и предоставленный ключ API. Функция fetchWeatherData
отправляет запрос в API, используя указанное название города. После получения данных вызывается функция weatherData
для обработки и отображения информации о погоде.
Отображение данных о погоде и карт
Функция weatherData
отвечает за извлечение необходимых данных о погоде и обновление приборной панели. Вот фрагмент кода, который заполняет раздел обзора погоды:
const weatherData = (data) => { const listOfWeatherData = data.list; const startDate = fixDateInterval(data.list[0].dt_txt); const humidityArray = []; const tempArray = []; const windArray = []; // Extract relevant data and populate arrays // Display country icon, name, temperature, humidity, wind speed, and map createWeatherList(iconArray, tempArray, humidityArray, windArray, startDate, data); createMap(xAxis, yAxis); };
Мы извлекаем необходимые данные о погоде из ответа API и сохраняем их в массивах (humidityArray
, tempArray
, windArray
и т. д.). Эти массивы будут использоваться для заполнения списка погоды и диаграмм. Функция createWeatherList
динамически генерирует список погоды на основе временных интервалов, а функция createMap
создает карту Leaflet с предоставленными широтой (xAxis
) и долготой (yAxis
).
Наконец, мы создаем диаграммы с помощью библиотеки Highcharts. Функции createHumidityChart
, createPressureChart
, createTempChart
и createOverAllChart
создают соответствующие диаграммы, передавая необходимые данные и конфигурации.