Ecmascript 6 Dropdown
Merhabalar,
Ecmascript 6 ile dropdown yaptım. Ama .dropdown class'ına dropdown aktif olunca active class'ı vermem gerekiyor.
Nasıl yapabilirim?
class dropdown {
constructor() {
this.trigger = document.querySelectorAll('.dropdown [data-trigger]');
this.target = document.querySelectorAll('.dropdown [data-dropdown]');
this.init();
}
init() {
for (let i = 0; i < this.trigger.length; i++) {
this.handleClick(this.trigger[i]);
}
}
handleClick(el) {
el.addEventListener('click', (event) => {
event.preventDefault();
el.nextElementSibling.classList.toggle('active');
});
for (let i = 0; i < this.target.length; i++) {
this.handleClose(this.target[i]);
}
}
handleClose(el) {
window.addEventListener('mouseup', (event) => {
if (event.target != el && event.target.parentNode != el) {
if (el.classList.contains('active')) {
el.classList.remove('active');
}
}
});
}
}
window.addEventListener('load', () => {
new dropdown();
}, false)
Html:
<div class="dropdown">
<a href="nojavascript...;" data-trigger="siralama" class="ProductHead-details-mobile-item dropdown-link">
<div class="ProductHead-details-mobile-item-icon">
<svg class="icon icon-sort">
<use xlink:href="#icon-sort"></use>
</svg>
</div>
<span class="ProductHead-details-mobile-item-text">Sıralama Ölçütü</span>
</a>
<div class="dropdown-menu" data-dropdown="siralama">
<a href="nojavascript...;" class="dropdown-menu-link">Fiyatı Artan</a>
<a href="nojavascript...;" class="dropdown-menu-link active">Fiyatı Azalan</a>
<a href="nojavascript...;" class="dropdown-menu-link">Yeni Gelenler</a>
<a href="nojavascript...;" class="dropdown-menu-link">Öne Çıkanlar</a>
</div>
</div>
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (3)
bir sınıf yazabiliyorsun ama, javascriptte bir css seçicisinin tanımlı olup olmadığını denetleyemiyor musun yani? enteresan.
tüm kodunu yorum satırı yap
el.nextElementSibling.classList.toggle('active');
bir olay dinleyicisi oluştur ve neye tıklandığında active eklenmesini istiyorsan bunu çalıştır. mantıken toggle yöntemi tetiklendiğinde tanımlanan değişikliği uygular, tekrar tetiklendiğinde yaptığı değişikliği geri alır ve bu döngü böyle gider. toggle parametre olarak belirtilen değeri sınıf olarak görür, yani tıkladığında o css class'ını elemente ekler ve tekrar tıkladığında kaldırır. ilk yazdığım mesajdaki koşula bile gerek yok aslında. senin kafan karışık veya sormak istediğin şeyi tam anlatamadın veya ben anlamadım.
Hiçbir şekilde jquery kullanmıyorum. Dediğinizi yaparsam jquery olmadan çalıştırabilir miyim?
hasClass adında jquery de mevcut olan methodu kullanabilirsin. bu method sınıfların adlarını kontrol etmek için kullanılır.
if($("#dropdown").hasClass(".active")){
$("#dropdown").removeClass(".active");
}else{
$("#dropdown").addClass(".active");
}
burada belirttiğimiz id de class mevcutsa kaldır, mevcut değilse ekle dedik. bunu clickten sonra kullanırsan istediğini elde etmiş olursun