Reputation: 21
I'm trying to use setInterval to cycle through a list changing classes as it goes until the last item. It is working but I've been unable to stop it from cycling. I'd also like to have the last item to end on a unique class. This is what I've got so far.
<ul id="provision1" class="provisioning-list">
<li class="in-progress">Configure Active Directory</li>
<li>Create User Accounts and Groups</li>
<li>Build Server Configurations</li>
<li>Create NTFS</li>
<li>Create Network</li>
<li>Apply SDN Rules</li>
<li class="last">Configure Users</li>
</ul>
Something like this
var toggleSlide = function(){
$("#provision1 li.in-progress").removeClass('in-progress').addClass('complete')
.next().add("#provision1 li:first").last().addClass("in-progress");
}
setInterval(toggleSlide, 1000);
Upvotes: 2
Views: 361
Reputation: 191
Change JS with following
var toggleSlide = function(){
var $cur_element = $("#provision1 li.in-progress");
$cur_element.removeClass('in-progress')
.addClass('complete');
if($cur_element.hasClass("last")) {
clearInterval(interval_var);
} else {
$cur_element.next().add("#provision1 li:first")
.last().addClass("in-progress");
}
}
var interval_var = setInterval(toggleSlide, 1000);
Upvotes: 0
Reputation: 196197
Try this
var toggleSlide = function(){
var current = $("#provision1 li.in-progress"),
next = current.next();
// stop if there is no next element or we reached the .last element
if (current.is('.last') || next.length === 0){
clearInterval( timer );
return;
}
current.removeClass('in-progress');
next.addClass('in-progress');
},
timer = setInterval(toggleSlide, 1000);
Demo
var toggleSlide = function() {
var current = $("#provision1 li.in-progress"),
next = current.next();
// stop if there is no next element or we reached the .last element
if (current.is('.last') || next.length === 0) {
clearInterval(timer);
return;
}
current.removeClass('in-progress');
next.addClass('in-progress');
},
timer = setInterval(toggleSlide, 1000);
.in-progress{color:red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="provision1" class="provisioning-list">
<li class="in-progress">Configure Active Directory</li>
<li>Create User Accounts and Groups</li>
<li>Build Server Configurations</li>
<li>Create NTFS</li>
<li>Create Network</li>
<li>Apply SDN Rules</li>
<li class="last">Configure Users</li>
</ul>
Upvotes: 1
Reputation: 1747
To stop a setInterval();
you can use clearInterval();
like so:
var intv = setInterval(toggleSlide, 1000);
clearInterval(intv);
Upvotes: 0