Tinder's swiping and like/dislike animation (buttons work as well as swiping 'drag and drop'). Made with GSAP.
A Pen by Bright Sparks on CodePen.
<script src="http://cdnjs.cloudflare.com/ajax/libs/gsap/latest/plugins/CSSPlugin.min.js"></script> | |
<script src="http://cdnjs.cloudflare.com/ajax/libs/gsap/latest/easing/EasePack.min.js"></script> | |
<script src="http://cdnjs.cloudflare.com/ajax/libs/gsap/latest/TweenLite.min.js"></script> | |
<script src="http://cdnjs.cloudflare.com/ajax/libs/gsap/latest/TweenMax.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.15.0/utils/Draggable.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> | |
<link href='http://fonts.googleapis.com/css?family=Noto+Sans' rel='stylesheet' type='text/css'> | |
<div class="phone"> | |
<div class="app"> | |
<div class="header"> | |
<span class="settings"></span> | |
<img src="http://web.arjentienkamp.com/codepen/tinder/logo.jpg"/> | |
<span class="chat"></span> | |
</div> | |
<div class="content"> | |
</div> | |
<div class="footer"> | |
<div id="swipe_dislike" class="rate"></div> | |
<div class="info"></div> | |
<div id="swipe_like" class="rate"></div> | |
</div> | |
</div> | |
</div> |
$(document).ready(function(event) { | |
$("div#swipe_like").on( "click", function() { | |
swipeLike(); | |
}); | |
$("div#swipe_dislike").on( "click", function() { | |
swipeDislike(); | |
}); | |
addNewProfile(); | |
function swipe() { | |
Draggable.create("#photo", { | |
throwProps:true, | |
onDragEnd:function(endX) { | |
if(Math.round(this.endX) > 0 ) { | |
swipeLike(); | |
} | |
else { | |
swipeDislike(); | |
} | |
console.log(Math.round(this.endX)); | |
} | |
}); | |
} | |
function swipeLike() { | |
var $photo = $("div.content").find('#photo'); | |
var swipe = new TimelineMax({repeat:0, yoyo:false, repeatDelay:0, onComplete:remove, onCompleteParams:[$photo]}); | |
swipe.staggerTo($photo, 0.8, {bezier:[{left:"+=400", top:"+=300", rotation:"60"}], ease:Power1.easeInOut}); | |
addNewProfile(); | |
} | |
function swipeDislike() { | |
var $photo = $("div.content").find('#photo'); | |
var swipe = new TimelineMax({repeat:0, yoyo:false, repeatDelay:0, onComplete:remove, onCompleteParams:[$photo]}); | |
swipe.staggerTo($photo, 0.8, {bezier:[{left:"+=-350", top:"+=300", rotation:"-60"}], ease:Power1.easeInOut}); | |
addNewProfile(); | |
} | |
function remove(photo) { | |
$(photo).remove(); | |
} | |
function addNewProfile() { | |
var names = ['Lieke', 'Christina', 'Sanne', 'Soraya', 'Chanella', 'Larissa', 'Michelle'][Math.floor(Math.random() * 7)]; | |
var ages = ['19','22','18','27','21', '18', '24'][Math.floor(Math.random() * 7)] | |
var photos = ['1', '2', '3', '4', '5', '6', '7'][Math.floor(Math.random() * 7)] | |
$("div.content").prepend('<div class="photo" id="photo" style="background-image:url(http://web.arjentienkamp.com/codepen/tinder/photo'+photos+'.jpg)">' | |
+ '<span class="meta">' | |
+ '<p>'+names+', '+ages+'</p>' | |
+ '<span class="moments">0</span>' | |
+ '<span class="users">0</span>' | |
+ '</span>' | |
+ '</div>'); | |
swipe(); | |
} | |
}); |
.phone { | |
width: 350px; | |
height: 600px; | |
font-family: 'Noto Sans', sans-serif; | |
background: url(http://web.arjentienkamp.com/codepen/tinder/iphone.png); | |
background-size: 382px; | |
background-repeat: no-repeat; | |
margin-left: auto; | |
margin-right: auto; | |
margin-top: 4em; | |
padding-top: 7em; | |
padding-left: 3.2em; | |
padding-right: 3.7em; | |
} | |
.app { | |
width: 285px; | |
height: 490px; | |
background-color: #FFF; | |
padding-top: 12px; | |
} | |
.content { | |
padding: 10px; | |
padding-top: 0px; | |
} | |
.header { | |
background-color: #FFF; | |
width:100%; | |
height:40px; | |
border-bottom: 1px solid #e2e2e2; | |
text-align: center; | |
margin-bottom: 10px; | |
} | |
.header img { | |
width:70px; | |
} | |
div.photo { | |
position:absolute; | |
display: block; | |
margin-left: auto; | |
margin-right: auto; | |
width:265px; | |
height:315px; | |
border:1px solid #a6a9aa; | |
border-radius: 8px; | |
background-size: cover; | |
background-repeat: no-repeat; | |
box-shadow: 0px 1px 7px 0px #cfcfcf; | |
} | |
span.meta { | |
display: block; | |
height:48px; | |
background-color: #FFF; | |
margin-top: 267px; | |
border-radius: 0px 0px 8px 8px; | |
font-size: 18px; | |
box-sizing:border-box; | |
padding: 12px; | |
} | |
span.meta span { | |
float: right; | |
color:#cfcfcf; | |
} | |
.users { | |
display: block; | |
width: 20px; | |
background: url(http://web.arjentienkamp.com/codepen/tinder/users.png); | |
background-size: 20px; | |
background-repeat: no-repeat; | |
padding-left: 30px; | |
background-position: 5px; | |
} | |
.moments { | |
display: block; | |
width: 14px; | |
background: url(http://web.arjentienkamp.com/codepen/tinder/moments.png); | |
background-size: 26px; | |
background-repeat: no-repeat; | |
padding-left: 35px; | |
background-position: 5px; | |
} | |
.chat { | |
display: block; | |
width: 34px; | |
height: 30px; | |
background: url(http://web.arjentienkamp.com/codepen/tinder/chat.png); | |
background-size: 30px; | |
background-repeat: no-repeat; | |
padding-left: 4px; | |
background-position: 5px; | |
float: right; | |
margin-top: 0px; | |
} | |
.settings { | |
display: block; | |
width: 34px; | |
height: 30px; | |
background: url(http://web.arjentienkamp.com/codepen/tinder/settings.png); | |
background-size: 30px; | |
background-repeat: no-repeat; | |
padding-left: 4px; | |
background-position: 5px; | |
float: left; | |
margin-top: 0px; | |
} | |
.footer { | |
margin-left: auto; | |
margin-right: auto; | |
margin-top: 318px; | |
width: 100%; | |
padding-left: 40px; | |
padding-top: 6px; | |
} | |
.rate { | |
width: 70px; | |
height:70px; | |
border-radius: 70px; | |
background: #FFF; | |
border: 5px solid #f0f0f0; | |
float: left; | |
box-shadow: 1px 1px 1px 0px #e9e9e9; | |
} | |
.rate:nth-child(1) { | |
margin-left: 4px; | |
background: url(http://web.arjentienkamp.com/codepen/tinder/delete.png); | |
background-size: 25px; | |
background-position: center; | |
background-repeat: no-repeat; | |
} | |
.rate:nth-child(3) { | |
margin-left: -4px; | |
background: url(http://web.arjentienkamp.com/codepen/tinder/heart.png); | |
background-size: 25px; | |
background-position: center; | |
background-repeat: no-repeat; | |
} | |
.info { | |
width: 40px; | |
height: 40px; | |
border-radius: 40px; | |
background: #FFF; | |
border: 5px solid #f0f0f0; | |
float: left; | |
box-shadow: 1px 1px 1px 0px #e9e9e9; | |
margin-top: 14px; | |
margin-left: -4px; | |
background: url(http://web.arjentienkamp.com/codepen/tinder/info.png); | |
background-size: 15px; | |
background-position: center; | |
background-repeat: no-repeat; | |
} | |
p { | |
padding:0; | |
margin:0; | |
float: left; | |
} |
Tinder's swiping and like/dislike animation (buttons work as well as swiping 'drag and drop'). Made with GSAP.
A Pen by Bright Sparks on CodePen.