takachou
takachou

Reputation: 71

stop this slider from looping

I have this code and i want to prevent it from looping like example it has slide one slide two slide three, you must not be able to go to slide three from slide one and from slide one to slide three. Here is the jquery code

jQuery(document).ready(function ($) {

$('#checkbox').change(function(){
setInterval(function () {
    moveRight();
}, 3000);
});

var slideCount = $('#slider ul li').length;
var slideWidth = $('#slider ul li').width();
var slideHeight = $('#slider ul li').height();
var sliderUlWidth = slideCount * slideWidth;

$('#slider').css({ width: slideWidth, height: slideHeight });

$('#slider ul').css({ width: sliderUlWidth, marginLeft: - slideWidth });

$('#slider ul li:last-child').prependTo('#slider ul');

function moveLeft() {
    $('#slider ul').animate({
        left: + slideWidth
    }, 200, function () {
        $('#slider ul li:last-child').prependTo('#slider ul');
        $('#slider ul').css('left', '');
    });
};

function moveRight() {
    $('#slider ul').animate({
        left: - slideWidth
    }, 200, function () {
        $('#slider ul li:first-child').appendTo('#slider ul');
        $('#slider ul').css('left', '');
    });
};

$('a.control_prev').click(function () {
    moveLeft();
});

$('a.control_next').click(function () {
    moveRight();
});

});    

Thank you.

Upvotes: 0

Views: 466

Answers (1)

ab29007
ab29007

Reputation: 7766

That is because of no restrictions on prependTo and appendTo functions. comment them out.

Introduced a variable which will keep track of the slide you are currently on, and which will vary from 1 to no. of slides.

jQuery(document).ready(function ($) {

$('#checkbox').change(function(){
setInterval(function () {
    moveRight();
}, 3000);
});

var slideCount = $('#slider ul li').length;
  var current = 1;
var slideWidth = $('#slider ul li').width();
var slideHeight = $('#slider ul li').height();
var sliderUlWidth = slideCount * slideWidth;

$('#slider').css({ width: slideWidth, height: slideHeight });

$('#slider ul').css({ width: sliderUlWidth, marginLeft: - slideWidth });

$('#slider ul li:last-child').prependTo('#slider ul');

function moveLeft() {
    $('#slider ul').animate({
        left: + slideWidth
    }, 200, function () {
        $('#slider ul li:last-child').prependTo('#slider ul');
        $('#slider ul').css('left', '');
    });
};

function moveRight() {
    $('#slider ul').animate({
        left: - slideWidth
    }, 200, function () {
        $('#slider ul li:first-child').appendTo('#slider ul');
        $('#slider ul').css('left', '');
    });
};

$('a.control_prev').click(function () {
  if(current>1){
    current--;
    moveLeft();
}
});

$('a.control_next').click(function () {
  if(current<slideCount){
    current++;
    moveRight();
  }
});

$(".slideButtons").click(function(){
   var clickedSlide =  $('.slideButtons').index(this)+1;
   $(".slideButtons").removeClass('active');
   $(this).addClass('active');
   if (current>clickedSlide){
     var diff = current-clickedSlide;
     for(var l=0;l<diff;l++){
       current--;
       moveLeft();
     }
   }
   if (current<clickedSlide){
     var diff = clickedSlide-current;
     $(".slideButtons").removeClass('active');
     $(this).addClass('active');
     for(var l=0;l<diff;l++){
       current++;
       moveRight();
     }
   }
});
});
html {
  border-top: 5px solid #fff;
  background: #58DDAF;
  color: #2a2a2a;
}

html, body {
  margin: 0;
  padding: 0;
  font-family: 'Open Sans';
}

h1 {
  color: #fff;
  text-align: center;
  font-weight: 300;
}

#slider {
  position: relative;
  overflow: hidden;
  margin: 20px auto 0 auto;
  border-radius: 4px;
}

#slider ul {
  position: relative;
  margin: 0;
  padding: 0;
  height: 200px;
  list-style: none;
}

#slider ul li {
  position: relative;
  display: block;
  float: left;
  margin: 0;
  padding: 0;
  width: 500px;
  height: 300px;
  background: #ccc;
  text-align: center;
  line-height: 300px;
}

a.control_prev, a.control_next {
  position: absolute;
  top: 40%;
  z-index: 999;
  display: block;
  padding: 4% 3%;
  width: auto;
  height: auto;
  background: #2a2a2a;
  color: #fff;
  text-decoration: none;
  font-weight: 600;
  font-size: 18px;
  opacity: 0.8;
  cursor: pointer;
}

a.control_prev:hover, a.control_next:hover {
  opacity: 1;
  -webkit-transition: all 0.2s ease;
}

a.control_prev {
  border-radius: 0 2px 2px 0;
}

a.control_next {
  right: 0;
  border-radius: 2px 0 0 2px;
}

.slider_option {
  position: relative;
  margin: 10px auto;
  width: 160px;
  font-size: 18px;
}
.slideButtons.active{
  background-color:green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Incredibly Basic Slider</h1>
<button class="slideButtons active">Slide 1</button>
<button class="slideButtons">Slide 2</button>
<button class="slideButtons">Slide 3</button>
<button class="slideButtons">Slide 4</button>
<div id="slider">
  <a href="#" class="control_next">></a>
  <a href="#" class="control_prev"><</a>
  <ul>
    <li>SLIDE 1</li>
    <li style="background: #aaa;">SLIDE 2</li>
    <li>SLIDE 3</li>
    <li style="background: #aaa;">SLIDE 4</li>
  </ul>  
</div>

<div class="slider_option">
  <input type="checkbox" id="checkbox">
  <label for="checkbox">Autoplay Slider</label>
</div>

Upvotes: 1

Related Questions