Proje Detayları
Proje Tanımı
Bu projede, görevleri ekleyip, tamamlayıp, silebileceğiniz bir to-do listesi uygulaması geliştireceğiz. Uygulama, LocalStorage kullanarak verileri tarayıcıda saklayacak, böylece sayfa yenilense bile görevleriniz kaybolmayacak. Bu proje, DOM manipülasyonu, olay işleme ve tarayıcı depolama konularını pekiştirmenize yardımcı olacak.
Adım Adım Geliştirme
1 HTML Yapısını Oluşturmaİlk olarak, to-do listesi uygulamasının HTML yapısını oluşturalım. Bir form, görev listesi ve filtreler içeren bir yapı oluşturacağız.
Not: HTML yapısında, görev listesi için bir <ul>
elementi kullanıyoruz. Görevler, JavaScript ile bu listeye eklenecek. Ayrıca, filtreleme butonları için data-filter
özniteliği kullanarak hangi filtreyi temsil ettiklerini belirtiyoruz.
2 CSS ile Stil VermeŞimdi, to-do listesi uygulamasına stil verelim. Modern ve kullanıcı dostu bir arayüz oluşturacağız.
İpucu: CSS'te, tamamlanan görevleri görsel olarak ayırt etmek için .todo-item.completed
sınıfını kullanıyoruz. Bu sınıf, görev tamamlandığında JavaScript tarafından eklenecek ve görevin üzerini çizecek.
3 JavaScript ile İşlevsellik EklemeŞimdi, JavaScript ile to-do listesi uygulamasına işlevsellik ekleyelim. Görevleri ekleme, tamamlama, silme ve LocalStorage'da saklama işlemlerini kodlayacağız.
Uyarı: LocalStorage, sadece string değerleri saklayabilir. Bu nedenle, görevleri JSON formatına dönüştürerek saklıyoruz ve yüklerken tekrar JavaScript objelerine dönüştürüyoruz.
4 LocalStorage ile Veri SaklamaTo-do listesi uygulamasında, görevleri tarayıcının LocalStorage'ında saklıyoruz. Bu, kullanıcının sayfayı yenilemesi veya tarayıcıyı kapatıp tekrar açması durumunda bile görevlerin kaybolmamasını sağlar.
İlk olarak, to-do listesi uygulamasının HTML yapısını oluşturalım. Bir form, görev listesi ve filtreler içeren bir yapı oluşturacağız.
Not: HTML yapısında, görev listesi için bir <ul>
elementi kullanıyoruz. Görevler, JavaScript ile bu listeye eklenecek. Ayrıca, filtreleme butonları için data-filter
özniteliği kullanarak hangi filtreyi temsil ettiklerini belirtiyoruz.
Şimdi, to-do listesi uygulamasına stil verelim. Modern ve kullanıcı dostu bir arayüz oluşturacağız.
İpucu: CSS'te, tamamlanan görevleri görsel olarak ayırt etmek için .todo-item.completed
sınıfını kullanıyoruz. Bu sınıf, görev tamamlandığında JavaScript tarafından eklenecek ve görevin üzerini çizecek.
Şimdi, JavaScript ile to-do listesi uygulamasına işlevsellik ekleyelim. Görevleri ekleme, tamamlama, silme ve LocalStorage'da saklama işlemlerini kodlayacağız.
Uyarı: LocalStorage, sadece string değerleri saklayabilir. Bu nedenle, görevleri JSON formatına dönüştürerek saklıyoruz ve yüklerken tekrar JavaScript objelerine dönüştürüyoruz.
To-do listesi uygulamasında, görevleri tarayıcının LocalStorage'ında saklıyoruz. Bu, kullanıcının sayfayı yenilemesi veya tarayıcıyı kapatıp tekrar açması durumunda bile görevlerin kaybolmamasını sağlar.
LocalStorage Nedir?
LocalStorage, tarayıcının sağladığı bir web depolama API'sidir. Anahtar-değer çiftleri şeklinde veri saklamanıza olanak tanır. Veriler, kullanıcının tarayıcısında kalıcı olarak saklanır ve oturum sona erse bile silinmez.
LocalStorage, tarayıcının sağladığı bir web depolama API'sidir. Anahtar-değer çiftleri şeklinde veri saklamanıza olanak tanır. Veriler, kullanıcının tarayıcısında kalıcı olarak saklanır ve oturum sona erse bile silinmez.
LocalStorage Kullanımı
LocalStorage, sadece string değerleri saklayabilir. Bu nedenle, nesneleri veya dizileri saklamak istediğinizde, bunları JSON formatına dönüştürmeniz gerekir:
Not: LocalStorage'ın bazı sınırlamaları vardır. Tarayıcılar genellikle domain başına 5-10 MB arası depolama alanı sağlar. Ayrıca, LocalStorage verileri şifrelenmez, bu nedenle hassas bilgileri saklamak için uygun değildir.
5 Filtreleme İşlevselliği EklemeTo-do listesi uygulamasına filtreleme işlevselliği ekleyerek, kullanıcının tüm görevleri, aktif görevleri veya tamamlanan görevleri görüntüleyebilmesini sağlıyoruz.
Filtreleme işlevselliği, renderTodos
fonksiyonuna bir filterType
parametresi ekleyerek gerçekleştirilir. Bu parametre, hangi görevlerin görüntüleneceğini belirler:
- all: Tüm görevleri gösterir
- active: Sadece tamamlanmamış görevleri gösterir
- completed: Sadece tamamlanmış görevleri gösterir
Filtreleme butonlarına tıklandığında, filterTodos
fonksiyonu çağrılır ve ilgili filtre tipi renderTodos
fonksiyonuna aktarılır. renderTodos
fonksiyonu, filtre tipine göre görevleri filtreler ve ekrana render eder.
6 Projeyi Test Etme ve Hata AyıklamaTo-do listesi uygulamasını oluşturduktan sonra, farklı senaryoları test ederek doğru çalıştığından emin olun:
- Yeni görev ekleme: Boş olmayan bir görev eklenebilmeli
- Görev tamamlama: Checkbox'a tıklandığında görev tamamlanmalı/tamamlanmamalı
- Görev silme: Sil butonuna tıklandığında görev silinmeli
- Filtreleme: Filtre butonlarına tıklandığında ilgili görevler görüntülenmeli
- Tamamlananları temizleme: Tamamlananları Temizle butonuna tıklandığında tamamlanan görevler silinmeli
- LocalStorage: Sayfa yenilendiğinde görevler kaybolmamalı
Herhangi bir hata veya beklenmeyen davranış tespit ederseniz, JavaScript kodunuzu gözden geçirin ve düzeltin.
7 Bonus Özellikleri EklemeTemel to-do listesi işlevselliğini tamamladıktan sonra, aşağıdaki bonus özellikleri ekleyebilirsiniz:
LocalStorage, sadece string değerleri saklayabilir. Bu nedenle, nesneleri veya dizileri saklamak istediğinizde, bunları JSON formatına dönüştürmeniz gerekir:
Not: LocalStorage'ın bazı sınırlamaları vardır. Tarayıcılar genellikle domain başına 5-10 MB arası depolama alanı sağlar. Ayrıca, LocalStorage verileri şifrelenmez, bu nedenle hassas bilgileri saklamak için uygun değildir.
To-do listesi uygulamasına filtreleme işlevselliği ekleyerek, kullanıcının tüm görevleri, aktif görevleri veya tamamlanan görevleri görüntüleyebilmesini sağlıyoruz.
Filtreleme işlevselliği, renderTodos
fonksiyonuna bir filterType
parametresi ekleyerek gerçekleştirilir. Bu parametre, hangi görevlerin görüntüleneceğini belirler:
- all: Tüm görevleri gösterir
- active: Sadece tamamlanmamış görevleri gösterir
- completed: Sadece tamamlanmış görevleri gösterir
Filtreleme butonlarına tıklandığında, filterTodos
fonksiyonu çağrılır ve ilgili filtre tipi renderTodos
fonksiyonuna aktarılır. renderTodos
fonksiyonu, filtre tipine göre görevleri filtreler ve ekrana render eder.
To-do listesi uygulamasını oluşturduktan sonra, farklı senaryoları test ederek doğru çalıştığından emin olun:
- Yeni görev ekleme: Boş olmayan bir görev eklenebilmeli
- Görev tamamlama: Checkbox'a tıklandığında görev tamamlanmalı/tamamlanmamalı
- Görev silme: Sil butonuna tıklandığında görev silinmeli
- Filtreleme: Filtre butonlarına tıklandığında ilgili görevler görüntülenmeli
- Tamamlananları temizleme: Tamamlananları Temizle butonuna tıklandığında tamamlanan görevler silinmeli
- LocalStorage: Sayfa yenilendiğinde görevler kaybolmamalı
Herhangi bir hata veya beklenmeyen davranış tespit ederseniz, JavaScript kodunuzu gözden geçirin ve düzeltin.
Temel to-do listesi işlevselliğini tamamladıktan sonra, aşağıdaki bonus özellikleri ekleyebilirsiniz:
Görevleri Düzenleme
Görevlere Öncelik Ekleme
Görevlere Son Tarih Ekleme
Proje Zorlukları ve Çözümleri
Zorluk 1: Veri Kalıcılığı
To-do listesi uygulamalarında, kullanıcının görevlerinin sayfa yenilendiğinde veya tarayıcı kapatılıp açıldığında kaybolmaması önemlidir.
Çözüm: LocalStorage API'sini kullanarak görevleri tarayıcıda saklayabilirsiniz. Görevleri JSON formatına dönüştürerek LocalStorage'a kaydedebilir ve sayfa yüklendiğinde tekrar yükleyebilirsiniz.
To-do listesi uygulamalarında, kullanıcının görevlerinin sayfa yenilendiğinde veya tarayıcı kapatılıp açıldığında kaybolmaması önemlidir.
Çözüm: LocalStorage API'sini kullanarak görevleri tarayıcıda saklayabilirsiniz. Görevleri JSON formatına dönüştürerek LocalStorage'a kaydedebilir ve sayfa yüklendiğinde tekrar yükleyebilirsiniz.
Zorluk 2: Görev Durumu Yönetimi
Görevlerin tamamlanma durumunu yönetmek ve görsel olarak göstermek, kullanıcı deneyimi açısından önemlidir.
Çözüm: Her görev için bir completed
özelliği kullanabilir ve bu özelliğe göre görevin görünümünü değiştirebilirsiniz. Tamamlanan görevlere .completed
sınıfı ekleyerek üzerini çizebilirsiniz.
Görevlerin tamamlanma durumunu yönetmek ve görsel olarak göstermek, kullanıcı deneyimi açısından önemlidir.
Çözüm: Her görev için bir completed
özelliği kullanabilir ve bu özelliğe göre görevin görünümünü değiştirebilirsiniz. Tamamlanan görevlere .completed
sınıfı ekleyerek üzerini çizebilirsiniz.
Zorluk 3: Filtreleme
Kullanıcının görevleri filtreleyebilmesi, özellikle çok sayıda görev olduğunda önemlidir.
Çözüm: Görevleri render ederken bir filtre parametresi kullanabilir ve bu parametreye göre görevleri filtreleyebilirsiniz. Filtre butonlarına data-filter
özniteliği ekleyerek hangi filtreyi temsil ettiklerini belirtebilirsiniz.
Kullanıcının görevleri filtreleyebilmesi, özellikle çok sayıda görev olduğunda önemlidir.
Çözüm: Görevleri render ederken bir filtre parametresi kullanabilir ve bu parametreye göre görevleri filtreleyebilirsiniz. Filtre butonlarına data-filter
özniteliği ekleyerek hangi filtreyi temsil ettiklerini belirtebilirsiniz.
Geliştirme İpuçları
- Modüler Kod Yazın: Kodunuzu küçük, anlaşılır fonksiyonlara bölün. Her fonksiyon tek bir işi yapmalıdır.
- Veri Modeli Oluşturun: Görevleri temsil eden bir veri modeli oluşturun ve bu modeli güncelleyin. Kullanıcı arayüzünü bu modele göre render edin.
- Olay Delegasyonu Kullanın: Her görev öğesi için ayrı olay dinleyicileri eklemek yerine, üst öğeye bir olay dinleyicisi ekleyip olayı delege edebilirsiniz. Bu, performansı artırır ve kod tekrarını azaltır.
- LocalStorage Sınırlamalarını Göz Önünde Bulundurun: LocalStorage'ın domain başına 5-10 MB arası depolama alanı sağladığını unutmayın. Çok büyük veri saklamanız gerekiyorsa, alternatif çözümler düşünün.
- Kullanıcı Deneyimine Odaklanın: Görevleri ekleme, tamamlama ve silme işlemlerini kullanıcı için kolay ve sezgisel hale getirin. Görsel geri bildirimler ve animasyonlar ekleyin.
- Modüler Kod Yazın: Kodunuzu küçük, anlaşılır fonksiyonlara bölün. Her fonksiyon tek bir işi yapmalıdır.
- Veri Modeli Oluşturun: Görevleri temsil eden bir veri modeli oluşturun ve bu modeli güncelleyin. Kullanıcı arayüzünü bu modele göre render edin.
- Olay Delegasyonu Kullanın: Her görev öğesi için ayrı olay dinleyicileri eklemek yerine, üst öğeye bir olay dinleyicisi ekleyip olayı delege edebilirsiniz. Bu, performansı artırır ve kod tekrarını azaltır.
- LocalStorage Sınırlamalarını Göz Önünde Bulundurun: LocalStorage'ın domain başına 5-10 MB arası depolama alanı sağladığını unutmayın. Çok büyük veri saklamanız gerekiyorsa, alternatif çözümler düşünün.
- Kullanıcı Deneyimine Odaklanın: Görevleri ekleme, tamamlama ve silme işlemlerini kullanıcı için kolay ve sezgisel hale getirin. Görsel geri bildirimler ve animasyonlar ekleyin.
Proje Genişletme Fikirleri
- Sürükle-Bırak ile Sıralama: Görevleri sürükle-bırak ile yeniden sıralama özelliği ekleyin. HTML5 Drag and Drop API veya bir kütüphane (örneğin, SortableJS) kullanabilirsiniz.
- Kategoriler veya Etiketler: Görevleri kategorilere ayırma veya etiketleme özelliği ekleyin. Kullanıcılar, görevleri kategorilere göre filtreleyebilir.
- Hatırlatıcılar: Görevler için hatırlatıcılar ekleme özelliği ekleyin. Notification API veya e-posta bildirimleri kullanabilirsiniz.
- Çoklu Kullanıcı Desteği: Kullanıcıların kendi to-do listelerini oluşturabilmesi için oturum açma ve kullanıcı yönetimi ekleyin. Bu, bir backend servisi gerektirir.
- Tema Değiştirme: Kullanıcının açık/koyu tema arasında geçiş yapabilmesini sağlayın.
- İstatistikler: Tamamlanan görev sayısı, ortalama tamamlama süresi gibi istatistikler gösterin.
- Sürükle-Bırak ile Sıralama: Görevleri sürükle-bırak ile yeniden sıralama özelliği ekleyin. HTML5 Drag and Drop API veya bir kütüphane (örneğin, SortableJS) kullanabilirsiniz.
- Kategoriler veya Etiketler: Görevleri kategorilere ayırma veya etiketleme özelliği ekleyin. Kullanıcılar, görevleri kategorilere göre filtreleyebilir.
- Hatırlatıcılar: Görevler için hatırlatıcılar ekleme özelliği ekleyin. Notification API veya e-posta bildirimleri kullanabilirsiniz.
- Çoklu Kullanıcı Desteği: Kullanıcıların kendi to-do listelerini oluşturabilmesi için oturum açma ve kullanıcı yönetimi ekleyin. Bu, bir backend servisi gerektirir.
- Tema Değiştirme: Kullanıcının açık/koyu tema arasında geçiş yapabilmesini sağlayın.
- İstatistikler: Tamamlanan görev sayısı, ortalama tamamlama süresi gibi istatistikler gösterin.