Tüm blog yazıları

JavaScript DOM Events: Klavye Olayları ve Event Object

Web uygulamalarında klavye etkileşimlerini yönetin! JavaScript DOM klavye olayları (keydown, keyup) ve Event Object'i keşfedin. Tuş basma ve bırakma anlarını yakalayarak dinamik uygulamalar geliştirin.

eminbasbayan6 dk okuma
JavaScript DOM klavye olayları ve Event Object'i gösteren kod örnekleri

Şimdiye kadar çoğunlukla tıklama (click) olaylarıyla çalıştık. Ancak web uygulamalarında klavye etkileşimleri de oldukça önemlidir. Oyunlarda karakter kontrolü, form doğrulama, kısayol tuşları ve daha birçok özellik klavye olaylarına dayanır. Bu makalede klavye olaylarını ve her event'te otomatik olarak gelen Event Object (Olay Nesnesi) kavramını öğreneceğiz.

Event Object Nedir?

Her event tetiklendiğinde, JavaScript otomatik olarak bir event object oluşturur ve callback fonksiyonumuza parametre olarak gönderir. Bu nesne, olay hakkında detaylı bilgiler içerir.

javascript
const buton = document.querySelector('#benimButon');

buton.addEventListener('click', function(event) {
    console.log(event); // Event object'i gösterir
});

Event Object'teki Bazı Önemli Özellikler

ÖzellikAçıklama
event.typeOlayın türü (click, keydown, submit vb.)
event.targetOlayı başlatan element
event.currentTargetEvent listener'ın bağlı olduğu element
event.clientX / clientYFare tıklamasının koordinatları
event.keyBasılan tuşun değeri (klavye için)
event.codeBasılan tuşun fiziksel konumu (klavye için)

Click Event'te Event Object

javascript
const kutu = document.querySelector('.kutu');

kutu.addEventListener('click', function(event) {
    console.log('Olay türü:', event.type);           // "click"
    console.log('Tıklanan element:', event.target);   // .kutu elementi
    console.log('X koordinatı:', event.clientX);      // Örn: 150
    console.log('Y koordinatı:', event.clientY);      // Örn: 200
});

Gerçek Hayat Örneği: Tıklanan Yerde Efekt Gösterme

javascript
const sayfa = document.body;

sayfa.addEventListener('click', function(event) {
    // Tıklanan yerde bir daire oluştur
    const daire = document.createElement('div');
    daire.classList.add('tiklama-efekti');
    daire.style.left = event.clientX + 'px';
    daire.style.top = event.clientY + 'px';
    
    sayfa.appendChild(daire);
    
    // 500ms sonra daireyi kaldır
    setTimeout(function() {
        daire.remove();
    }, 500);
});

Klavye Olayları (Keyboard Events)

Klavye için üç temel olay türü vardır:

OlayNe Zaman Tetiklenir
keydownTuşa basıldığı anda
keyupTuş bırakıldığı anda
keypress⚠️ Kullanımdan kaldırıldı (deprecated)

keydown vs keyup

javascript
const input = document.querySelector('#aramaKutusu');

input.addEventListener('keydown', function(event) {
    console.log('Tuş BASILDI:', event.key);
});

input.addEventListener('keyup', function(event) {
    console.log('Tuş BIRAKILDI:', event.key);
});

Bir tuşa bastığınızda ve bıraktığınızda:

  1. Önce keydown tetiklenir (tuşa basılınca)
  2. Sonra keyup tetiklenir (tuş bırakılınca)

Sürekli Basılı Tutma

Bir tuşu basılı tuttuğunuzda keydown sürekli tetiklenir, ama keyup sadece tuşu bıraktığınızda bir kez tetiklenir.

javascript
window.addEventListener('keydown', function(event) {
    console.log('keydown tetiklendi');
});

// Tuşu basılı tutarsanız: keydown, keydown, keydown, keydown...
// Tuşu bırakırsanız: keyup (sadece bir kez)

event.key vs event.code

Bu iki özellik klavye olaylarında çok önemlidir:

ÖzellikAçıklamaÖrnek
event.keyÜretilen karakteri gösterir"a", "A", "Enter", "Shift"
event.codeFiziksel tuştanın konumunu gösterir"KeyA", "ShiftLeft", "ArrowUp"
javascript
window.addEventListener('keydown', function(event) {
    console.log('key:', event.key);   // "a" veya "A"
    console.log('code:', event.code); // "KeyA"
});

