Javascript 30 - Gün 27

22 Mayıs 2023

Projenin 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>
GitHubBu sayfayı düzenle