Parallax walk cycle
A Parallax walk cycle example.Scroll down to walk.
Made with
Html
Css/scss
JavaScript
html
<div id="app">
<div class="columns">
<div class="is-12 column has-text-centered">
<h1>Scroll down to let Fred walk</h1>
</div>
</div>
<div class="columns">
<div class="is-12 column" id="pinned_wrapper">
<div id="sky"></div>
<div id="city"></div>
<div id="skyline_wrapper">
<div id="skyline"></div>
</div>
<div id="walker"></div>
</div>
</div>
</div>
Css
#headline {
opacity: 0;
transform: translateY(50px);
}
.column {
padding: 0.75rem;
}
#pinned_wrapper {
position: relative;
width: 100%;
height: 400px;
#city {
position: relative;
width: 100%;
height: 400px;
background-image: url('http://zauberwald.ultrabold.de/static/img/background.acb1581.png');
background-repeat: repeat-x;
background-size: cover;
background-position-y: 23px;
z-index: 10;
}
#sky {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 400px;
background: linear-gradient(to bottom, rgb(155, 180, 223) 0%, rgb(221, 240, 252) 25%);
background-repeat: no-repeat;
background-position-y: -11px;
z-index: 1;
}
#skyline_wrapper {
position: absolute;
top: -20%;
left: 0;
width: 100%;
height: 400px;
z-index: 5;
#skyline{
position: relative;
width: 100%;
height: 400px;
background: url('http://zauberwald.ultrabold.de/static/img/skyline.a23b304.png');
background-repeat: repeat-x;
background-size: contain;
background-position-y: 44px;
background-position-x: 0;
}
}
#walker {
background: url('http://zauberwald.ultrabold.de/static/img/walker.305185c.png') no-repeat 0% 0%;
position: absolute;
height: 190px;
width: 250px;
left: 0;
top: 47%;
transform: translateX(-200px);
z-index: 15;
}
}
JavaScript
new Vue({
el: '#app',
data() {
return {
controller: new ScrollMagic.Controller(),
}
},
methods: {
fadeIn() {
var tween = TweenMax.to('#headline', 0.5, {
opacity: 1,
y: 0,
ease: Circ.easeOut,
});
},
pinContainer() {
var scene = new ScrollMagic.Scene({
triggerElement: '#pinned_wrapper',
triggerHook: 0,
duration: 9920
})
.setPin('#pinned_wrapper', {pushFollowers: true})
.addTo(this.controller);
},
walkIn() {
var moveBackground = TweenMax.to('#walker', 1.0, {
backgroundPositionX: '100%',
ease: SteppedEase.config(6),
});
var moveForward = TweenMax.to('#walker', 1.0, {
x: 100,
ease: Power0.easeNone,
});
var walkIn = new ScrollMagic.Scene({
triggerElement: '#pinned_wrapper', duration: 200
})
.addTo(this.controller)
.setTween([
moveBackground,
moveForward
]);
},
backgroundWalkcycle() {
var moveBackground = TweenMax.to('#city', 1, {
backgroundPositionX: '400%',
ease: Power0.easeNone,
});
var moveSkyline = TweenMax.to('#skyline', 1, {
backgroundPositionX: '-500px',
ease: Power0.easeNone,
});
var walkcycle = TweenMax.fromTo('#walker', 1,
{
backgroundPositionX: '0%',
},
{
backgroundPositionX: '100%',
ease: SteppedEase.config(6),
repeat: 20
}
);
var walkcycleScene = new ScrollMagic.Scene({
triggerElement: '#pinned_wrapper',
offset: 200,
duration: '9920px'
})
// .addIndicators({name: 'walkLoop'})
.setTween(walkcycle)
.addTo(this.controller);
var backgroundScene = new ScrollMagic.Scene({
triggerElement: '#pinned_wrapper',
offset: 200,
duration: '9920px'
})
// .addIndicators({name: 'walkLoop'})
.setTween(moveBackground)
.addTo(this.controller);
var skylineScene = new ScrollMagic.Scene({
triggerElement: '#pinned_wrapper',
offset: 200,
duration: 9920
})
// .addIndicators({name: 'walkLoop'})
.setTween(moveSkyline)
.addTo(this.controller);
},
},
mounted() {
this.fadeIn();
this.pinContainer();
this.walkIn();
this.backgroundWalkcycle();
},
});
Demo
See the Pen Parallax walk cycle by Christian Bielak (@ChristianBielak) on CodePen.