Javascript 30 - Gün 1
14 Mart 2023Temel Javascript konularını pratiğe dökmek ve React gibi JS kütüphanelerini daha iyi anlayabilmek adına, sadece Javascript kullanarak 30 günde 30 proje içeren Javascript30 kursundaki ilerlememi, öğrendiklerimi paylaşacağım serinin ilk yazısıyla başlıyorum.
Kursun orijinal adresi: Javascript 30
Projeleri beraber takip etmek isterseniz, başlangıç dosyalarını bulabileceğiniz repom: js-30 | github
İlk proje oldukça basit ve eğlenceli bir proje. Projenin demosunu buradan inceleyebilirsiniz. İsterleri şu şekilde sıralayabiliriz:
- İlgili tuşa basıldığında eşlesen ses dosyasını oynatmak.
- İlgili tuşa basıldığında tuşa yeni bir class atarak stilini değiştirmek ve sonrasında eski haline döndürmek.
Projenin dosya yapısı şu şekilde:
├── background.jpg
├── index-solution.html
├── index.html
├── sounds
│ ├── boom.wav
│ ├── clap.wav
│ ├── hihat.wav
│ ├── kick.wav
│ ├── openhat.wav
│ ├── ride.wav
│ ├── snare.wav
│ ├── tink.wav
│ └── tom.wav
└── style.css
index.html dosyamızda her bir tuş için aşağıdaki şekilde içerisinde data-key
attributeı ile basılan tuşun keyCode değerinin belirtildiği bir yapı görüyoruz:
Dosyanın alt tarafında ise her bir tuşa karşılık audio
elementi eklendiğini görebiliriz. (Ses dosyaları sayfada görünmüyor bunun sebebi ise controls
attribute'unun eklenmemiş olmasıdır)
Örneğin "A" tuşu için eklenen ses dosyası şu şekilde belirtilmiş ve aynı keyler için oluşturduğumuz divler gibi burada da data-key değeri olarak tuşun keyCode değeri verilmiş. Bu sayede bir tuşa basıldığında hangi ses dosyasını oynatmamız gerektiğine karar verebiliriz.
Adım 1: Tuşa basıldığında ilgili ses dosyasını oynatmak
Öncelikle sayfanın herhangi bir yerinde bir tuşa basıldığını algılayabilmek için window
objesine bir olay dinleyici eklememiz gerekiyor.
Eklememiz gereken event ise keydown
eventidir. Bu event klavyede herhangi bir tuşa basıldığında tetiklenecek, ve o tuş hakkında bilgileri verecektir.
Adım 2: Tuşa basıldığında ilgili div'in stilini değiştirmek
CSS dosyasını incelediğimizde .key classına sahip elemanlara .playing classını eklersek boyutunun büyüyeceğini ve border renginin değişeceğini görebiliriz.
Öyleyse yapmamız gerekenler:
- İlgili elementi seçerek
playing
classını eklemek. - Sonrasında bu classı silmek.
- Bunun için basit bir setTimeout fonksiyonu ile belirli bir süre sonra classı silebiliriz.
- Veya
transitionend
olayını dinleyerek ilgili elementte gerçekleşen herhangi bir transition sonunda classı silebiliriz.
Bu projeden öğrendiklerim
data-*
attribute'larını kullanarak, HTML elementlerine ekstra bilgi eklenebilir. JavaScript tarafında da bu elementler kolaylıkla seçilebilir.keydown
eventi klavyede herhangi bir tuşa basıldığında tetiklenir.transitionend
eventi elementteki herhangi bir transition olayı bittiğinde tetiklenir.