Skip to content

Instantly share code, notes, and snippets.

@FutureMedia
Last active June 20, 2019 17:49
Show Gist options
  • Save FutureMedia/738bb73f21678b3bca418a3854012d3f to your computer and use it in GitHub Desktop.
Save FutureMedia/738bb73f21678b3bca418a3854012d3f to your computer and use it in GitHub Desktop.
Clip-path animation with GSAP
<div class="container">
<figure class="masked"></figure>
</div>
// get image information
var img = new Image();
img.src = 'https://images.unsplash.com/photo-1476522590778-ce524105b925?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE0NTg5fQ';
var ratio = img.width / img.height;
console.log( "Ratio: "+ratio );
$('.masked').imagesLoaded( { background: true }, function() {
var tl = new TimelineMax( { repeat:-1, repeatDelay:4 } );
tl
.set( '.masked', { backgroundSize: "+=125% +=125%" } )
.to( '.masked', 0.35, { clipPath:"polygon(50% 0%, 51% 0%, 51% 100%, 50% 100%)" } )
.to( '.masked', 0.45, { clipPath:"polygon(40% 0%, 51% 0%, 51% 100%, 40% 100%)" } )
.to( '.masked', 0.7, { clipPath:"polygon(70% 0%, 51% 0%, 51% 100%, 70% 100%)", ease: Power4.easeOut } )
.to( '.masked', 1.4, { clipPath:"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100% )", ease: Power2.easeOut } )
.to( '.masked', 1, { backgroundSize:"100% 100%", ease: Power3.easeInOut }, "-=1" );
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TweenMax.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/4.1.4/imagesloaded.pkgd.min.js"></script>
body {
padding: 0;
margin: 0;
background: #111111;
}
.container {
position: relative;
width: 100%;
height: 100vh;
margin: 0;
}
figure {
/* reset */
margin: 0;
position: absolute;
top: 64px;
left: 64px;
width: 80%;
height: 80%;
background-image: url(https://images.unsplash.com/photo-1476522590778-ce524105b925?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE0NTg5fQ);
background-size: cover;
background-position: center;
background-repeat: no-repeat;
box-shadow: inset 0px 0px 160px 80px rgba(0,0,0,0.3);
}
.masked {
clip-path: polygon(20% 0%, 20% 0%, 20% 100%, 20% 100%);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment