Web Sitesi Kodlama Eğitimi – 8: JavaScript ile Etkileşim ve DOM Yönetimi

Web Sitesi Kodlama Eğitimi – 8: JavaScript ile Etkileşim ve DOM Yönetimi

Bir önceki dersimizde JavaScript’in temel mantığını, değişkenleri ve fonksiyonları öğrendik. Ancak gerçek bir web uygulaması, bu mantığın HTML ve CSS ile kurduğu köprü üzerinden hayat bulur. Bu kodlama eğitimi bölümünde, “Document Object Model” (DOM) kavramını derinlemesine inceleyecek ve statik sayfalarınızı kullanıcı hareketlerine anlık tepki veren interaktif birer sanat eserine dönüştüreceğiz.

1. DOM Nedir? Sayfanın Dijital Haritası

DOM (Document Object Model), tarayıcının yüklediği HTML dosyasının JavaScript tarafından okunabilir ve değiştirilebilir bir “nesne ağacına” dönüştürülmüş halidir.

Ağaç Yapısı: HTML sayfanızdaki her bir etiket (body, div, p), bu ağacın birer dalı veya yaprağıdır. JavaScript bu dallara uzanabilir, onları kesebilir, yerini değiştirebilir veya yeni dallar ekleyebilir.

Canlı Bağlantı: DOM statik bir kopya değildir. JavaScript ile bir DOM elemanını değiştirdiğinizde, kullanıcı bu değişikliği tarayıcı ekranında o saniye görür. Bu süreç, profesyonel bir kodlama eğitimi için etkileşimin temel anahtarıdır.

2. Elementleri Seçme ve İçerik Manipülasyonu

JavaScript ile bir şeyi değiştirmek için önce onu “yakalamanız” gerekir. Tıpkı CSS seçicilerinde olduğu gibi, JavaScript’te de çok güçlü seçme yöntemleri vardır.

Modern Seçici (querySelector): Artık her şeyi CSS seçicisi mantığıyla seçebiliyoruz. document.querySelector(“.buton”) komutuyla sınıfı buton olan ilk öğeyi yakalayabilirsiniz.

İçeriği Değiştirmek: Yakaladığınız bir öğenin içeriğini textContent (sadece yazı) veya innerHTML (HTML etiketleriyle birlikte) özellikleri sayesinde anlık olarak güncelleyebilirsiniz. Bu, bir kodlama eğitimi projesinde “Sepete Eklendi” mesajı gibi dinamik bildirimler oluşturmanızı sağlar.

3. Olay İzleyiciler (Event Listeners): Kullanıcıyı Dinlemek

Kullanıcının yaptığı her hareket (tıklama, tuşa basma, mouse ile üzerine gelme) tarayıcıda bir “Olay” (Event) yaratır.

addEventListener Kullanımı: Bu fonksiyon, JavaScript’e “şu butonu dinle, eğer biri tıklarsa şu fonksiyonu çalıştır” talimatını verir.

Sık Kullanılan Olaylar: * click: Tıklama.

submit: Form gönderimi.

keyup: Klavyeden parmağın çekilmesi.

scroll: Sayfanın kaydırılması.

Etkileşim Döngüsü: Kullanıcı tıklar -> Olay yakalanır -> Fonksiyon çalışır -> DOM güncellenir.

4. Dinamik Stil ve Sınıf (Class) Yönetimi

JavaScript ile bir elementin CSS özelliklerine doğrudan müdahale edebilirsiniz, ancak profesyonel yöntem “Sınıf Yönetimi”dir.

classList Gücü: Bir öğeye JavaScript ile yeni bir CSS sınıfı ekleyebilir (add), çıkarabilir (remove) veya varsa silip yoksa ekleyen toggle yöntemini kullanabilirsiniz.

Neden Önemli? Tasarımı CSS dosyasında tutup, bu tasarımı ne zaman aktif edeceğinize JavaScript ile karar vermek kodunuzun temiz kalmasını sağlar. Örneğin, bir “Gece Modu” butonuna basıldığında body etiketine dark-mode sınıfını eklemek en doğru yaklaşımdır.

