
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