royalsite logo
handmade-slider-code

آموزش ساخت اسلایدر دست‌نویس : صفر تا صد HTML ,CSS ,JS

date time
user

متین قاسمی

link icon
HTML
-
CSS
-
JS

تا به حال شده است هنگام طراحی سایت به این فکر کنید که یک اسلایدر، بدون استفاده از کتابخانه و یا کد های آماده جاوااسکریپت که دارای هزاران خط کد هستند که سرعت وب‌سایت شمارو به شکل قابل توجهی پایین می‌آورند ایجاد کنید؟ پس این آموزش برای شماست.

در پایان این آموزش شما قادر خواهید بود که یک اسلایدر ریسپانسیو بدون استفاده از کدهای آماده و کاملا دست‌نویس بسازید.

اسلاید 1

اسلاید 2

اسلاید 3

اسلاید 4

اسلاید 5

اسلاید 6

<

قدم اول : پیاده سازی کدهای 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">&gt;</div>

<div id="left" class="nav-buttons">&lt;</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 در جاوااسکریپت بدهید.

نتیجه گیری

در این آموزش، سعی کردیم یک اسلایدر ساده و کاربردی را به صورت دستی و بدون استفاده از کتابخانه‌های حجیم پیاده‌سازی کنیم. با این روش، نه تنها درک بهتری از نحوه کار اسلایدرها به دست آوردیم، بلکه توانستیم کنترل کامل بر روی کدها و عملکرد اسلایدر داشته باشیم. این رویکرد به ما کمک می‌کند تا در پروژه‌های مختلف، انعطاف‌پذیری بیشتری داشته باشیم و بتوانیم اسلایدر را به طور دقیق با نیازهای خاص خودمان تطبیق دهیم.

با استفاده از دانش برنامه‌نویسی خود، می‌توانید این اسلایدر را شخصی‌سازی کنید و آن را برای هر کاری که نیاز دارید، انعطاف‌پذیرتر کنید. این امکان وجود دارد که ویژگی‌های جدیدی به آن اضافه کنید، ظاهر آن را تغییر دهید یا حتی آن را با سایر بخش‌های پروژه‌تان یکپارچه کنید.

اگر در هر بخشی از این مقاله به نکته‌ای برخورد کردید که برایتان نامفهوم یا نیازمند توضیح بیشتر است، خواهشمندیم که با ارسال تیکت به ما، پیشنهاد یا سوالتان را مطرح کنید.

royalsite admin

نوشته شده توسط متین قاسمی مدیر آکادمی رویال سایت

Senior Frontend Developer

Senior Backend Developer

SEO Webmaster

Data Analyst

با بیش از سه سال تجربه طراحی سایت

instagram icon
telegram icon
sorush messenger icon
igap messenger icon
Linkedin platform