Ne Zaman Hangisini Kullanmalı?

event.key kullanın:

  • Kullanıcının yazdığı karakteri öğrenmek istiyorsanız
  • Büyük/küçük harf fark etsin istiyorsanız

event.code kullanın:

  • Oyun kontrolleri için (WASD tuşları)
  • Klavye düzeninden bağımsız çalışması gerekiyorsa
  • Fiziksel tuş konumu önemliyse

Türkçe Klavye Örneği

javascript
window.addEventListener('keydown', function(event) {
    // Türkçe "ş" tuşuna basıldığında
    console.log('key:', event.key);   // "ş"
    console.log('code:', event.code); // "Semicolon" (fiziksel konum)
});

Gerçek Hayat Örneği: Basit Oyun Kontrolü

Bir karakteri ok tuşlarıyla hareket ettirme:

javascript
const karakter = document.querySelector('#karakter');
let x = 0;
let y = 0;
const hiz = 10;

window.addEventListener('keydown', function(event) {
    switch(event.code) {
        case 'ArrowUp':
            y -= hiz;
            break;
        case 'ArrowDown':
            y += hiz;
            break;
        case 'ArrowLeft':
            x -= hiz;
            break;
        case 'ArrowRight':
            x += hiz;
            break;
        case 'Space':
            console.log('Zıpla!');
            break;
    }
    
    karakter.style.transform = `translate(${x}px, ${y}px)`;
});

Gerçek Hayat Örneği: WASD Kontrolü

Oyunlarda sıkça kullanılan WASD tuşları:

javascript
window.addEventListener('keydown', function(event) {
    switch(event.code) {
        case 'KeyW':
            ilerle();
            break;
        case 'KeyA':
            solaDon();
            break;
        case 'KeyS':
            geriGel();
            break;
        case 'KeyD':
            sagaDon();
            break;
    }
});

💡 Not: event.code kullanıyoruz çünkü farklı klavye düzenlerinde (Fransızca AZERTY gibi) tuşların yerleri değişse bile fiziksel konum aynı kalır.

Gerçek Hayat Örneği: Klavye Kısayolları

Ctrl+S ile kaydetme, Ctrl+Z ile geri alma gibi kısayollar:

javascript
window.addEventListener('keydown', function(event) {
    // Ctrl+S: Kaydet
    if (event.ctrlKey && event.code === 'KeyS') {
        event.preventDefault(); // Tarayıcının varsayılan davranışını engelle
        kaydet();
        console.log('Kaydedildi!');
    }
    
    // Ctrl+Z: Geri Al
    if (event.ctrlKey && event.code === 'KeyZ') {
        event.preventDefault();
        geriAl();
        console.log('Geri alındı!');
    }
    
    // Escape: Modal'ı kapat
    if (event.code === 'Escape') {
        modalKapat();
    }
});

Modifier Tuşları

ÖzellikAçıklama
event.ctrlKeyCtrl tuşu basılı mı?
event.shiftKeyShift tuşu basılı mı?
event.altKeyAlt tuşu basılı mı?
event.metaKeyWindows/Command tuşu basılı mı?
javascript
window.addEventListener('keydown', function(event) {
    if (event.ctrlKey) console.log('Ctrl basılı');
    if (event.shiftKey) console.log('Shift basılı');
    if (event.altKey) console.log('Alt basılı');
});

Gerçek Hayat Örneği: Arama Kutusu (Canlı Arama)

Her tuş vuruşunda arama yapma:

javascript
const aramaInput = document.querySelector('#arama');
const sonuclarDiv = document.querySelector('#sonuclar');

aramaInput.addEventListener('keyup', function(event) {
    const aramaMetni = this.value.toLowerCase();
    
    // Enter tuşuna basıldıysa form gönder
    if (event.key === 'Enter') {
        aramaYap(aramaMetni);
        return;
    }
    
    // Escape tuşuna basıldıysa input'u temizle
    if (event.key === 'Escape') {
        this.value = '';
        sonuclarDiv.innerHTML = '';
        return;
    }
    
    // Canlı arama önerileri göster
    oneriGetir(aramaMetni);
});

Gerçek Hayat Örneği: Şifre Gücü Kontrolü

