[Javascript]Alternativa al position:sticky nel CSS

Discussione in 'Javascript' iniziata da lazlo, 8 Maggio 2019.

Tag (etichette):
  1. lazlo

    lazlo Nuovo Utente

    Registrato:
    24 Gennaio 2018
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Salve ragazzi, come si evince dal titolo sto cercando di creare un div di tipo sticky, quindi che si blocchi al top della pagina quando si scrolla. Sono a conoscenza del fatto che esiste una specifica regola CSS per poter creare uno sticky senza dover utilizzare metodi più complessi, tuttavia il funzionamento è correlato al suo elemento genitore e, se gli elementi sono tanti uno dentro l'altro diventa praticamente impossibile far funzionare questa soluzione.
    Nel mio caso parliamo di una pagina di un sito che sto costruendo attraverso un visual composer in cui l'elemento che deve diventare sticky è contenuto in parecchi contenitori relativi agli elementi del visual composer e, piuttosto che impazzire a cambiare tutti gli overflow, che comunque mi vanno poi ad incasinare tutto il layout, preferisco usare direttamente una regola javascript.
    Cercando in rete, sono riuscito a trovare il seguente script:
    Codice:
    var menu = document.querySelector('.menu')
    var menuPosition = menu.getBoundingClientRect().top;
    window.addEventListener('scroll', function() {
        if (window.pageYOffset >= menuPosition) {
            menu.style.position = 'fixed';
            menu.style.top = '0px';
        } else {
            menu.style.position = 'static';
            menu.style.top = '';
        }
    });
    Il codice sopra postato funziona perfettamente, trasformandomi l'elemento in un elemento di tipo fixed. Come potete vedere dal codice, la funzione si attiva quando l'elemento arriva al top della pagina, diventando poi fixed.
    Nel mio caso, però, ho già un menù principale di tipo fixed che ha un'altezza fissa di 45 px.
    E' possibile modificare quello script in modo che si attivi non quando l'elemento arriva al top della pagina ma dandogli un "top+45px"?(scusate il mio linguaggio poco tecnico, spero di essermi spiegato).
     
Sto caricando...

Condividi questa Pagina