Skip to content

Instantly share code, notes, and snippets.

@leekiernan
Created August 24, 2013 16:02
Show Gist options
  • Save leekiernan/6328964 to your computer and use it in GitHub Desktop.
Save leekiernan/6328964 to your computer and use it in GitHub Desktop.
jQuery.fn.loopy = function(options){
var s = jQuery.extend({
child: 'img',
duration: 1500,
controls: false,
count: function(num){
this.counter = (num) ? num : (this.counter < this.element.length - 1) ? ++this.counter : 0;
// num=(!num) ? 1 : num;
// return (this.counter + num < 0) ? this.element.length-1 : this.counter + num;
},
setCounter: function(num){
this.counter = num;
},
transition: function(){
this.element.fadeOut().eq(this.counter).fadeIn();
if(this.controls) this.setControl();
},
cycle: function(num) {
this.count();
this.transition();
return this;
},
pendulum: function(){
this.constructor();
if(this.controls) this.addControls();
var self = this.cycle();
this.interval = setInterval(function() {
self.cycle();
}, this.duration);
},
stop: function(){
clearInterval(this.interval);
},
addControls: function(){
var _self = this,
c = $('<ul></ul>', {'class':'loopyControls'}),
li = "";
for (var i = 0; i < this.element.length; i++) {
li+='<li></li>';
};
c.append(li);
this.element.parent().append(c);
this.controls = this.element
.parent()
.children('ul.loopyControls')
.find('li')
.on('click', function(){
_self.stop();
var ti = _self.controls.index(this);
console.log(ti);
_self.setCounter(ti);
_self.setControl();
_self.transition();
})
},
setControl: function(){
this.controls.removeClass('current').eq(this.counter).addClass('current');
},
constructor: function(){}
}, options);
this.each(function(){
s.element = $(this).find(s.child);
s.pendulum();
});
return this;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment