قدم اول : پیاده سازی کدهای HTML
ابتدا اسکلت کد های HTML رو مینویسیم
میتوانید هر تعداد عکسی که میخواهید داشته باشید فقط دقت کنید که هر تگ img باید دخل یک تگ div با class="items" باشد و تمام محتویات داخل یک div دیگر با class="slider" باشد.
<div dir="ltr" class="slider-container">
<div class="slider">
<div class="items">
<img class="item" src="image1.png" alt="image 1" />
</div>
<div class="items">
<img class="item" src="image2.png" alt="image 2" />
</div>
<div class="items">
<img class="item" src="image3.png" alt="image 3" />
</div>
<div class="items">
<img class="item" src="image4.png" alt="image 4" />
</div>
...
</div>
<div id="right" class="nav-buttons">></div>
<div id="left" class="nav-buttons"><</div>
</div>
در این مدل اسلایدر قرار است اسلاید ها در کنار یکدیگر به صورت افقی قرار بگیرند که با استفاده از css این کار را انجام میدهیم و ریسپانسیو میکنیم و سپس با دانش جاوااسکریپت اسلاید هارو به حرکت در میآوریم.
قدم دوم : استایل دهی با کدهای CSS
در این مرحله کد ها فقط برای زیباسازی و ریسپاسیو کردن اسلاید ها استفاده میشود
.slider-container{
padding: 40px;
max-width: 1300px;
margin: 0 auto;
position: relative;
}.slider{
width: 100%;
overflow: hidden;
display: flex;
scroll-behavior: smooth;
gap: 8px;
}.items{
min-width: 100%;
max-width: 100%;
}.item{
min-width: 100%;
max-width: 100%;
height: 300px;
object-fit: cover;
}.nav-buttons{
position: absolute;
top: 50%;
transform: translateY(-50%);
font-size: 24px;
background: #1C1C1C;
color: white;
width: 35px;
height: 35px;
display: flex;
justify-content: center;
align-items: center;
border-radius: 50%;
cursor: pointer;
}#left{
left: 0px;
}#right{
right: 0px;
}
@media screen and (min-width:724px) {
.items{
min-width: 50%;
max-width: 50%;
}
}
@media screen and (min-width:1024px) {
.items{
min-width: 33.333%;
max-width: 33.333%;
}
}
استایل های پایه ای
ابتدا برای کانتینر اصلی یک حداکثر عرض در نظر میگیریم و position:relative میگذاریم برای اینکه دکمه های اسلایدر از کانتینر بیرون نزند.
استایل های اساسی اسلایدر
- display:flex برای اینکه اسلاید ها به صورت افقی کنار هم قرار بگیرند
- overflow:hidden برای اینکه اسلاید های بعدی دیده نشود
- scroll-behavior:smooth برای حرکت هموار اسلاید ها
*نکته: توجه شود که در این مرحله هر تعداد اسلایدی که وجود دارد به صورت فشرده در کنار هم قرار میگیرد این مشکل رو در ادامه با min-width در کلاس items حل میکنیم.
ریسپانسیو کردن اسلاید ها
مقدار min-width همان عرضی هست که میخواهیم اسلایدمون در عرض کل کانتینر نمایش داده بشه. مقدار آن را باتوجه به اندازه تصویر و هدفتان مشخص کنید.
قدم سوم : به حرکت درآوردن اسلایدر با جاوااسکریپت
برای به حرکت در آوردن اسلاید ها و فعال کردن دکمه های قبل و بعد نیاز به جاوااسکریپت دارایم.
const width = window.innerWidth
const counts = width < 724 ? 1 : width < 1024 ? 2 : 3;
const next = document.getElementById("right");
const prev = document.getElementById("left");
const slider = document.querySelector(".slider");
const items = document.querySelectorAll(".items");
let scrollNavigation = 0;
const sliderGap = 8 ; // .slider{gap:8px}
const scrollValue = items[0].offsetWidth + sliderGap;
const goNext = () =>{
if (scrollNavigation < items.length - counts) {
scrollNavigation += 1;
} else {
scrollNavigation = 0;
}
slider.scrollLeft = scrollValue * scrollNavigation;
};
const goPrev = () =>{
if (scrollNavigation > 0) {
scrollNavigation -= 1;
} else {
scrollNavigation = items.length - counts;
}
slider.scrollLeft = scrollValue * scrollNavigation;
};
next.addEventListener("click", goNext);
prev.addEventListener("click", goPrev);
setInterval(()=>{
goNext();
},5000)
اسلاید خوردن ریسپانسیو
با استفاده از item.offsetWidth در جاوااسکریپت به عرض هر اسلاید دسترسی داریم پس فرقی نمیکند که عرض اسلاید چغدر باشد به همون مقدار اسکرول میکنیم.
*نکته اول در ریسپانسیو اسلایدر :
با توجه به منطق کد ما (در سایز نمایشگر های بزرگتر از 724 دو اسلاید و در سایز بزرگتر از 1024 سه اسلاید در صفحه نمایش داده میشود) پس باید آن تعداد رو از کل آیتم ها کم کنیم.
counts = width < 724 ? 1 : width < 1024 ? 2 : 3
items.length - counts
*نکته دوم در ورق خوردن اسلاید ها :
درصورت نیاز به کم یا زیاد کردن فاصلهی بین اسلاید ها (gap) حتما توجه کنید که همان مقدار فاصله رو به متغیر sliderGap در جاوااسکریپت بدهید.
نتیجه گیری
در این آموزش، سعی کردیم یک اسلایدر ساده و کاربردی را به صورت دستی و بدون استفاده از کتابخانههای حجیم پیادهسازی کنیم. با این روش، نه تنها درک بهتری از نحوه کار اسلایدرها به دست آوردیم، بلکه توانستیم کنترل کامل بر روی کدها و عملکرد اسلایدر داشته باشیم. این رویکرد به ما کمک میکند تا در پروژههای مختلف، انعطافپذیری بیشتری داشته باشیم و بتوانیم اسلایدر را به طور دقیق با نیازهای خاص خودمان تطبیق دهیم.
با استفاده از دانش برنامهنویسی خود، میتوانید این اسلایدر را شخصیسازی کنید و آن را برای هر کاری که نیاز دارید، انعطافپذیرتر کنید. این امکان وجود دارد که ویژگیهای جدیدی به آن اضافه کنید، ظاهر آن را تغییر دهید یا حتی آن را با سایر بخشهای پروژهتان یکپارچه کنید.
اگر در هر بخشی از این مقاله به نکتهای برخورد کردید که برایتان نامفهوم یا نیازمند توضیح بیشتر است، خواهشمندیم که با ارسال تیکت به ما، پیشنهاد یا سوالتان را مطرح کنید.