frontend developer هستم. عاشق یاد گرفتن و یاد دادن چیزای باحال
مینی پروژه جاوا اسکریپت : Progress Steps
سلام سلام سلام
توی این مقاله قراره یه پروژه کوچیک ولی باحال و با هم کار کنیم.
یه مدت خودم دنبال اینجور چیزی بودم ولی پیداش نکردم واسه همین تصمیم گرفتم خودم بنویسمش.
حرف دیگه بسه بریم سراغ کدمون.
خیلی سریع می ریم سراغ فایل Html :
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>progress steps</title>
</head>
<body>
<div class="container">
<div class="progress-container">
<div class="progress" id="progress"></div>
<div class="circle active">1</div>
<div class="circle">2</div>
<div class="circle">3</div>
<div class="circle">4</div>
</div>
<button class="btn" id="prev" disabled>قبلی</button>
<button class="btn" id="next">بعدی</button>
</div>
<script src="script.js">
</body>
</html>
خوب همونجور که دیدین چیز سختی نداشت تا اینجا
حالا بریم سراغ فایل css تا یه خورده خوشگل تر کنیم کارمونو:
اول سه سری استایل اولیه میدیم به کارمون در ضمن ما به یه سری رنگ نیاز داریم که اونارم توی root تعریف می کنیم چون که زیاد باهاشون کار داریم:
:root {
--line-border-fill: #3498db;
--line-border-empty: #e0e0e0;
}
* {
box-sizing: border-box;
font-family: 'Vazir', sans-serif;
margin: 0;
padding: 0;
}
body {
background-color: #f6f7fb;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
حالا بریم container هامونو مشخص کنیم:
.container {
text-align: center;
}
.progress-container {
position: relative;
display: flex;
justify-content: space-between;
max-width: 100%;
width: 350px;
margin: 30px;
}
واسه این که ازالمنت اضافه استفاده نکنیم میایم و از sudo element کمک میگیریم:
.progress-container::before {
content: '';
background-color: var(--line-border-empty);
position: absolute;
top: 50%;
left: 0;
transform: translateY(-50%);
height: 3px;
width: 100%;
z-index: -1;
}
می ریم سراغ خطی که قراره پر بشه و میزان پیشرفت و به ما نشون بده :
.progress {
background-color: var(--line-border-fill);
position: absolute;
top: 50%;
left: 0;
transform: translateY(-50%);
height: 3px;
width: 0%;
z-index: -1;
transition: .4s ease;
}
حالا دایره هایی رو درست می کنیم که قراره نشون بدن که ما الان کدوم مرحله ایم:
.circle {
width: 30px;
height: 30px;
border-radius: 50%;
background-color: #fff;
border: 3px solid var(--line-border-empty);
display: flex;
justify-content: center;
color: #999;
align-items: center;
}
.circle.active {
border-color: var(--line-border-fill);
}
حالا اون دکمه های قبلی و بعدی رو قشنگ ترشون می کنیم:
.btn {
padding: 8px 30px;
background-color: var(--line-border-fill);
color: #fff;
transition: .4s ease;
border-radius: 4px;
}
.btn:active {
transform: scale(.98);
}
.btn:disabled {
background-color: var(--line-border-empty);
cursor: not-allowed;
color: #000;
}
تا اینجا خیلی خوب پیش اومدیم حالا بریم سر وقت جاوا اسکریپت:
اول نیاز داریم 5 تا متغیر تعریف کنیم:
const progress = document.getElementById("progress");
const next = document.getElementById("next");
const prev = document.getElementById("prev");
const circles = document.querySelectorAll(".circle");
let currentActive = 1;
حالا توی دکمه ها event کلیک تعریف می کنیم:
next.addEventListener("click", () => {
currentActive++;
if (currentActive > circles.length) {
currentActive = circles.length;
}
update();
});
prev.addEventListener("click", () => {
currentActive--;
if (currentActive < 1) {
currentActive = 1;
}
update();
});
حالا اون متد update رو تعریف می کنیم:
function update() {
circles.forEach((circle, index) => {
if (index < currentActive) {
circle.classList.add("active");
} else {
circle.classList.remove("active");
}
});
const actives = document.querySelectorAll(".active");
progress.style.width =
((actives.length - 1) / (circles.length - 1)) * 100 + "%"
if (currentActive === 1) {
prev.disabled = true;
} else if (currentActive === circles.length) {
next.disabled = true;
} else {
prev.disabled = false;
next.disabled = false;
}
}
اینم از این پروژه باحال
حتما سعی کنید خودتون کدشو بزنید تا یاد بگیرید.
اگه فایل پروژه رو میخواید می تونید به گیت هاب من بیاید.
تا پروژه بدی بدروود.
مطلبی دیگر از این انتشارات
معرفی ابزار لینوکسی برای مدیران سیستم، mmwatch
مطلبی دیگر از این انتشارات
پروژه css : جعبه جست و جو
مطلبی دیگر از این انتشارات
چطور دو تا ماشین لینوکسی را با کابل LAN مستقیم به یک دیگر وصل کنیم؟