Ascoltare l'evento di scorrimento, quando si scorre oltre l'elemento che si desidera mantenere in vista si modifica gli elementi in cui è la posizione di 'fixed'.
Ho creato un jsFiddle che illustra questo: http://jsfiddle.net/luisperezphd/EcsS6/
Ci sono un paio di cose da tenere a mente per esempio, un elemento fisso sarà posto rispetto alla finestra o il primo genitore con un position: relative
.
In secondo luogo quando si modifica un elemento in fixed
si riduce lo spazio in cui si trovava prima che il contenuto sottostante si spostasse verso l'alto. Se vuoi che l'effetto appaia liscio devi mettere qualcosa al suo posto che occupa la stessa quantità di spazio che ha fatto.
Nell'esempio jsFiddle l'ho realizzato avvolgendo l'elemento di intestazione all'interno di un altro elemento e impostandone l'altezza in modo che corrisponda (programmaticamente). Ci sono diversi modi in cui puoi averlo realizzato.
Includerò anche il codice seguente, nel mio esempio utilizzo jQuery.
JavaScript:
var $header = $("#header");
var HeaderOffset = $header.position().top;
$("#headerContainer").css({ height: $header.height() });
$("#container").scroll(function() {
if($(this).scrollTop() > HeaderOffset) {
$header.addClass("fixedTop");
} else {
$header.removeClass("fixedTop");
}
});
CSS:
#containerParent {
position: relative;
width: 180px;
}
#container {
height:200px;
overflow:auto;
}
#header {
background:black;
color:white;
width: 100%;
}
.fixedTop {
position: absolute;
top: 0;
}
HTML di esempio:
<h1>Fixed Position Header - after a point</h1>
<div id="containerParent">
<div id="container">
This text is an example of content that might occur before the header.
<div id="headerContainer">
<div id="header">Header</div>
</div>
<div>
Below is enough content to trigger scrolling.
line 1 <br/>
line 2 <br/>
line 3 <br/>
line 4 <br/>
line 5 <br/>
line 6 <br/>
line 7 <br/>
line 8 <br/>
line 9 <br/>
line 10 <br/>
line 11 <br/>
line 12 <br/>
line 13 <br/>
line 14 <br/>
line 15 <br/>
</div>
</div>
</div>
fonte
2012-02-29 20:05:36
I * credo * questo è il modo corretto per farlo, al contrario di javascript. – ninjagecko
Hai anche letto questo articolo di John Resig (autore di jQuery) su scroll event e performance http://ejohn.org/blog/learning-from-twitter/ – jcubic
In effetti, trovo che la maggior parte dei browser, anche i browser moderni come Chrome che sono ottimizzati per la velocità, lento a una scansione se hai usato la posizione: fissi o scorre i trucchi. – ninjagecko