JSFiddle - React, Tailwind, and code Playground
by Tim Ko
HTML
<span style="display:block">Instead of previous/next, we could use triangles pointing left and right</span>
<input type="button" class="goLeft" value="PREVIOUS"/>
<input type="dropdown" class="dropdown" value="Dropdown goes here"/>
<input type="button" class="goRight" value="NEXT"/>
<table>
<tbody>
<tr class="firstRow">
<td class="leftBox">
«
</td>
<td class="middleBox">
<div class="wrapper">
<div class="slide">
<div id="slide1">Text 1 goes here</div>
<div id="slide2">Text 2 goes here</div>
<div id="slide3">Text 3 goes here</div>
</div>
</div>
</td>
<td class="rightBox">
»
</td>
</tr>
<tr class="secondRow">
<td class="leftBox">
</td>
<td class="middleBox">
<nav class="nav-bullets">
<ul id="position">
<li class="bullet on"></li>
<li class="bullet"></li>
<li class="bullet"></li>
</ul>
</nav>
</td>
<td class="rightBox">
</td>
</tr>
</tbody>
</table>
CSS
.wrapper {
position: relative;
overflow: hidden;
width: 100%;
left: 0px;
height: 300px;
border: 1px solid black;
}
.slide {
position: absolute;
top: 0px;
width: 400%;
background-color: black;
-moz-transition: left 0.3s, -moz-transform 2s;
-webkit-transition: left 0.3s, -webkit-transform 2s;
-o-transition:width left 0.3s, -o-transform 2s;
transition: left 0.3s, transform 2s;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.slide div {
position: relative;
float: left;
top: 0px;
width: 25%;
height: 300px;
}
.nav-bullets {
position: relative;
float: left;
left: 50%;
margin-left: -25px; /* -(numBullets * (bullet.width + bullet.marginRight) / 2) + bullet.marginRight */
}
.nav-bullets ul {
position: relative;
list-style: none;
padding-left: 0;
}
.nav-bullets ul li {
float: left;
margin-right: 10px;
position: relative;
width: 10px;
height: 10px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
background-color: black;
}
.nav-bullets ul li:hover {
background-color: gray;
}
.nav-bullets ul li.on {
background-color: blue;
}
#slide1 {
background-color: red;
}
#slide2 {
background-color: yellow;
}
#slide3 {
background-color: green;
}
.firstRow .leftBox, .firstRow .rightBox {
background-color: pink;
}
.leftBox, .rightBox {
width: 20px;
}
.middleBox {
width: 90%;
}
JavaScript
var slide = 0;
var numSlides = 3;
var slideWidth = -1 * parseInt($('.slide div').width());
$('.bullet').on('click', function() {
goToSlide($(this).index());
});
$('.goLeft, .leftBox').on('click', function() {
nextSlide();
});
$('.goRight, .rightBox').on('click', function() {
previousSlide();
});
$('.wrapper').swipeLeft(function() {
previousSlide();
});
$('.wrapper').swipeRight(function() {
nextSlide();
});
function previousSlide() {
goToSlide(slide+1);
};
function nextSlide() {
goToSlide(slide-1);
};
function goToSlide(n) {
slide = (n + numSlides) % numSlides;
setTimeout(function() {
$('.bullet.on').removeClass('on');
$('.bullet').eq(slide).addClass('on');
$('.slide').css('left', slideWidth * slide);
}, 301);
}