آموزش جامع ساخت اپلیکیشن آب و هوا با جاوااسکریپت
🎯 اهداف یادگیری
- آشنایی با کار با API های خارجی در جاوااسکریپت
- یادگیری Fetch API برای دریافت دادههای آب و هوا
- پیاده سازی جستجوی شهرها و نمایش اطلاعات
- استفاده از localStorage برای ذخیره شهرهای جستجو شده
- نمایش آیکنهای متناسب با شرایط جوی
📌 معرفی پروژه
در این پروژه قصد داریم یک اپلیکیشن آب و هوای ساده با قابلیتهای زیر ایجاد کنیم:
javascript
const features = [ "جستجوی آب و هوای شهرها", "نمایش دمای فعلی، حداقل و حداکثر", "نمایش شرایط جوی (آفتابی، ابری، بارانی و ...)", "ذخیره تاریخچه جستجوها", "نمایش اطلاعات اضافی مانند رطوبت و سرعت باد"];
ساختار پروژه:
- HTML: ساختار اصلی صفحه و فرم جستجو
- CSS: استایلدهی به کارتهای آب و هوا
- JavaScript: ارتباط با API و نمایش دادهها
📌 بخش اول: ساختار HTML
ابتدا ساختار اصلی صفحه را ایجاد میکنیم:
html
<!-- ساختار اصلی برنامه --><div class="weather-container"> <h1>اپلیکیشن آب و هوا</h1> <div class="search-section"> <input type="text" id="city-input" placeholder="نام شهر را وارد کنید..."> <button id="search-btn">جستجو</button> </div> <div class="weather-card"> <div class="city-name">تهران</div> <div class="weather-icon">☀️</div> <div class="temp">25°C</div> <div class="description">آفتابی</div> <div class="details"> <div>حداقل: 18°C</div> <div>حداکثر: 30°C</div> <div>رطوبت: 45%</div> <div>سرعت باد: 10 km/h</div> </div> </div> <div class="history-section"> <h3>تاریخچه جستجو</h3> <ul id="history-list"></ul> </div></div>
📌 بخش دوم: استایلدهی با CSS
برای زیباتر شدن برنامه، استایلهای زیر را اضافه میکنیم:
css
.weather-container { max-width: 600px; margin: 0 auto; padding: 20px; font-family: 'Segoe UI', Tahoma, sans-serif;}.weather-card { background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); border-radius: 10px; padding: 20px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); text-align: center; margin-bottom: 20px;}.weather-icon { font-size: 4rem; margin: 10px 0;}
📌 بخش سوم: منطق برنامه با جاوااسکریپت
حالا به بخش اصلی برنامه میرسیم که با جاوااسکریپت نوشته میشود:
javascript
// متغیرهای اصلی برنامهconst API_KEY = 'your_api_key_here'; // کلید API از OpenWeatherMapconst cityInput = document.getElementById('city-input');const searchBtn = document.getElementById('search-btn');const weatherCard = document.querySelector('.weather-card');const historyList = document.getElementById('history-list');// آرایهای برای ذخیره تاریخچه جستجوهاlet searchHistory = JSON.parse(localStorage.getItem('weatherHistory')) || [];// تابع برای دریافت اطلاعات آب و هوا از APIasync function getWeatherData(city) { try { const response = await fetch( `https://api.openweathermap.org/data/2.5/weather?q=${city}&units=metric&appid=${API_KEY}` ); if (!response.ok) { throw new Error('شهر مورد نظر یافت نشد'); } const data = await response.json(); displayWeather(data); addToHistory(city); } catch (error) { alert(error.message); }}
توابع اصلی برنامه:
- getWeatherData: دریافت اطلاعات از API آب و هوا
- displayWeather: نمایش اطلاعات آب و هوا در صفحه
- addToHistory: اضافه کردن شهر به تاریخچه جستجوها
- renderHistory: نمایش تاریخچه جستجوها
- getWeatherIcon: انتخاب آیکن مناسب برای شرایط جوی
📌 پیادهسازی توابع اصلی
حالا به سراغ پیادهسازی توابع اصلی میرویم:
javascript
// تابع برای نمایش اطلاعات آب و هواfunction displayWeather(data) { const cityName = data.name; const temp = Math.round(data.main.temp); const minTemp = Math.round(data.main.temp_min); const maxTemp = Math.round(data.main.temp_max); const humidity = data.main.humidity; const windSpeed = data.wind.speed; const description = data.weather[0].description; const icon = getWeatherIcon(data.weather[0].main); document.querySelector('.city-name').textContent = cityName; document.querySelector('.weather-icon').textContent = icon; document.querySelector('.temp').textContent = `${temp}°C`; document.querySelector('.description').textContent = description; document.querySelector('.details div:nth-child(1)').textContent = `حداقل: ${minTemp}°C`; document.querySelector('.details div:nth-child(2)').textContent = `حداکثر: ${maxTemp}°C`; document.querySelector('.details div:nth-child(3)').textContent = `رطوبت: ${humidity}%`; document.querySelector('.details div:nth-child(4)').textContent = `سرعت باد: ${windSpeed} km/h`;}
📌 اضافه کردن رویدادها
حالا نوبت به اضافه کردن رویدادها میرسد:
javascript
// رویداد کلیک برای دکمه جستجوsearchBtn.addEventListener('click', () => { const city = cityInput.value.trim(); if (city === '') return; getWeatherData(city);});// رویداد کلیک برای تاریخچه جستجوhistoryList.addEventListener('click', (e) => { if (e.target.tagName === 'LI') { const city = e.target.textContent; getWeatherData(city); }});
📌 تست و راهاندازی
در نهایت برنامه را با دستور زیر راهاندازی میکنیم:
javascript
// بارگذاری اولیه تاریخچه جستجوهاdocument.addEventListener('DOMContentLoaded', () => { renderHistory();});
نتیجه نهایی:
حالا شما یک برنامه آب و هوای کامل دارید که میتواند:
- اطلاعات آب و هوای شهرهای مختلف را نمایش دهد
- تاریخچه جستجوها را ذخیره کند
- آیکن مناسب برای شرایط جوی نمایش دهد
- اطلاعات کامل شامل دما، رطوبت و سرعت باد را نشان دهد
📌 قدم بعدی
در درس بعدی با ساخت ماشین حساب در جاوااسکریپت آشنا خواهیم شد!