javascript - Weird interactions between setinterval, and classes -


working on slider, , ive noticed works great -

function slider(element) {      this.i = 0;      this.element = element;      var self = this;      this.timer = window.setinterval(function() {         switch (self.i) {             case 0:                 $(element).velocity({ translatex: "-33.3333%" });                 self.i++;             break;             case 1:                 $(element).velocity({ translatex: "-66.6666%" });                 self.i++;             break;             case 2:                 $(element).velocity({ translatex: "0%" });                 self.i = 0;             break;         }     }, 2000); }  slider.prototype.stop = function() {     window.clearinterval(this.timer); }  var = 0; $(".multi").each( function(){     label = "label_" + i;     window[label] = new slider($(this));     console.log(window[label]);     console.log(label);     console.log(i)     i++; });  $(".multi-nav a").click( function(e){     e.preventdefault();     number = $(this).parent().attr("class").split(" ").pop();     label = "label_" + number;     console.log(label)     console.log(window[label]);     window[label].stop(); }); 

demo - http://codepen.io/jordandwhalen/pen/qjgnym

until add in animations toggling classes on targets of events stop interval:

function slider(element) {      this.i = 0;      this.element = element;      var self = this;      this.timer = window.setinterval(function() {         switch (self.i) {             case 0:                 $(element).velocity({ translatex: "-33.3333%" });                 $(".multi-nav a").velocity({ opacity: ".5" });                 $(".multi-nav ." + self.i).velocity({ opacity: "1" });                 self.i++;             break;             case 1:                 $(element).velocity({ translatex: "-66.6666%" });                 $(".multi-nav a").velocity({ opacity: ".5" });                 $(".multi-nav ." + self.i).velocity({ opacity: "1" });                 self.i++;             break;             case 2:                 $(element).velocity({ translatex: "0%" });                 $(".multi-nav a").velocity({ opacity: ".5" });                 $(".multi-nav ." + self.i).velocity({ opacity: "1" });                 self.i = 0;             break;         }     }, 2000); }  slider.prototype.stop = function() {     window.clearinterval(this.timer); }  var = 0; $(".multi").each( function(){     label = "label_" + i;     window[label] = new slider($(this));     console.log(window[label]);     console.log(label);     console.log(i)     i++; });  $(".multi-nav a").click( function(e){     e.preventdefault();     number = $(this).parent().attr("class").split(" ").pop();     label = "label_" + number;     console.log(label)     console.log(window[label]);     window[label].stop(); }); 

demo - http://codepen.io/jordandwhalen/pen/rwoayr

looks issue animations being fired @ many matching elements. result, both intervals needed interrupted, before either stop animating.

var sliderid = 0; function slider(element) {      this.id = sliderid;     sliderid++;      this.i = 0;      this.element = element;      var self = this;      this.timer = window.setinterval(function() {         switch (self.i) {             case 0:                 $(element).velocity({ translatex: "-33.3333%" },{delay: 1500, duration: 500 });                 $(".multi-nav." + self.id + " .active" ).removeclass("active");                 $(".multi-nav." + self.id + " ." + self.i).addclass("active");                 self.i++;             break;             case 1:                 $(element).velocity({ translatex: "-66.6666%" }, { delay: 1500, duration: 500 });                 $(".multi-nav." + self.id + " .active" ).removeclass("active");                 $(".multi-nav." + self.id + " ." + self.i ).addclass("active");                 self.i++;             break;             case 2:                 $(element).velocity({ translatex: "0%" }, {delay: 1500, duration: 500 });                 $(".multi-nav." + self.id + " .active" ).removeclass("active");                 $(".multi-nav." + self.id + " ." + self.i ).addclass("active");                 self.i = 0;             break;         }     }, 2000); } 

adding in .id object, , utilizing within animations fixed issue!


Comments