Reputation: 6834
i have following code i am facing issue when images are less than three it shows up blank slide its not working perfectly as a rotators i want it to work like infinite rotator both ways clockwise as well as anticlockwise.
CSS
#slider-wrapper {
margin: 5% 10%;
max-height: 500px;
max-width: 300px;
position:relative;
}
#slider {
display: block;
position: relative;
z-index: 99999;
max-width: 710px;
width: 100%;
margin: 0 auto;
background: red;
}
#button-previous {
height: 60px;
left: -40px;
margin-top: 40%;
position: absolute;
width: 40px;
}
#button-next {
float: right;
margin-top: 40%;
position: relative;
}
.sp {
position: absolute;
}
#slider .sp {
max-width: 710px;
width: 100%;
max-height: 500px;
height: 40px;
}
JavaScript
$(document).ready(function(e) {
$("#slider > div:gt(0)").hide();
$("#button-next").click(function () {
$("#slider > div:first")
.fadeOut(1000)
.next()
.fadeIn(1000)
.appendTo("#slider");
});
$("#slider > div:gt(0)").hide();
$("#button-previous").click(function () {
$("#slider > div:last")
.fadeOut(1000)
.next()
.fadeIn(1000)
.appendTo("#slider");
});
});
HTML
<div id="slider-wrapper">
<div id="slider">
<div class="sp"><img src="Images/thumb/1.jpg" width="234" height="240"></div>
<div class="sp"><img src="Images/thumb/2.jpg" width="234" height="240"></div>
<div class="sp"><img src="Images/thumb/3.jpg" width="234" height="240"></div>
</div>
<div id="button-previous">prev</div>
<div id="button-next">next</div>
</div>
Upvotes: 0
Views: 261
Reputation: 1370
You may also try this:
$(document).ready(function(e) {
$("#slider > div:gt(0)").hide();
$("#button-next").click(function () {
$("#slider > div:first")
.fadeOut(1000)
.next()
.fadeIn(1000);
$("#slider > div:first").appendTo("#slider");
});
$("#button-previous").click(function () {
$("#slider > div:first")
.fadeOut(1000);
$("#slider > div:last")
.fadeIn(1000);
$("#slider > div:first").before($("#slider > div:last"));
});
});
Upvotes: 0
Reputation: 8457
when images are less than two
Which means you have only one image? To make it work with a single image and make it an infinite loop, use this code:
var sliderDivs = $('#slider > div.sp');
var sliderCount = sliderDivs.length;
var currSlide = 0;
$("#slider > div.sp:eq(0)").fadeIn(1000);
$("#button-next").click(function () {
$("#slider > div.sp:eq(" + currSlide + ")").fadeOut(1000);
currSlide++;
if (currSlide > sliderCount - 1) currSlide = 0;
$("#slider > div.sp:eq(" + currSlide + ")").fadeIn(1000);
});
$("#button-previous").click(function () {
$("#slider > div.sp:eq(" + currSlide + ")").fadeOut(1000);
currSlide--;
if (currSlide < 0) currSlide = sliderCount - 1;
$("#slider > div.sp:eq(" + currSlide + ")").fadeIn(1000);
});
Upvotes: 1
Reputation: 651
You will have to remove the next() selector(since you are already using append) and use prependTo for the previous button.
$("#button-next").click(function () {
$("#slider > div.sp:first")
.fadeOut(1000)
.fadeIn(1000)
.appendTo("#slider");
$("#slider > div.sp:first")
.fadeOut(1000)
.appendTo("#slider");
});
$("#slider > div:gt(0)").hide();
$("#button-previous").click(function () {
$("#slider > div.sp").fadeOut(1000);
$("#slider > div.sp:last")
.prependTo("#slider")
.fadeIn(1000);
});
Here is the working fiddle by the way
http://jsfiddle.net/jeremejazz/KZgaq/
Upvotes: 1