Learn how to use ScrollMagic and GreenSock TweenMax and TimelineMax to build a simple story telling website from scratch.
Read the whole step by step tutorial: https://ihatetomatoes.net/simple-scrollmagic-tutorial/
A Pen by Petr Tichy on CodePen.
<section id="one"> | |
<div class="inner innerS1"> | |
<h1>Simple ScrollMagic Tutorial</h1> | |
<p>Learn how to create a <strong>simple scrolling website</strong> using ScrollMagic</p> | |
</div> | |
</section> | |
<section id="two"> | |
<div class="innerText innerS2"> | |
<h2>Why to learn ScrollMagic?</h2> | |
<ul class="features"> | |
<li>It's great for <strong>story telling websites</strong></li> | |
<li>It gives you <strong>endless creative power</strong></li> | |
<li>It's <strong>easy to use</strong> once you get it</li> | |
</ul> | |
</div> | |
</section> | |
<section id="three"> | |
<div class="innerText innerS3"> | |
<h2>When to use ScrollMagic?</h2> | |
<ul class="features"> | |
<li>When building <strong>interactive infographics</strong></li> | |
<li>When introducing your <strong>product or service</strong></li> | |
<li>When sharing your <strong>unique story or timeline</strong></li> | |
</ul> | |
</div> | |
</section> | |
<section id="four"> | |
<div class="innerText innerS4"> | |
<h2>Want to learn more about ScrollMagic?</h2> | |
<ul class="features"> | |
<li>Read the full article <a href="https://ihatetomatoes.net/simple-scrollmagic-tutorial/">Simple ScrollMagic Tutorial</a></li> | |
</ul> | |
</div> | |
<div class="iphone"> | |
<p class="screen screenHat"><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/107366/img_scrollMagic.png" /></p> | |
<p class="screen screenA">A</p> | |
<p class="screen screenB">B</p> | |
<p class="screen screenC">C</p> | |
</div> | |
</section> |
var wh = window.innerHeight, | |
$iphone = $('.iphone'), | |
$innerS1 = $('.innerS1'), | |
$innerS2 = $('.innerS2'), | |
$innerS3 = $('.innerS3'), | |
$innerS4 = $('.innerS4'), | |
$screenHat = $('.screenHat'), | |
$screenA = $('.screenA'), | |
$screenB = $('.screenB'), | |
$screenC = $('.screenC'); | |
// init | |
var ctrl = new ScrollMagic.Controller({ | |
globalSceneOptions: { | |
triggerHook: 'onLeave' | |
} | |
}); | |
// Create scene | |
$("section").each(function() { | |
new ScrollMagic.Scene({ | |
triggerElement: this, | |
duration: '50%' | |
}) | |
.setPin(this) | |
.addTo(ctrl); | |
}); | |
// iPhone intro animation Tween | |
/* | |
var iphoneIntro = TweenMax.from($iphone, 1, { | |
yPercent: 50, | |
xPercent: 100, | |
ease: Cubic.easeOut | |
}); | |
*/ | |
// iPhone intro animation Timeline | |
var iphoneIntroTl = new TimelineMax(); | |
iphoneIntroTl | |
.from($iphone, 1, {yPercent: 50,xPercent: 100, ease: Power4.easeInOut}) | |
.to($innerS1, 0.5, {opacity: 0, yPercent: -5, scale: 0.98}, '0'); | |
// iPhone back to stylesheet position | |
new ScrollMagic.Scene({ | |
duration: '70%' | |
}) | |
.setTween(iphoneIntroTl) | |
.triggerElement($('body')[0]) | |
.addTo(ctrl); | |
// Animate the hat up, letter A in and fade in content of section 2 | |
var iphoneContentHat = new TimelineMax(); | |
iphoneContentHat | |
.to($screenHat, 1, {yPercent: -50, ease: Power4.easeOut}) | |
.fromTo($screenA, 1, {yPercent: 20, autoAlpha: 0, scale: 0.8}, {yPercent: 0, autoAlpha: 1, scale: 1, ease: Power4.easeOut}, '0') | |
.from($innerS2, 1, {autoAlpha: 0}, '-=0.3'); | |
new ScrollMagic.Scene({ | |
offset: wh*0.6, | |
triggerElement: $('body')[0], | |
duration: '80%' | |
}) | |
.setTween(iphoneContentHat) | |
.addIndicators() | |
.addTo(ctrl); | |
// Animate letter A out, letter B in and fade in content of section 3 | |
var iphoneContent1Tl = new TimelineMax(); | |
iphoneContent1Tl | |
.to($screenA, 0.3, {yPercent: -30, autoAlpha: 0, ease: Power4.easeInOut}) | |
.fromTo($screenB, 1, {yPercent: 20, autoAlpha: 0}, {yPercent: 0, autoAlpha: 1, ease: Power4.easeInOut}) | |
.from($innerS3, 1, {autoAlpha: 0}, '-=0.7'); | |
new ScrollMagic.Scene({ | |
triggerElement: $('.innerS2 h2')[0], | |
duration: '50%' | |
}) | |
.setTween(iphoneContent1Tl) | |
.addTo(ctrl); | |
// Animate letter B out, letter C in and fade in content of section 4 | |
var iphoneContent2Tl = new TimelineMax(); | |
iphoneContent2Tl | |
.to($screenB, 0.3, {yPercent: -30, autoAlpha: 0, ease: Power4.easeInOut}) | |
.fromTo($screenC, 1, {yPercent: 20, autoAlpha: 0}, {yPercent: 0, autoAlpha: 1, ease: Power4.easeInOut}) | |
.from($innerS4, 1, {autoAlpha: 0}, '-=0.7'); | |
new ScrollMagic.Scene({ | |
triggerElement: $('.innerS3 h2')[0], | |
duration: '50%' | |
}) | |
.setTween(iphoneContent2Tl) | |
.addTo(ctrl); |
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.16.0/TweenMax.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.3/ScrollMagic.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.3/plugins/animation.gsap.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.2/plugins/debug.addIndicators.min.js"></script> |
Learn how to use ScrollMagic and GreenSock TweenMax and TimelineMax to build a simple story telling website from scratch.
Read the whole step by step tutorial: https://ihatetomatoes.net/simple-scrollmagic-tutorial/
A Pen by Petr Tichy on CodePen.
body { | |
font: 16px/1.5 'Open Sans', Helvetica, Helvetica Neue, Arial, sans-serif; | |
color: rgba(0, 0, 0, 0.9); | |
} | |
html, body { | |
height: 100%; | |
margin: 0; | |
} | |
h1 { | |
padding: 20% 0 0 0; | |
margin: 0; | |
text-align: center; | |
font-size: 36px; | |
color: rgba(0, 0, 0, 0.9); | |
position: relative; | |
} | |
h1:before { | |
content: '❤'; | |
display: block; | |
position: absolute; | |
bottom: 50px; | |
left: 50%; | |
text-align: center; | |
width: 100px; | |
margin-left: -50px; | |
color: #ff466a; | |
font-size: 30px; | |
} | |
p { | |
text-align: center; | |
color: rgba(0, 0, 0, 0.5); | |
} | |
strong { | |
color: rgba(0, 0, 0, 0.9); | |
} | |
section { | |
height: 100%; | |
position: relative; | |
text-align: center; | |
} | |
/* Center aligned first section */ | |
section .inner { | |
margin: 0 auto; | |
max-width: 85%; | |
} | |
/* Content of the following sections aligned next to the iphone */ | |
section .innerText { | |
position: absolute; | |
top: 50%; | |
left: 50%; | |
transform: translate(-100px, -50%); | |
text-align: left; | |
} | |
/* iPhone/Card positioned to the left - this is a default position */ | |
.iphone { | |
width: 290px; | |
height: 600px; | |
border-radius: 10px; | |
position: fixed; | |
top: 50%; | |
left: 50%; | |
transform: translate(-150%, -50%); | |
background-color: #3757D0; | |
background-image: -webkit-radial-gradient(#81bcff, #5d7fce); | |
background-image: radial-gradient(#81bcff, #5d7fce); | |
} | |
/* Centered content of the ScrollMagic card */ | |
.iphone p { | |
font-size: 140px; | |
margin: 0; | |
position: absolute; | |
top: 50%; | |
left: 50%; | |
transform: translate(-50%, -50%); | |
color: rgba(255, 255, 255, 0.9); | |
} | |
/* Letters hidden by default */ | |
.iphone p.screenA, .iphone p.screenB, .iphone p.screenC { | |
opacity: 0; | |
visibility: hidden; | |
} | |
/* ScrollMagic hat on top of letters */ | |
.iphone p.screenHat { | |
z-index: 2; | |
} | |
.iphone p.screenHat img { | |
max-width: 130px; | |
} | |
/* Bullet list */ | |
.features { | |
list-style: none; | |
margin: 0; | |
padding: 0; | |
color: rgba(0, 0, 0, 0.6); | |
} | |
.features li { | |
position: relative; | |
padding-left: 17px; | |
} | |
/* A heart instead of a bullet */ | |
.features li:before { | |
content: '❤'; | |
font-size: 11px; | |
position: absolute; | |
left: 0; | |
top: 5px; | |
display: block; | |
color: #ff466a; | |
} |