Dropdown menü otomatik yön verme
Merhaba,
Yaptığım bir dropdown ve buna tıkladığımda aşağı doğru açılıyor. Ancak ben sayfanın altındayken buna bastığımda yukarı yönlü açılmasını istiyorum(sayfanın altında kalan kısmın uzunluğu dropdownun uzunluğundan küçükse yukarı doğru açılsın)
Bunu nasıl yapabilirim ?
Bootstrap dropdownları bu şekilde mesela. Örnek olması için aşağıya ekliyorum.
Normal açılışı Dropdown normal
Aşağıya doğru sığmayınca otomatik yukarı doğru açılıyor Dropdown yukarı
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
<div class="wrapper"> <!-- wrapper sınıfına overflow-y: auto verilmeli -->
<!-- other elements -->
<div class="child"></div>
<!-- other elements -->
</div>
Yukarıdaki kod bloğuna yakın bir sistemimiz olduğunu düşünelim. Her dropdown butonuna tıklama işleminde aşağıdaki kontrolü sağlayarak aşağı doğru mu yoksa yukarıya doğru mu açılacağını belirtebilirsin.
{
// click işlemi içerisi
let topDistance = child.offsetTop - wrapper.offsetTop; // child elementinin, wrapper elementi içerisindeki y koordinatı diyebiliriz.
let scrollAmount = wrapper.scrollTop; // wrapper daki scroll miktarı
let exactTopDistance = topDistance - scrollAmount; // scroll olması durumunda uzaklık değişmeli
let wrapperHeight = wrapper.offsetHeight;
let exactBottomDistance = wrapperHeight - child.offsetHeight - exactTopDistance; // child elementin altında kalan alan. (wrapper elementi bitimine uzaklığı diyebiliriz)
if(exactTopDistance >= exactBottomDistance) {
// yukarıda kalan alan daha büyük dolayısıyla yukarıya doğru açılmalı.
} else {
// aşağı doğru açılmalı.
}
}
Anlatım biraz karışık gelmiş olabilir. Çalışan bir demoya şuradan ulaşabilirsin.
Aşağıda yeterli alan var fakat yukarıdaki alan daha fazla. Eğer yeterli alan olmadığı durumlarda diğer yöne açılmasını istiyorsan kontrollerde değişiklik yapman lazım.
Diyelim ki sen dropdown menüsünün normal şartlarda aşağı açılmasını istiyorsun. Aşağıdaki alan dropdown'un yüksekliğinden daha küçükse yukarıya doğru açılsın şeklinde kontrol ekleyebilirsin.
Mevcut linkdeki kodu güncelledim. Eski halini de yorum satırı içerisine aldım, tekrar inceleyebilirsin.
@ilyasbilgihan hocam cevabınız için çok teşekkür ederim ancak ufak sıkıntılar var. https://www.hizliresim.com/l1akmrm => burada aşağıda yeterince alan olmasına rağmen yukrıda açılıyo. Bende de sürekli yukarıda açılıyo.