Javascript 30 - Gün 27
22 Mayıs 2023Projenin demosu : Demo
Başlangıç dosyalarını bulabileceğiniz repom: js-30 | github
Amaç
Bugünkü projemizde, yatayda sayfaya sığmayan bir slider elementi olduğunu düşünelim. JavaScript kullanarak, bu sliderı tıklanıp fare ile sürüklendiğinde hareket ettirmeyi hedefliyoruz.
Çözüm
HTML:
<div class="items">
<div class="item item1">01</div>
<div class="item item2">02</div>
<div class="item item3">03</div>
<div class="item item4">04</div>
<div class="item item5">05</div>
<div class="item item6">06</div>
<div class="item item7">07</div>
<div class="item item8">08</div>
<div class="item item9">09</div>
<div class="item item10">10</div>
<div class="item item11">11</div>
<div class="item item12">12</div>
<div class="item item13">13</div>
<div class="item item14">14</div>
<div class="item item15">15</div>
<div class="item item16">16</div>
<div class="item item17">17</div>
<div class="item item18">18</div>
<div class="item item19">19</div>
<div class="item item20">20</div>
<div class="item item21">21</div>
<div class="item item22">22</div>
<div class="item item23">23</div>
<div class="item item24">24</div>
<div class="item item25">25</div>
</div>
Javascript:
<script>
// slider elementimizi seçelim
const slider = document.querySelector('.items');
/*
* Tıklama, sürükleme işlemleri sırasında kullanılacak değişkenleri oluşturalım.
* isDown : Farenin tıklanma durumunu belirtir.
* startX : İlk tıklanan X kooardinatını kaydedeceğimiz değişkendir. Bu sayede slider'ı
* ne miktarda kaydırmamız gerektiğini belirleyebileceğiz.
* scrollLeft: Mevcut kaydırma değerini saklayacağımız değişken olacak.
*/
let isDown = false;
let startX;
let scrollLeft;
// Fareye tıklandığında
slider.addEventListener('mousedown', (e) => {
isDown = true;
// slider'a active sınıfını ekleyeceğiz bu sınıf div'in küçük bir miktar büyümesini
// ve işaretçinin el işaretine dönüşmesini sağlayacaktır.
slider.classList.add('active');
// tıklamaya tam olarak nereden başladığımızı kaydedelim.
startX = e.pageX - slider.offsetLeft;
// burada slider.offSetleft değerini çıkarıyoruz
// çünkü slider sayfanın tam solundan başlamıyor bir miktar boşluk mevcut
// mevcut olarak ne kadar yana doğru kaydırıldığını kaydedelim.
scrollLeft = slider.scrollLeft;
});
// fare slider alanının dışına çıktığında
slider.addEventListener('mouseleave', () => {
isDown = false;
slider.classList.remove('active');
});
// fare tıklaması bırakıldığında
slider.addEventListener('mouseup', () => {
isDown = false;
slider.classList.remove('active');
});
// fare hareket ettiğinde (yani sürükleme işlemi gerçekleştiğinde)
slider.addEventListener('mousemove', (e) => {
if (!isDown) return; // eğer fareye basılı tutulmuyorsa çalışmayı durdur
// fare hareket ettirildikten sonraki fare konumunu hesapla
const x = e.pageX - slider.offsetLeft;
// başlangıç konumu ile mevcut konum arasındaki farkı hesapla
// bunu 3 ile çarptığımızda her 1pixellik kaydırma için 3 pixel kaydırmış oluyoruz
const move = (x - startX) * 3 ;
// son olarak kaydırma işlemini gerçekleştir
slider.scrollLeft = scrollLeft - move;
});
</script>