Her tuş vuruşunda şifre gücünü kontrol etme:

javascript
const sifreInput = document.querySelector('#sifre');
const gucGostergesi = document.querySelector('#sifre-gucu');

sifreInput.addEventListener('keyup', function() {
    const sifre = this.value;
    let guc = 0;
    
    if (sifre.length >= 8) guc++;
    if (sifre.length >= 12) guc++;
    if (/[A-Z]/.test(sifre)) guc++;  // Büyük harf var mı
    if (/[a-z]/.test(sifre)) guc++;  // Küçük harf var mı
    if (/[0-9]/.test(sifre)) guc++;  // Rakam var mı
    if (/[^A-Za-z0-9]/.test(sifre)) guc++;  // Özel karakter var mı
    
    const gucMetinleri = ['Çok Zayıf', 'Zayıf', 'Orta', 'İyi', 'Güçlü', 'Çok Güçlü'];
    const renkler = ['#e74c3c', '#e67e22', '#f1c40f', '#27ae60', '#2ecc71', '#16a085'];
    
    gucGostergesi.textContent = gucMetinleri[guc] || 'Çok Zayıf';
    gucGostergesi.style.color = renkler[guc] || renkler[0];
});

Input'ta mı Yoksa Tüm Sayfada mı?

Klavye olaylarını iki farklı yerde dinleyebilirsiniz:

1. Belirli Bir Input'ta

javascript
const input = document.querySelector('#benimInput');

input.addEventListener('keydown', function(event) {
    console.log('Input içinde tuşa basıldı:', event.key);
});

2. Tüm Sayfada (window)

javascript
window.addEventListener('keydown', function(event) {
    console.log('Sayfanın herhangi bir yerinde tuşa basıldı:', event.key);
});

Oyunlar ve global kısayollar için window kullanılır. Form işlemleri için input elementi kullanılır.

Özet

Bu makalede öğrendiklerimiz:

✅ Event Object her olayda otomatik olarak gelir ve olay hakkında bilgi içerir
✅ keydown tuşa basıldığında, keyup tuş bırakıldığında tetiklenir
✅ event.key üretilen karakteri, event.code fiziksel tuşu gösterir
✅ Oyun kontrolleri için event.code kullanılmalı
✅ Kısayollar için ctrlKey, shiftKey, altKey özellikleri kontrol edilmeli
✅ event.preventDefault() tarayıcının varsayılan davranışını engeller

Bir sonraki makalede Form Events ve preventDefault konusunu derinlemesine inceleyeceğiz.

JavaScript Classes ile pratik uygulamalar, metotlar arası iletişim ve gerçek dünya kod örnekleri
JavaScript Dersleri9 dk okuma

JavaScript Classes - Pratik Uygulamalar

JavaScript class'ları ile pratik uygulamalara geçin! Metotlar arası iletişimden constructor'da metot çağırmaya, kod tekrarını azaltmaktan gerçek dünya senaryolarına kadar class kullanımının inceliklerini keşfedin. Kendi alışveriş sepeti örneğinizle bilginizi pekiştirin.

Yazıyı oku
JavaScript class yapısını gösteren bir kod örneği, ES6 ile modern nesne oluşturma
JavaScript Dersleri9 dk okuma

JavaScript Classes

ES6 ile JavaScript'e gelen class yapısı sayesinde nesne oluşturmak artık çok daha kolay ve düzenli! Constructor function karmaşasından kurtulup, okunabilir ve yönetilebilir kodlar yazmak isteyenler için modern JavaScript'in temel taşı olan class'ları tüm detaylarıyla keşfedin. Bu rehberle nesne şabl

Yazıyı oku
JavaScript kodunda Constructor Function ve new keyword'ü ile nesne oluşturma örnekleri
JavaScript Dersleri8 dk okuma

Constructor Functions ve new Keyword

Factory Function'ların hafıza israfı sorununa Constructor Function'lar ve new keyword'ü ile son verin! Metotları paylaştırarak JavaScript objelerini daha verimli nasıl oluşturacağınızı, new'in perde arkasında neler yaptığını ve prototype sisteminin gücünü bu rehberde keşfedin.

Yazıyı oku

Çerez tercihlerin

Platformun çalışması için zorunlu çerezler kullanıyoruz. İzin verirsen anonim kullanım verilerini ölçüyoruz. Ayrıntıları incele