List swiping
by tonytlwu
HTML
<script src="http://cl.ly/dKJu/pv.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mixitup/2.1.10/jquery.mixitup.min.js"></script>
<div class="list-swipe-save">
<div class="filter-wrapper">
<ul class="list-save-filter">
<li class="filter active" data-filter="all">All</li>
<li class="filter" data-filter=".saved">My Albums</li>
</ul>
</div>
<div class="label-instruction">
<small class="label label-all">Swipe Right to add to <strong>My Albums</strong> →</small>
<small class="label label-my">← Swipe Left to remove from <strong>My Albums</strong></small>
<small class="label label-empty">Nothing is found in <strong>My Albums</strong>. Swipe Right (→) on any list item to save it in <strong>My Albums</strong></small>
</div>
<ul class="list-swipe" id="swipe-to-save-list">
<li>
<div class="list-desc">
<p class="list-title">What Do You Mean?</p>
<p>Justin Bieber</p>
</div>
</li>
<li>
<div class="list-desc">
<p class="list-title">Everything Is 4</p>
<p>Jason Derulo</p>
</div>
</li>
<li>
<div class="list-desc">
<p class="list-title">King</p>
<p>Years & Years</p>
</div>
</li>
<li>
<div class="list-desc">
<p class="list-title">Love Myself</p>
<p>Hailee Steinfeld</p>
</div>
</li>
<li>
<div class="list-desc">
<p class="list-title">Omen</p>
<p>Disclosure, Sam Smith</p>
</div>
</li>
<li>
<div class="list-desc">
<p class="list-title">Hold Me Up</p>
<p>Conrad Sewell</p>
</div>
</li>
<li>
<div class="list-desc">
...
CSS
body {
margin: 25px;
font-family: 'Helvetica Neue', sans-serif;
color: #333;
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
* {
box-sizing: border-box;
}
ul {
list-style: none;
padding: 0;
margin: 0;
margin-top: 1.3em;
border-bottom: 1px solid #dadada;
text-align: left;
}
ul li {
border-top: 1px solid #dadada;
padding: 10px 10px 10px 0;
}
ul h2,
ul .list-title {
margin-top: 0;
margin-bottom: 0.2em;
font-size: 1.4em;
font-weight: 100;
}
ul p {
margin: 0;
font-size: 0.8em;
font-weight: 400;
}
ul.list-swipe li {
position: relative;
overflow: hidden;
cursor: ew-resize;
}
.filter-loaded ul.list-swipe {
overflow: hidden;
}
.filter-loaded ul.list-swipe li {
-webkit-transition-origin: center top;
transition-origin: center top;
display: none;
width: 100%;
}
ul.list-swipe .list-swipe-wrapper {
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
}
ul.list-swipe .list-swipe-wrapper.animated {
-webkit-transition: all 0.35s cubic-bezier(0,0,0.5,1);
transition: all 0.35s cubic-bezier(0,0,0.5,1);
}
ul.list-swipe .list-swipe-wrapper.restore .swipe-action {
pointer-events: none;
-webkit-animation-fill-mode: forwards;
-webkit-animation-duration: 0.35s;
-webkit-animation-delay: 0.65s;
-webkit-animation-iteration-count: 1;
animation-fill-mode: forwards;
animation-duration: 0.2s;
animation-delay: 0.5s;
animation-iteration-count: 1;
}
@-webkit-keyframes swipeFadeOut {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
@keyframes swipeFadeOut {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
ul.list-swipe .list-swipe-wrapper.restore.action-swipe-right...
JavaScript
var transformName = function () {
var i,
undefined,
el = document.createElement('div'),
transforms = {
'webkitTransform' : 'webkitTransform',
'mozTransform' : 'mozTransform',
'msTransform' : 'msTransform',
'oTransform' : 'oTransform'
};
for (i in transforms) {
if (transforms.hasOwnProperty(i) && el.style[i] !== undefined) {
return transforms[i];
}
}
return false;
};
var transitionEndEventName = function () {
var i,
undefined,
el = document.createElement('div'),
transitions = {
'transition':'transitionend',
'OTransition':'otransitionend',
'MozTransition':'transitionend',
'WebkitTransition':'webkitTransitionEnd'
};
for (i in transitions) {
if (transitions.hasOwnProperty(i) && el.style[i] !== undefined) {
return transitions[i];
}
}
return false;
};
var animationEndEventName = function () {
var i,
undefined,
el = document.createElement('div'),
animations = {
'animation':'animationend',
'OAnimation':'oanimationend',
'MozAnimation':'animationend',
'WebkitAnimation':'webkitAnimationEnd'
};
for (i in animations) {
if (animations.hasOwnProperty(i) && el.style[i] !== undefined) {
return animations[i];
}
}
return false;
};
/******** ListSwipe ********/
/******** ListSwipe ********/
/******** ListSwipe ********/
var ListSwipe = function ( container, opt ) {
Object.defineProperty( this, 'listWrapperClass' , { value : 'list-swipe-wrapper' } );
Object.defineProperty( this, 'TRANSITION_END' , { value : transitionEndEventName() } );
Object.defineProperty( this, 'ANIMATION_END' , { value : animationEndEventName() } );
Object.defineProperty( this, 'TRANSFORM' , { value :...