jQuery: effetto di scrolling a parallasse con l'evento mousewheel

jQuery: effetto di scrolling a parallasse con l'evento mousewheel

Grazie al plugin jQuery MouseWheel possiamo creare un effetto di scrolling a parallasse con jQuery. Questo plugin fa in modo che l'evento mousewheel funzioni nei vari browser.

La marcatura

Possiamo creare un layout a pieno schermo con la seguente marcatura:


<body>
<div id="site">
  <div id="section-wrapper">
    <div class="section" id="section-1"></div>
    <div class="section" id="section-2"></div>
    <div class="section" id="section-3"></div>
  </div>
</div>
</body>

Quindi includiamo i nostri script prima della chiusura dell'elemento body:


<script src="jquery.js"></script>
<script src="jquery.mousewheel.js"></script>
<script src="myscript.js"></script>
</body>
</html>

Il codice CSS

Il nostro documento non necessita di scrollbar quindi impostiamo la proprietà overflow su hidden. Ogni sezione verrà posizionata in modo relativo in modo da poter calcolare facilmente il suo offset verticale e spostare il contenitore:


html, body {
    overflow: hidden;
}

#site {
    width: 100%;
}

#section-wrapper {
    position: relative;
    width: 100%;
}

div.section {
    width: 100%;
    position: relative;
}

#section-1 {
    background: #ccc;
}

#section-2 {
    background: #666;
}

#section-3 {
    background: #000;
}
​

Il codice jQuery

Con jQuery dobbiamo innanzitutto impostare l'altezza di ciascuna sezione sull'altezza globale della finestra del browser. Quindi il contenitore delle sezioni verrà spostato in alto o in basso usando la sua proprietà top. Durante questa azione dobbiamo assegnare una classe alla sezione corrente in modo da poterla selezionare facilmente durante lo scrolling:


var Parallax = {
    utils: {
        doSlide: function(section) {
            var top = section.position().top;
            $('#section-wrapper').stop().animate({
                top: -top
            }, 600, 'linear', function() {
                section.addClass('slided').siblings('div.section').removeClass('slided');
            });
        }
    },
    fn: {
        setHeights: function() {
            $('div.section').height($(window).height());
        },
        onSiteScroll: function() {
            var section = null;

            $('#section-wrapper').mousewheel(function(event, delta) {
                event.preventDefault();
                if (delta < 0) { // in basso
                    section = ($('.slided').length) ? $('.slided') : $('#section-1');
                    var next = (section.next().length) ? section.next() : $('#section-1');
                    Parallax.utils.doSlide(next);
                }
                else if(delta > 0) { // in alto
                    section = ($('.slided').length) ? $('.slided') : $('#section-1');
                    var prev = (section.prev().length) ? section.prev() : $('#section-1');
                    Parallax.utils.doSlide(prev);
                }
            });


        }
    },

    init: function() {
        for (var prop in this.fn) {
            if (typeof this.fn[prop] === 'function') {
                this.fn[prop]();
            }
        }
    }
};

Parallax.init();​

Torna su