Rehber JavaScript ve SCSS ile slider yapımı

HTML:
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Develop by jSnake</title>
 <!--Fontawesome cdn linki-->
 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
 <link rel="stylesheet" href="app.css">
</head>
<body>
 <div class="container">
 <span id="numberOfSlide">0/2</span>
 <img src="img/1.png" alt="Resim yolu" id="main-image">
 <div class="control">
 <i class="fa-solid fa-arrow-left" id="previous-picture"></i>
 <i class="fa-solid fa-arrow-right" id="next-picture"></i>
 </div>
 </div>
 <script src="script.js"></script>
</body>
</html>

Sass:
*
{
 margin: 0;
 padding: 0;
}

.container
{
 display: flex;
 flex-direction: column;
 justify-content: center;
 align-items: center;
 margin-top: 100px;
}

.container img
{
 width: 500px;
 height: 330px;
}

.container .control
{
 display: flex;
}

.container .control i
{
 margin-left: 50px;
 font-size: 30px;
 cursor: grab;
}
.container span
{
 font-size: 30px;
 font-family: sans-serif;
}

JavaScript:
const images = ["img/1.png","img/2.jpeg","img/3.jpeg"];

let previous_picture = document.getElementById('previous-picture');
let next_picture = document.getElementById('next-picture');
let main_image = document.getElementById('main-image');
let numberOfSlide = document.getElementById('numberOfSlide');
let num = 0;

next_picture.addEventListener('click',() => {
 num++;
 if(num > 2){
 num = 0;
 }
 main_image.src = images[num];
 numberOfSlide.textContent =num+"/2";
})

previous_picture.addEventListener('click',() => {
 num--;
 if(num < 0){
 num = 2;
 }
 main_image.src = images[num];
 numberOfSlide.textContent = num+"/2";
})

setInterval(() => {
 num++;
 if(num > 2){
 num = 0;
 }
 main_image.src = images[num];
 numberOfSlide.textContent =num+"/2";
}, 2000);

Arkadaşlar bugün JavaScript ile bir slider yaptım, istediğiniz yerde kullanabilirsiniz.
Not: SCSS'yi sass compiler eklentisi ile CSS'e dönüştürmeniz lazım.
 
Son düzenleme:
Önizleme eklesen güzel olabilirdi.

Hadi biraz code review yapalım.

Next ve previous butonların işlevleri aynı. Sadece yönleri farklı. Bunun için ortak bir method yapılabilir. Hatta ileride direkt 5. slide göster de istenebilir : ) Bu 3 methodu bir methodda bulundurabilirsin. JumpToSlide gibisinden.

Kullanıcı slide'ı butonlar ile değiştirse dahi interval yüzünden bir sonrakine geçiş yapıyor. Oto geçişi butona bastığımız an sıfırlaman gerekiyor.

Edit; Yanlışlıkla gönderdim. Devam ediyim.

num+"/2" kısmını neden statik olarak yazıyorsun? Direkt olarak array içerisinden ne gelirse onu göstermen gerekiyor.

getElementById methodunu kullanıyorsam, attığım her değişkenin sonuna El ifadesini ekliyorum ki kodu okurken bunun Element olduğunun farkına varıyorum. Standardınız ne ise onu kullanın tabiki, ben kendi standardımı söyledim.

Bu kodu kimse alıp direkt bir projenin içine atamaz. Bunu daha genel bir koda dönüştürmen gerekiyor. Mesela diyelim ki birçok yerde senin slider componentini kullanmak istiyorum? Ama kullanabilir miyim? Kullanırsın tabiki, ama heryer çöp olacak.
Bunun için genel bir JSnakeSlider adında bir class veya functional component yapabilirsin. Veya direkt custom element de üretebilirsin :)

HTML:
<jsnake-slider
        srcset="image1.jpg,
                image2.jpg,
                image3.jpg"
        width="300"
        height="400"
/>
 
