Привет, меня зовут Бхарат Сарасват, и это мой первый пост в блоге о создании небольшой панели мониторинга covid-трекера с использованием Vanilla JS.
Почему Vanilla JS?
Я хотел создать небольшую панель инструментов, которая была бы быстрой (например, очень быстрой) и показывала бы данные, мне не хотелось использовать такие фреймворки, как React, VUE и т. д. при разработке.
Иногда вы можете создавать вещи, используя простые инструменты, не участвуя в гонке фреймворков.
Начало работы:
Если вы хотите взглянуть на исходный код, я разместил его на github.
covid-трекер данных с vanilla js
Если хотите посмотреть демо, вот оно: covidtrackerlite.in
Я начал с HTML-кода, в котором есть три карточки: «подтверждено», «активно» и «восстановлено». Мы также можем показать другие показатели в зависимости от данных.
Для настройки скелета я использовал скелетный шаблон, который очень легкий и дает мне компоненты, которые я хотел использовать.
...
<!-- Referencing skeleton here -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css"/>
...
<div class="container">
<h1>
Covid tracker, Data for
<b class="strong">India</b>
</h1>
<div class="row">
<div class="four columns">
<div class="card card--red">
<div class="card__heading">
<h5>Confirmed</h5>
<h2 id="confirmed">260000+</h2>
</div>
</div>
</div>
<div class="four columns">
<div class="card card--blue">
<h5>Active</h5>
<h2 id="active">129000+</h2>
</div>
</div>
<div class="four columns">
<div class="card card--green">
<h5>Recovered</h5>
<h2 id="recovered">129000+</h2>
</div>
</div>
</div>
</div>
Я использовал API для получения доступных данных, и то же самое используется веб-сайтом covid india
Ссылка на API: https://github.com/covid19india/api
Затем я использовал функцию fetch
javascript, чтобы сделать вызов API и установить его для соответствующих элементов DOM, которые я создал ранее.main.js
// fetch covid data and later set it to object cards
(function () {
let countriesData = null;
let elementIds = {
confirmed: "confirmed",
active: "active",
recovered: "recovered",
};
function fetchData() {
// use js fetch
const apiURL = "https://api.covid19india.org/data.json";
fetch(apiURL)
.then((response) => response.json())
.then((data) => {
let summaryData = data.statewise[0];
document.getElementById(elementIds.confirmed).textContent = Number(
summaryData.confirmed
).toLocaleString("en-IN");
document.getElementById(elementIds.active).textContent = Number(
summaryData.active
).toLocaleString("en-IN");
document.getElementById(elementIds.recovered).textContent = Number(
summaryData.recovered
).toLocaleString("en-IN"); // to show correct number format
})
.catch((error) => console.log("api data fetch error", error));
}
// comment this method while developing to save api calls
fetchData();
})();
Я также добавил некоторые стили для деталей карты. Поскольку все до сих пор является ванильным, то почему бы не использовать некоторые переменные CSS 😜😁
main.css
/* CSS variables here */
:root {
--primary-color: #fff;
--secondary-color: #000;
--bg-color: #fff;
--font-color: #000;
--heading-color: #000;
--card-bg: #fff;
/* color variants */
--blood-red: #FF073A;
--cold-blue: #057EFF;
--nice-green: #2AA846;
/* slider */
--slider-color: #ccc;
}
/* dark theme variables here */
[data-theme="dark"] {
--bg-color: #000;
--font-color: #fff;
--card-bg: #333;
}
Подождите... темная тема??
Да, я также сохранил некоторые стили для темной темы. Мы будем реализовывать его позже.
И еще несколько стилей, которые являются глобальными и используются страницей и карточками.main.css
/* global styles */
body,
html {
margin: 0;
padding: 0;
height: 100%;
min-height: 100%;
}
body {
background-color: var(--bg-color);
color: var(--font-color);
transition: all 0.3s ease-out;
}
.container {
height: 80%;
}
.container .strong {
border-bottom: 4px solid var(--font-color);
}
.container .row {
display: flex;
justify-items: center;
align-items: center;
flex-wrap: wrap;
width: 100%;
height: 80%;
}
/* card styles */
.card {
padding: 20px;
border: 1px solid var(--card-border-color);
border-radius: 7px;
box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.15);
background-color: var(--card-bg);
}
.card:hover {
box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.15);
}
/* card variants */
.card.card--red {
border-bottom: 4px solid var(--blood-red);
}
.card.card--blue {
border-bottom: 4px solid var(--cold-blue);
}
.card.card--green {
border-bottom: 4px solid var(--nice-green);
}
/* footer styles */
footer {
background: #000;
color: #fff;
padding: 15px;
width: 100%;
}
Теперь, пока здесь у нас есть готовый шаблон с карточками и динамическими данными. Круто… верно?
Примечание. Не забудьте добавить ссылки на файлы CSS и JS.
Мы можем добавить в наш шаблон функциональность переключения темы (темная тема).
Поэтому нам нужно добавить кнопку-переключатель, которая переключает тему.
Мы можем добавить атрибут data-theme="dark"
к нашему документу или тегу html, поскольку ранее мы уже написали стили, которые в основном обновляют переменные CSS.
Во-первых, мы добавим кнопку переключения темы в наш html index.html
<div class="theme-switch-wrapper">
<label class="theme-switch" for="theme-toggle">
<input type="checkbox" id="theme-toggle" />
<div class="slider round"></div>
</label>
<em>Enable Dark Mode</em>
</div>
и стили для того же.
main.css
/*Simple css to style it like a toggle switch*/
.theme-switch-wrapper {
display: flex;
align-items: center;
}
.theme-switch-wrapper em {
margin-left: 10px;
font-size: 1rem;
}
.theme-switch {
display: inline-block;
height: 34px;
position: relative;
width: 60px;
}
.theme-switch input {
display: none;
}
.slider {
background-color: var(--slider-color);
bottom: 0;
cursor: pointer;
left: 0;
position: absolute;
right: 0;
top: 0;
transition: .2s;
}
.slider:before {
background-color: var(--bg-color);
bottom: 4px;
content: "";
height: 26px;
left: 4px;
position: absolute;
transition: .4s;
width: 26px;
}
input:checked+.slider {
background-color: var(--font-color);
}
input:checked+.slider:before {
transform: translateX(26px);
}
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
Итак, переключатель выглядит хорошо, но он не работает.
Это потому, что нам нужно написать код JS для переключения класса при переключении переключателя.
Ниже я написал код, который делает то же самоеtheme-toggle.js
// theme toggle function, toggles through light and dark mode
(function () {
let themeToggle = document.getElementById("theme-toggle");
themeToggle.addEventListener(
"click",
function (event) {
if (event.target.checked) {
document.documentElement.setAttribute("data-theme", "dark");
localStorage.setItem("data-theme", "dark");
} else {
document.documentElement.setAttribute("data-theme", "light");
localStorage.setItem("data-theme", "light");
}
},
false
);
const currentTheme = localStorage.getItem("data-theme")
? localStorage.getItem("data-theme")
: null;
if (currentTheme) {
document.documentElement.setAttribute("data-theme", currentTheme);
if (currentTheme === "dark") {
themeToggle.checked = true;
}
}
})();
Здесь вы можете найти подробную статью о добавлении темной темы от ananyaneogi.
Вот и все 👏
Теперь у вас должна быть панель управления, которая получает динамические данные и имеет темный режим.
Что ж, это была моя первая статья, и я хотел поделиться проектом с вами.
Дайте мне знать, если это кому-то помогло, также, пожалуйста, сообщите мне, нужно ли мне обновить пост (поскольку я плохой писатель 🙈) или код.
Спасибо за прочтение ✨
Первоначально опубликовано на https://dev.to 22 июля 2020 г.