5. Olay Akışı: Bubbling (Kabarcıklanma) ve Capturing

Bir butona tıkladığınızda, aslında o butonun içindeki div’e, onun dışındaki body’ye ve en dıştaki document’e de tıklamış olursunuz. Olaylar, bir kabarcık gibi içeriden dışarıya doğru yayılır.

Bubbling (Kabarcıklanma): Olayın en içteki elementten başlayıp yukarıya doğru gitmesidir.

stopPropagation(): Eğer bir butonun tıklanma olayının üst elemanları etkilemesini istemiyorsanız, bu fonksiyonla olayın yayılmasını durdurabilirsiniz. Bu ileri seviye teknik, bu kodlama eğitimi kapsamında karmaşık menü tasarımlarında hayat kurtarıcı olacaktır.

Uzmanından İpuçları ve Sık Yapılan Hatalar

Hata: HTML elemanlarını her seferinde fonksiyonun içinde seçmek.

Çözüm: Sürekli kullanacağınız elementleri kodun en başında bir const değişkenine atayın (Örn: const submitBtn = document.querySelector(“#btn”);). Bu işlem performansı artırır.

İpucu: innerHTML kullanırken dikkatli olun. Kullanıcıdan gelen bir veriyi doğrudan innerHTML ile sayfaya basmak, güvenlik açıklarına (XSS) yol açabilir. Sadece düz metin basacaksanız daima textContent tercih edin.

Sıkça Sorulan Sorular (SSS)

Soru 1: DOM manipülasyonu SEO’yu etkiler mi? Cevap: Evet. Google artık JavaScript ile oluşturulan içerikleri tarayabiliyor ancak önemli verilerin sayfa ilk yüklendiğinde (HTML içinde) olması hala en güvenli SEO stratejisidir.

Soru 2: JQuery hala kullanılıyor mu, neden JS ile devam ediyoruz? Cevap: JQuery eskiden çok popülerdi ancak artık modern JavaScript (Vanilla JS) tüm bu işleri kütüphane gerektirmeden çok hızlı yapabiliyor. Profesyonel bir kodlama eğitimi, işin temelini (saf JS) öğretmeyi amaçlar.

Soru 3: Birden fazla butona aynı olayı nasıl eklerim? Cevap: querySelectorAll ile tüm butonları seçip, bir forEach döngüsü yardımıyla her birine ayrı ayrı addEventListener ekleyebilirsiniz.

Soru 4: Sayfa yüklendiğinde bir kodun çalışmasını nasıl sağlarım? Cevap: window.addEventListener(‘DOMContentLoaded’, …) olayını kullanarak tüm HTML iskeletinin yüklendiğinden emin olduktan sonra kodlarınızı çalıştırabilirsiniz.

Soru 5: JavaScript ile animasyon yapmak mantıklı mı? Cevap: Basit animasyonlar (renk değişimi, gizleme) için CSS transizyonlarını JS ile tetiklemek en iyisidir. Çok karmaşık, zaman ayarlı animasyonlar için profesyonel JS kütüphaneleri (GSAP gibi) tercih edilir.

Bölüm Özeti ve Gelecek Ders

Bu bölümde, kodlarınızın HTML ile nasıl konuştuğunu ve kullanıcıyı nasıl “dinlediğini” öğrendik. Artık statik bir tasarımcı değil, dinamik bir geliştiricisiniz.

Eğitim 9’da bizi ne bekliyor? Sıradaki dersimizde modern web geliştirmenin kalbi olan “Asenkron JavaScript ve API’ler” konusuna odaklanacağız. Sayfayı yenilemeden internetten veri çekmeyi (fetch), JSON formatını ve sitenizi dış dünya ile konuşturmayı öğreneceğiz.
Uygulama Ödevi: Sayfanıza bir “Kutu Oluştur” butonu koyun. Bu butona tıklandığında ekrana rastgele arka plan rengine sahip yeni bir div ekleyen bir JavaScript kodu yazın!

Scroll to Top