Swiper Drawer
Left and right menu with swiper
by Marco Abate
HTML
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.1.7/css/swiper.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.1.7/js/swiper.min.js"></script>
<div class="wrapper">
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide drawer-left">
<ul>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
</ul>
</div>
<div...
CSS
body {
margin: 0;
}
.wrapper {
width: 320px;
height: 568px;
border: 25px solid #000;
border-bottom: 50px solid #000;
border-radius: 10px;
}
.swiper-container {
height: 100%;
}
.view {
width: 100%;
overflow-y: scroll;
background: #fff;
padding-top: 44px;
}
.drawer-left,
.drawer-right {
width: 80%;
background: lightskyblue;
overflow-y: scroll;
}
.drawer-left.,
.drawer-right {
width: 80%;
background: lightskyblue;
overflow-y: scroll;
}
.overlay {
position: relative;
overflow: hidden;
}
.overlay .bg-overlay {
transform: translate3d(0,0,0);
opacity: .6;
}
.bg-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
transform: translate3d(-100%,0,0);
transition: opacity .15s ease;
opacity: 0;
background: #000;
}
.home-btn {
background: #fff;
width: 30px;
height: 30px;
display: inline-block;
border-radius: 100%;
left: 170px;
bottom: 12px;
position: absolute;
}
.header {
background: lightskyblue;
height: 44px;
position: absolute;
top: 0;
left: 0;
width: 100%;
right: 0;
}
#menu-left,
#menu-right {
background: none;
border: 1px solid #fff;
font-size: 16px;
box-shadow: none;
outline: none;
position: absolute;
top: 8px;
color: #fff;
border-radius: 4px;
}
#menu-left {
left: 8px;
}
#menu-right {
right: 8px;
}
JavaScript
var swiper = new Swiper('.swiper-container', {
direction: 'horizontal',
initialSlide: 1,
resistanceRatio: 0,
speed: 150,
touchAngle: 20,
effect: 'slide',
slidesPerView: 'auto',
centeredSlides: false,
});
var view = document.getElementsByClassName('view')[0];
swiper.on('onReachBeginning', function(swiper) {
var start = swiper.isBeginning;
var end = swiper.isEnd;
if(start || end) {
view.classList.add('overlay');
clickOverlay();
}
})
swiper.on('onReachEnd', function(swiper) {
var start = swiper.isBeginning;
var end = swiper.isEnd;
if(start || end) {
view.classList.add('overlay');
clickOverlay();
}
})
swiper.on('onTouchEnd', function(swiper) {
view.classList.remove('overlay');
})
var clickOverlay = function() {
document.getElementsByClassName('overlay')[0].addEventListener("click", function(){
swiper.slideTo(1);
});
}
document.getElementById('menu-left').addEventListener('click', function() {
swiper.slideTo(0);
});
document.getElementById('menu-right').addEventListener('click', function() {
swiper.slideTo(2);
});