Simple Carousel
by rulokc
HTML
<div class="container">
<div class="carousel">
<ul>
<li><img src="http://lorempixel.com/500/100/nature/1"/></li>
<li><img src="http://lorempixel.com/500/100/nature/2"/></li>
<li><img src="http://lorempixel.com/500/100/nature/3"/></li>
</ul>
</div>
<a class="nav prev" href="#"><</a>
<a class="nav next" href="#">></a>
</div>
CSS
.container {
width: 500px;
height: 100px;
margin: 0 auto;
background-color: #666;
position: relative;
}
.carousel {
position: relative;
height: 100px;
width: 100%;
overflow: hidden;
}
.carousel ul {
list-style: none;
padding: 0;
margin: 0;
}
.carousel ul li {
float: left;
height: 100px;
}
a.nav {
display: block;
position: absolute;
top: 0;
width: 20px;
height: 100px;
text-decoration: none;
line-height: 100px;
font-size: 20px;
font-weight: bold;
color: transparent;
background-color: transparent;
text-align: center;
}
a.nav.prev {
left: 0;
}
a.nav.next {
right: 0;
}
a.nav.prev:hover,
a.nav.next:hover {
color: #fff;
background-color: rgba(0,0,0,0.3);
}
JavaScript
var $car = $('.carousel');
var $ul = $('.carousel ul');
var n = $ul.children().length;
$ul.css('width', (100 * n) + '%');
$ul.children().css('width', (100 / n) + '%');
// if not exists default .active then it is the first
if ($ul.find('li.active').length == 0) {
$ul.find('li:first').addClass('active');
}
// initial offset
var initialOffset = '-' + 100 * $('.carousel ul li.active').index() + '%';
$ul.css({'margin-left': initialOffset}, 1000);
$('a.nav.prev').on('click', function(e) {
e.preventDefault();
var $li = $('li.active', $ul);
if ($li.prev().length) {
var s = $li.removeClass('active').prev().addClass('active').position().left;
//$ul.animate({'margin-left':'+=100%'}, 1000);
$car.stop().animate({scrollLeft: s}, 1000);
}
});
$('a.nav.next').on('click', function(e) {
e.preventDefault();
var $li = $('li.active', $ul);
if ($li.next().length) {
var s = $li.removeClass('active').next().addClass('active').position().left;
//$ul.animate({'margin-left':'-=100%'}, 1000);
$car.stop().animate({scrollLeft: s}, 1000);
}
});