Autore
Andrea Sironi
Designer
11 Ottobre 2023
Le animazioni degli elementi controllate dallo scorrimento di una pagina web possono essere molto efficaci e sorprendenti, accompagnano l’esplorazione e contribuiscono a rendere unici siti e landing page.
Insight
Designer
Trovare librerie che consentano di ottenere tutti i diversi effetti in maniera semplice — anche per chi si trova più a suo agio con i CSS che non javascript — non è facile.
In questo articolo vedremo alcune delle potenzialità di ScrollMagic:
una libreria molto completa che permette davvero di ottenere qualsiasi risultato, soprattutto lavorando in accoppiata con la GSAP, oppure sfruttando al meglio l’animazione CSS.
L’obiettivo è quello di esplorare i concetti di base per ottenere già buona parte degli effetti che utilizzeremo nella maggior parte dei casi e che potete vedere nella demo.
Guarda la Demo
I concetti di base:
Per le varie opzioni, rimando all’ottimo cheatsheet.
Colleghiamo i .js necessari e siamo pronti a seguire il nostro personaggio (che per comodità chiameremo “pino”) nello scroll della pagina. (crediti: CSS Emoji)
<!-- Main scrollMagic Js --> <script src="js/lib/scrollmagic/ScrollMagic.min.js"></script> <!-- greensock / GSAP animation library (optional) --> <script src="js/lib/greensock/TweenMax.min.js"></script> <script src="js/lib/scrollmagic/plugins/animation.gsap.min.js"></script> <!-- scrollMagic debug plugin (optional) --> <script src="js/lib/scrollmagic/plugins/debug.addIndicators.min.js"></script> <!-- Our .js file. we will insert site-specific scrollmagic code here --> <script src="js/main.js"></script>
ScrollMagic ci fornisce inoltre un comodo plugin che mostra inizio e fine di una scena e il relativo trigger. Basta inserire il riferimento al plugin nella scena che stiamo preparando.
Pino rimane agganciato alla scena allo scroll per una durata limitata.
var controller = new ScrollMagic.Controller({}); // -------------------- // Scena 1 new ScrollMagic.Scene({ triggerElement: '#scene1', triggerHook: 0, offset: -50, duration: '100%' // durata legata all'altezza della schermata visibile }) .setPin('#pino1', { pushfollowers: false }) .addTo(controller);
Pino rimane agganciato alla scena e ci segue fino alla fine della pagina (duration non specificata).
// -------------------- // scena 2 new ScrollMagic.Scene({ triggerElement: '#scene2' }) .setPin('#pino2') .addTo(controller);
Un altro Pino inizia un movimento sinistra/destra in loop (usando la libreria TweenMax per l’animazione).
// -------------------- // scena 3 var tween = TweenMax.fromTo( '#pino3', 1, { left: -100 }, { left: 300, repeat: -1, yoyo: true, ease: Circ.easeInOut } ); new ScrollMagic.Scene({ triggerElement: '#scene3', duration: '100%' }) .setTween(tween) .addTo(controller);
Un altro Pino cambia progressivamente in base ad una classe css.
// -------------------- // scena 4 var tween2 = TweenMax.to('#pino4', 3, { className: '+=big' }); new ScrollMagic.Scene({ triggerElement: '#scene4', offset: -100, duration: '100%' }) .setTween(tween2) .setPin('#pino4') .addTo(controller);
Una serie di piccoli gino fa il suo ingresso con un leggero ritardo uno dall’altro.
// -------------------- // scena 5 var tween3 = TweenMax.staggerFromTo( '.gino', 3, { left: 600, opacity: 0 }, { left: 0, opacity: 1, ease: Back.easeOut }, 0.3 ); var scene = new ScrollMagic.Scene({ triggerElement: '#scene5', duration: 600 }) .setTween(tween3) .addTo(controller);
È possibile aggiungere con un funzione una classe css a tutti gli elementi con una classe specifica in modo da prevedere molto rapidamente animazioni in ingresso da gestire via css (es. fade-in, move-up, slide-left,…)
// -------------------- // Aggiungi classe allo scroll var revealElements = document.getElementsByClassName('el-rev'); for (var i = 0; i & lt; revealElements.length; i++) { new ScrollMagic.Scene({ triggerElement: revealElements[i], offset: -50, reverse: false, triggerHook: 0.9 }) .setClassToggle(revealElements[i], 'visible') .addTo(controller); }
In conclusione, le possibilità che si aprono sono davvero moltissime.
La vera difficoltà sta nel pensare e progettare grafica ed esperienza di esplorazione fluide ed efficaci coerenti con l’argomento e i contenuti della pagina.
Designer