Son düzenleme:
num+"/2" kısmını neden statik olarak yazıyorsun? Direkt olarak array içerisinden ne gelirse onu göstermen gerekiyor.

Bu kısmı images.length() kullanarak hallettim.

Bunun için genel bir jsnakeslider adında bir class veya functional component yapabilirsin. Veya direkt Custom element de üretebilirsin :)

Hocam bunu bir functionun içine HTML elementi döndürücek şekilde mi yapmam lazım?
Örnek kodum:

JavaScript:
function myComponent(){
 return '<h2>Example component</h2>'
}

Next ve previous butonların işlevleri aynı. Sadece yönleri farklı. Bunun için ortak bir method yapılabilir. Hatta ileride direkt 5. SLI'de göster de istenebilir: ) bu 3 methodu bir methodda bulundurabilirsin. Jumptoslide gibisinden.

Yani burada aşağıda şöyle yapsam olur mu?
En alta noktalar koysam ve onlara basıldıkça ilerlese slider.
 
Son düzenleme:
Yani burada aşağıda şöyle yapsam olur mu?
En alta noktalar koysam ve onlara basıldıkça ilerlese slider.
Olur tabiki ama ben sana çok daha güzel bir senaryo söyleyim;
Bir proje geliştirirken, hep genel düşünmeye çalış. Mesela ben yazdığın projeyi alıp kendimde kullanmak istiyorum, butonları altta değilde resimlerin sağ ve soluna koymak istiyorum. Resimlerin altınada resimlerin thumbnail koyup orada da bir önizleme gibi görmek istiyorum? Başkası gelir ya butonlara ihtiyaç yok sen onu sağ ve sol ok tuşlarına ata diyebilir. Bir başkası gelir mouse ile swipe etmek isteyebilir.

Mesela senin projen bunu destekliyor mu? Hayır. O sebeple open source proje geliştirirken, kullanacak kişileri özgür bırakman gerekiyor. Kullananlar, componenti çok rahat özelleştirebilmeli.

Biliyorum bu çok basit bir proje. Ama nasıl başlarsan öyle gider.
Şirkette bir progress-bar charts componenti yapmıştım. Elemanın biri içerisine özel bir state atıp onu orada kullanıyor. Ama kardeşim, ben bunu genel yapıyorum. Senin X verini göstermek değil ki hedefim? X de gösteririm, Y de olur Z de. Ama sen o component içerisine X verisini alıp işlersen, Y ve Z verileri yalan olur. Böyle yaparsan PR'ların hep code review den kalır.
 
Olur tabii ki ama ben sana çok daha güzel bir senaryo söyleyim;
Bir proje geliştirirken, hep genel düşünmeye çalış. Mesela ben yazdığın projeyi alıp kendimde kullanmak istiyorum, butonları altta değil de resimlerin sağ ve soluna koymak istiyorum. Resimlerin altınada resimlerin thumbnail koyup orada da bir ön izleme gibi görmek istiyorum? Başkası gelir ya butonlara ihtiyaç yok sen onu sağ ve sol ok tuşlarına ata diyebilir. Bir başkası gelir mouse ile swipe etmek isteyebilir.

Mesela senin projen bunu destekliyor mu? Hayır. O sebeple open Source proje geliştirirken, kullanacak kişileri özgür bırakman gerekiyor. Kullananlar, componenti çok rahat özelleştirebilmeli.

Biliyorum bu çok basit bir proje. Ama nasıl başlarsan öyle gider.
şirkette bir progress-bar charts componenti yapmıştım. Elemanın biri içerisine özel bir state atıp onu orada kullanıyor. Ama kardeşim, ben bunu genel yapıyorum. Senin X verini göstermek değil ki hedefim? X de gösteririm, y de olur Z de. Ama sen o component içerisine X verisini alıp işlersen, Y ve Z verileri yalan olur. Böyle yaparsan Pr'ların hep code reviewden kalır.

Peki vanillajs ile component olusturma konuma da bakar misiniz?
 

Yeni konular

Geri
Yukarı