Ürün Filtrelemeyi JavaScript ve Çoklu Kategorilerle Geliştirme
Dinamik, kullanıcı dostu web sayfaları oluşturmak, kesintisiz gezinme ve içeriğin kolay filtrelenmesini sağlamayı içerir. Bu, özellikle birden fazla kategoriye giren ürünleri veya öğeleri görüntülerken kullanışlıdır. JavaScript'i kullanarak öğeleri birden fazla kategoriye göre filtrelemek için sezgisel bir yöntem uygulayabilir, böylece kullanıcıların tam olarak aradıklarını bulmalarını kolaylaştırabiliriz.
Bu senaryoda, bir kategori düğmesine tıklamak sayfada görüntülenen öğeleri filtrelemelidir. Kullanıcı aynı anda birden fazla kategoriyi seçebilmeli ve bu da ürünlerin daha özel bir şekilde görülebilmesini sağlamalıdır. Örneğin, "Somon" ve "Karides" seçildiğinde yalnızca her iki malzemeyi de içeren öğeler gösterilmelidir.
Şu anda birçok uygulama tek kategorili filtreleme için iyi çalışıyor ancak birden fazla kategori eklemek zor olabilir. Buradaki zorluk, hangi öğelerin gösterileceği veya gizleneceğine karar verirken seçilen tüm kategorilerin dikkate alınmasını sağlamaktır. Bu makalede, JavaScript kullanılarak tek kategorili filtrelemenin çok kategorili filtrelemeye verimli bir şekilde nasıl genişletileceği açıklanmaktadır.
Bu kılavuzda, birden fazla etkin düğmeye dayalı olarak kartları dinamik olarak filtreleyen, kolay ve kullanıcı dostu bir deneyim sağlayan bir çözümü inceleyeceğiz. Bu JavaScript çözümünü uygulayarak web sayfanızın etkileşimini nasıl geliştireceğinizi ve kullanıcı katılımını nasıl artıracağınızı öğreneceksiniz.
Emretmek | Kullanım Örneği |
---|---|
every() | The every() method is used to check if all selected categories match the categories of each card. This is crucial in ensuring that multiple category filters work correctly. For example, activeCategories.every(cat =>Every() yöntemi, seçilen tüm kategorilerin her kartın kategorileriyle eşleşip eşleşmediğini kontrol etmek için kullanılır. Bu, birden fazla kategori filtresinin doğru şekilde çalışmasını sağlamak açısından çok önemlidir. Örneğin, activeCategories.every(cat =>cardCategories.includes(cat)) seçilen tüm kategorilerin kartın kategorileri içinde yer almasını sağlar. |
toggle() | Bu komut bir sınıfı açar veya kapatır. Tıklandığında aktif düğme sınıfını bir kategori düğmesine dinamik olarak eklemek veya kaldırmak için kullanılır. Bu, hangi kartların gösterileceğini veya gizleneceğini etkileyerek bir düğmenin etkin olup olmadığının izlenmesine yardımcı olur. |
filter() | The filter() method creates a new array with all elements that pass a test. In the Node.js example, products.filter(product => selectedCategories.every(cat =>Filter() yöntemi, testi geçen tüm öğeleri içeren yeni bir dizi oluşturur. Node.js örneğinde, Products.filter(product =>selectedCategories.every(cat =>product.categories.includes(cat))), ürünleri kullanıcı tarafından seçilen kategorilere göre filtreler. |
split() | Split() yöntemi, bir kategori dizesini bir diziye dönüştürmek için kullanılır. Örneğin,card.getAttribute("data-category").split("), etkin kategorilerle daha kolay karşılaştırma yapmak için virgülle ayrılmış kategori dizesini bir diziye böler. |
classList.add() | Bu yöntem, bir öğeye belirli bir sınıfı ekler. Aktif filtrelerle eşleşmeyen kartları gizlemek amacıyla inactive-card sınıfını eklemek için kullanılır. Örneğin,card.classList.add("inactive-card"), kategorileri seçilenlerle eşleşmediğinde kartı gizler. |
trim() | Trim() yöntemi, bir dizenin her iki ucundaki boşlukları kaldırmak için kullanılır. Komut dosyasında, düğmelerden gelen kategorilerin ürün verilerinden gelen kategorilerle temiz bir şekilde karşılaştırılmasını sağlar. Örneğin, Button.innerText.trim() işlevi fazladan boşlukların dikkate alınmamasını sağlar. |
post() | Arka uç komut dosyasında, istemci tarafından gönderilen verileri (bu durumda seçilen kategoriler) kabul eden bir rota oluşturmak için post() kullanılır. Sunucu tarafı komut dosyası, seçilen kategorilere göre filtrelenmiş ürün verilerini döndürmek için bu isteği işler. |
json() | Express'teki bu yöntem, istemciye bir JSON yanıtı göndermek için kullanılır. Örneğin, res.json(filteredProducts) seçilen kategorilerle eşleşen ürünleri döndürerek istemci tarafının filtrelenen ürünleri görüntülemesine olanak tanır. |
JavaScript'te Çok Kategorili Filtrelemeyi Anlamak
Yukarıda verilen komut dosyaları, ürün tabanlı web sitelerinde kullanıcı deneyimini geliştirmek için gerekli olan öğeleri birden çok kategoriye göre dinamik olarak filtrelemeye odaklanır. Amaç, kullanıcıların birden fazla kategori seçmesine ve kartları buna göre filtrelemesine olanak sağlamaktır. Bu, JavaScript kullanılarak, düğme tıklamalarının yakalanması, seçilen kategorilerin bir dizide saklanması ve ardından yalnızca seçilen tüm kategorilerle eşleşen kartların görüntülenmesi yoluyla gerçekleştirilir. İşlem, kullanıcı o düğmenin aktif durumunu değiştiren bir kategori düğmesine tıkladığında başlatılır. Düğmenin değeri, tüm etkin filtreleri temsil eden bir dizide saklanır.
Bu çözümün kritik bir kısmı dizi yöntemini kullanmaktır Her(). Bu komut, seçilen tüm kategorilerin kartın kategorileriyle karşılaştırılmasını sağlar. Her aktif kategorinin kartın kategorileri içerisinde bulunup bulunmadığını kontrol ederek çoklu kategori filtrelemenin sorunsuz çalışmasına olanak sağlar. Bir diğer önemli yöntem ise bölmek(), her karttaki kategori dizisini bir diziye bölmek için kullanılır. Bu, JavaScript'in bireysel kategorileri karşılaştırmasına ve hangi kartların görüntülenmesi veya gizlenmesi gerektiğini belirlemesine olanak tanır.
Ayrıca, komut dosyası şunu kullanır: classList.toggle() Tıklandığında düğmelere aktif sınıfı eklemek veya kaldırmak için. Bu sınıf, o anda hangi düğmelerin etkin olduğunu gösterdiğinden görsel geri bildirim için çok önemlidir. Bir düğme devre dışı bırakıldığında, kategorisi etkin kategoriler dizisinden kaldırılır ve ekranı güncellemek için filtreleme işlevi yeniden tetiklenir. Etkin kategorilerle eşleşmeyen kartlar, etkin değil olarak işaretlenecek bir sınıf eklenerek gizlenir. Bu yöntem, kullanıcıların birden fazla filtreyi seçerek veya seçimini kaldırarak aramalarını kolayca hassaslaştırabilmesini sağlar.
Arka uç komut dosyası, Node.js ve Express kullanılarak sunucu tarafında ürün filtrelemeyi gerçekleştirecek şekilde yapılandırılmıştır. Seçilen kategoriler bir POST isteği aracılığıyla sunucuya gönderilir ve sunucu bu isteği, ürünleri filtreleyerek ve yalnızca etkin kategorilerle eşleşen öğeleri döndürerek işler. Sunucu, ön uçla aynı mantığı kullanır ve filtre() Seçilen kategorileri her bir ürünün kategorileriyle karşılaştırma yöntemi. Bu yaklaşım, istemci tarafındaki işlem yükünü hafiflettiği ve son kullanıcılar için daha iyi performans sağladığı için büyük veri kümeleriyle uğraşırken kullanışlıdır.
JavaScript Kullanarak Dinamik Öğe Filtreleme: Optimize Edilmiş Çok Kategorili Filtreleme
Vanilla JavaScript kullanarak ön uç geliştirme yaklaşımı
// Define product data
let products = {
data: [
{ productName: "Fantasy", category: "Salmon, Shrimp" },
{ productName: "Spring", category: "Veggie" },
{ productName: "Rainbow", category: "Salmon, Tuna, Unagi" },
{ productName: "Unique", category: "Salmon, Tuna, Unagi, Shrimp" },
{ productName: "Perfection", category: "Salmon" },
]
};
// Handle button click event
let activeCategories = [];
document.querySelectorAll(".category-button").forEach(button => {
button.addEventListener("click", () => {
const category = button.innerText.trim();
button.classList.toggle("active-button");
if (button.classList.contains("active-button")) {
activeCategories.push(category);
} else {
activeCategories = activeCategories.filter(cat => cat !== category);
}
filterCards();
});
});
// Filter cards based on active categories
function filterCards() {
document.querySelectorAll(".card").forEach(card => {
const cardCategories = card.getAttribute("data-category").split(",");
const match = activeCategories.every(cat => cardCategories.includes(cat));
card.style.display = match ? "block" : "none";
});
}
Dinamik Öğe Filtreleme için Arka Uç Uygulaması
Node.js ve Express kullanarak sunucu tarafı yaklaşımı
const express = require('express');
const app = express();
app.use(express.json());
// Sample product data
const products = [
{ name: 'Fantasy', categories: ['Salmon', 'Shrimp'] },
{ name: 'Spring', categories: ['Veggie'] },
];
// Filter products API
app.post('/filter', (req, res) => {
const selectedCategories = req.body.categories;
const filteredProducts = products.filter(product =>
selectedCategories.every(cat => product.categories.includes(cat))
);
res.json(filteredProducts);
});
app.listen(3000, () => console.log('Server running on port 3000'));
Web Geliştirmede Çok Kategorili Filtreleme için İleri Teknikler
Çok kategorili bir filtreleme sistemi uygularken JavaScriptyalnızca kullanıcı arayüzü etkileşimini değil, aynı zamanda onu destekleyen veri yapısını da dikkate almak önemlidir. Dinamik içerik bağlamında optimize edilmiş ve temiz bir içerik sağlamak DOM manipülasyon stratejisi çok önemlidir. Örneğin, birden fazla kategori düğmesini verimli bir şekilde yönetmek için olay delegasyonu tekniklerini kullanabilir ve yalnızca gerekli DOM öğelerinin işlenmesini sağlayabilirsiniz.
Filtreleme deneyimini daha da geliştirebilecek bir husus, basit düğmeler yerine onay kutuları veya çoklu seçimli açılır menüler gibi daha karmaşık kullanıcı arayüzü öğelerinin eklenmesidir. Bu, kullanıcıların filtrelerle daha ayrıntılı bir şekilde etkileşim kurmasına olanak tanır. Örneğin, birden fazla seçime izin veren bir açılır menü, kategorileri seçerken kullanıcılara daha temiz bir kullanıcı arayüzü ve daha fazla esneklik sağlar. Bu, ek JavaScript mantığı ve stiliyle uygulanabilirken, aynı zamanda aşağıdaki gibi dizi yöntemleri de kullanılabilir: filter() Ve every() Kategori karşılaştırması için.
Bir diğer kritik husus, özellikle büyük bir veri kümesiyle uğraşırken, filtreleme sisteminin performansıdır. Filtrelenecek yüzlerce veya binlerce öğeniz olduğunda, DOM manipülasyonunu mümkün olduğunca en aza indirmek çok önemlidir. Bunu optimize etmenin bir yolu, DOM'daki güncellemeleri toplu olarak kullanmaktır. requestAnimationFrame() veya debounce() Güncelleme hızını kontrol etme ve sorunsuz bir kullanıcı deneyimi sağlama yöntemleri. Bu teknikler yalnızca performansı artırmakla kalmaz, aynı zamanda sayfanın yanıt verme hızını da artırarak sayfayı daha büyük veri kümeleri için daha ölçeklenebilir hale getirir.
JavaScript'te Çok Kategorili Filtreleme Hakkında Sıkça Sorulan Sorular
- Birden çok aktif filtreyi nasıl yönetirim?
- Aktif filtreleri bir dizide saklayabilir ve kullanabilirsiniz. every() Her kartın kategorisinin seçilen filtrelerle eşleşip eşleşmediğini kontrol etmek için.
- Çakışan kategorilerim varsa ne olur?
- Kullanma split() Ve trim()ile kategori verilerini ayırıp temizleyebilir, böylece her kategorinin etkin filtrelerle doğru şekilde karşılaştırılmasını sağlayabilirsiniz.
- Büyük veri kümeleri için filtrelemeyi nasıl optimize edebilirim?
- Toplu DOM güncellemelerini kullanarak requestAnimationFrame() veya bir uygulama debounce() Filtreleme işlemlerinin sıklığını azaltarak performansı artırma işlevi.
- Seçilen tüm kategorilerle eşleşen öğeleri nasıl görüntülerim?
- Kullanmak every() seçilen tüm kategorilerin görünür hale getirilmeden önce her kartın verilerine dahil edilmesini sağlamak.
- Kart sistemindeki bozuk görüntüleri işlemenin en iyi yolu nedir?
- Bir uygulama yapın error Yüklenemediğinde görüntüyü gizlemek veya değiştirmek için her görüntüdeki olay dinleyicisi, kullanıcı deneyimini geliştirir.
JavaScript Filtreleme Teknikleri Üzerine Son Düşünceler
Web sayfalarına çok kategorili filtreleme uygulamak, kullanıcı deneyimini önemli ölçüde iyileştirerek kullanıcıların tam olarak ihtiyaç duydukları şeyi bulmalarını kolaylaştırabilir. Dikkatli kullanılmasıyla JavaScript gibi yöntemler geçiş() Ve Her()sayesinde geliştiriciler büyük veri kümelerini sorunsuzca işleyen verimli, ölçeklenebilir bir çözüm oluşturabilir.
Üstelik DOM manipülasyonunu optimize ederek ve gereksiz işlemleri azaltarak bu yaklaşım, yüksek kullanıcı etkileşiminde bile performansı garanti eder. Bu filtreleme sistemi, e-ticaret web sitelerine, portföylere veya birden fazla filtreye dayalı dinamik içerik gösterimi gerektiren herhangi bir sayfaya entegre edilebilir.
Kaynak ve Referans Bölümü
- Bu makaledeki içerik ve kod örnekleri, Alena Chuyankova'nın CodePen örneğinden ilham almıştır. Orijinal kodu burada keşfedebilirsiniz: Alena'nın CodePen'i .
- JavaScript dizi yöntemleri ve olay işlemeyle ilgili ek kavramlara buradan erişilebilen resmi Mozilla Geliştirici Ağı belgelerinden başvurulmuştur: MDN Web Belgeleri .
- JavaScript kullanarak DOM manipülasyonunu ve performansını optimize etmeye ilişkin daha fazla bilgi için Smashing Magazine'in şu kapsamlı kılavuzuna başvurdum: Verimli DOM'u Anlamak .