Ana sayfadaki tür kutularına tıklandığında overlay gelme ve istenmeyen müzik çalma sorununun analizi
Sorun Nedir?
Ana sayfada müzik türlerine (Rock, Pop, Jazz vb.) tıkladığınızda, sayfanın üstüne bir katman geliyor ve ardından sayfanın her yerine tıkladığınızda müzik çalmaya başlıyor.
Neden Oluyor?
Tür kutusuna tıkladığınızda sağ taraftaki sidebar (kenar çubuğu) "önizleme modu"na geçiyor ve o türün şarkılarını gösteriyor. Ancak iki sorun var:
Ne Yapılmalı?
Genre kutusundaki tıklama olaylarını düzeltmemiz ve sidebar preview açıldığında overlay'in제대로 çalışmasını sağlamamız gerekiyor.
1. Event Bubbling Sorunu
genre-quick-card.blade.php:48-53
Tüm kart div'ine @click eventi var → sidebar.showPreview() çağırıyor
genre-quick-card.blade.php:77-82
Play butonu @click.stop ile event'i durdurmaya çalışıyor ama
$dispatch('play-genre') ile yeni event fırlatıyor.
2. Sidebar Preview Z-Index
Sidebar preview mode'a geçtiğinde, sağ taraftaki sidebar içeriği değişiyor ancak overlay/backdrop yok. Kullanıcı "sayfanın üstüne katman geliyor" diyorsa, muhtemelen sidebar'ın içeriği sayfanın üstünü kaplayacak şekilde genişliyor olabilir veya CSS z-index sorunu var.
3. Click Event Propagation
Play butonuna tıklandığında @click.stop eventi durdurmalı
ancak $dispatch() ile yeni bir event fırlatıldığı için
bu event tüm sayfada dinlenebilir ve her tıklamada tetiklenebilir.
genre-quick-card.blade.php - Line 37-83
<div class="genre-card group ..."
@click="$store.sidebar.showPreview('genre', {{ $genreId }}, {...})">
<!-- Play Button - Line 77-82 -->
<button @click.stop="$dispatch('play-genre', { genreId: {{ $genreId }} })">
<i class="fas fa-play"></i>
</button>
</div>
⚠️ @click.stop parent event'i durduruyor AMA
$dispatch() ile yeni global event fırlatıyor!
Muhtemel Senaryo:
play-genre eventi dispatch ediliyor
Play butonunda $dispatch() kullanmak yerine
direkt playGenres() fonksiyonunu çağır.
❌ ŞU ANDA (Yanlış):
@click.stop="$dispatch('play-genre', { genreId: {{ $genreId }} })"
✅ DÜZELTME:
@click.stop.prevent="playGenres({{ $genreId }})"
Ana sayfadaki genre kutularında sidebar preview yerine direkt genre detay sayfasına yönlendir. Preview özelliği sadece liste sayfalarında (genres, playlists, albums) kullanılsın.
✅ DÜZELTME:
genre-quick-card.blade.php'de :preview="false" kullan veya @click eventi kaldır
play-genre eventini dinleyen global listener var mı kontrol et.
Eğer varsa, bu listener'ı kaldır veya sadece belirli elemanlarda dinle.
⚠️ KONTROL ET:
document.addEventListener('play-genre', ...) veya @play-genre.window
https://muzibu.com/Sorunun Kök Nedeni:
Genre kutusundaki play butonunun $dispatch() ile global event fırlatması
ve muhtemelen bir yerde bu eventi dinleyen global listener'ın olması.
Öncelikli Düzeltme:
Çözüm 1: Play button event'ini düzelt - $dispatch() yerine
direkt playGenres() kullan.
Düzeltme yapmadan önce kullanıcı onayı bekleniyor.