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:
SCSS'ten dönüştürülecek bir şey yok ki. Direkt CSS dosyasına atabilirler.
 
SCSS'ten dönüştürülecek bir şey yok ki. Direkt CSS dosyasına atabilirler.

Evet ona çok dikkat etmedim, ama renkleri vesaire tanımlamış olsaydım o zaman dönüştürme yapmaları gerekirdi. Teşekkürler.
 
Ö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>'
}


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.
 

Peki vanillajs ile component olusturma konuma da bakar misiniz?
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…