Created
October 27, 2010 16:13
-
-
Save marcboivin/649357 to your computer and use it in GitHub Desktop.
EasySlide1.7 with multiple control support
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Easy Slider 1.7 - jQuery plugin | |
* written by Alen Grakalic | |
* http://cssglobe.com/post/4004/easy-slider-15-the-easiest-jquery-plugin-for-sliding | |
* Modified by Marc Boivin: added the controls option to have both numeric and prev, next | |
* buttons (set controls to false when using numeric for default behavior) | |
* | |
* Copyright (c) 2009 Alen Grakalic (http://cssglobe.com) | |
* Dual licensed under the MIT (MIT-LICENSE.txt) | |
* and GPL (GPL-LICENSE.txt) licenses. | |
* | |
* Built for jQuery library | |
* http://jquery.com | |
* | |
*/ | |
/* | |
* markup example for $("#slider").easySlider(); | |
* | |
* <div id="slider"> | |
* <ul> | |
* <li><img src="images/01.jpg" alt="" /></li> | |
* <li><img src="images/02.jpg" alt="" /></li> | |
* <li><img src="images/03.jpg" alt="" /></li> | |
* <li><img src="images/04.jpg" alt="" /></li> | |
* <li><img src="images/05.jpg" alt="" /></li> | |
* </ul> | |
* </div> | |
* | |
*/ | |
(function($) { | |
$.fn.easySlider = function(options){ | |
// default configuration properties | |
var defaults = { | |
prevId: 'prevBtn', | |
prevText: 'Previous', | |
nextId: 'nextBtn', | |
nextText: 'Next', | |
controls: true, | |
controlsShow: true, | |
controlsBefore: '', | |
controlsAfter: '', | |
controlsFade: true, | |
firstId: 'firstBtn', | |
firstText: 'First', | |
firstShow: false, | |
lastId: 'lastBtn', | |
lastText: 'Last', | |
lastShow: false, | |
vertical: false, | |
speed: 800, | |
auto: false, | |
pause: 2000, | |
continuous: false, | |
numeric: false, | |
numericId: 'controls' | |
}; | |
var options = $.extend(defaults, options); | |
this.each(function() { | |
var obj = $(this); | |
var s = $("li", obj).length; | |
var w = $("li", obj).width(); | |
var h = $("li", obj).height(); | |
var clickable = true; | |
obj.width(w); | |
obj.height(h); | |
obj.css("overflow","hidden"); | |
var ts = s-1; | |
var t = 0; | |
$("ul", obj).css('width',s*w); | |
if(options.continuous){ | |
$("ul", obj).prepend($("ul li:last-child", obj).clone().css("margin-left","-"+ w +"px")); | |
$("ul", obj).append($("ul li:nth-child(2)", obj).clone()); | |
$("ul", obj).css('width',(s+1)*w); | |
}; | |
if(!options.vertical) $("li", obj).css('float','left'); | |
if(options.controlsShow){ | |
var html = options.controlsBefore; | |
if(options.numeric){ | |
html += '<ol id="'+ options.numericId +'"></ol>'; | |
}; | |
if(options.controls){ | |
if(options.firstShow) html += '<span id="'+ options.firstId +'"><a href=\"javascript:void(0);\">'+ options.firstText +'</a></span>'; | |
html += ' <span id="'+ options.prevId +'"><a href=\"javascript:void(0);\">'+ options.prevText +'</a></span>'; | |
html += ' <span id="'+ options.nextId +'"><a href=\"javascript:void(0);\">'+ options.nextText +'</a></span>'; | |
if(options.lastShow) html += ' <span id="'+ options.lastId +'"><a href=\"javascript:void(0);\">'+ options.lastText +'</a></span>'; | |
}; | |
html += options.controlsAfter; | |
$(obj).after(html); | |
}; | |
if(options.numeric){ | |
for(var i=0;i<s;i++){ | |
$(document.createElement("li")) | |
.attr('id',options.numericId + (i+1)) | |
.html('<a rel='+ i +' href=\"javascript:void(0);\">'+ (i+1) +'</a>') | |
.appendTo($("#"+ options.numericId)) | |
.click(function(){ | |
animate($("a",$(this)).attr('rel'),true); | |
}); | |
}; | |
}; | |
if(options.controls) { | |
$("a","#"+options.nextId).click(function(){ | |
animate("next",true); | |
}); | |
$("a","#"+options.prevId).click(function(){ | |
animate("prev",true); | |
}); | |
$("a","#"+options.firstId).click(function(){ | |
animate("first",true); | |
}); | |
$("a","#"+options.lastId).click(function(){ | |
animate("last",true); | |
}); | |
}; | |
function setCurrent(i){ | |
i = parseInt(i)+1; | |
$("li", "#" + options.numericId).removeClass("current"); | |
$("li#" + options.numericId + i).addClass("current"); | |
}; | |
function adjust(){ | |
if(t>ts) t=0; | |
if(t<0) t=ts; | |
if(!options.vertical) { | |
$("ul",obj).css("margin-left",(t*w*-1)); | |
} else { | |
$("ul",obj).css("margin-left",(t*h*-1)); | |
} | |
clickable = true; | |
if(options.numeric) setCurrent(t); | |
}; | |
function animate(dir,clicked){ | |
if (clickable){ | |
clickable = false; | |
var ot = t; | |
switch(dir){ | |
case "next": | |
t = (ot>=ts) ? (options.continuous ? t+1 : ts) : t+1; | |
break; | |
case "prev": | |
t = (t<=0) ? (options.continuous ? t-1 : 0) : t-1; | |
break; | |
case "first": | |
t = 0; | |
break; | |
case "last": | |
t = ts; | |
break; | |
default: | |
t = dir; | |
break; | |
}; | |
var diff = Math.abs(ot-t); | |
var speed = diff*options.speed; | |
if(!options.vertical) { | |
p = (t*w*-1); | |
$("ul",obj).animate( | |
{ marginLeft: p }, | |
{ queue:false, duration:speed, complete:adjust } | |
); | |
} else { | |
p = (t*h*-1); | |
$("ul",obj).animate( | |
{ marginTop: p }, | |
{ queue:false, duration:speed, complete:adjust } | |
); | |
}; | |
if(!options.continuous && options.controlsFade){ | |
if(t==ts){ | |
$("a","#"+options.nextId).hide(); | |
$("a","#"+options.lastId).hide(); | |
} else { | |
$("a","#"+options.nextId).show(); | |
$("a","#"+options.lastId).show(); | |
}; | |
if(t==0){ | |
$("a","#"+options.prevId).hide(); | |
$("a","#"+options.firstId).hide(); | |
} else { | |
$("a","#"+options.prevId).show(); | |
$("a","#"+options.firstId).show(); | |
}; | |
}; | |
if(clicked) clearTimeout(timeout); | |
if(options.auto && dir=="next" && !clicked){; | |
timeout = setTimeout(function(){ | |
animate("next",false); | |
},diff*options.speed+options.pause); | |
}; | |
}; | |
}; | |
// init | |
var timeout; | |
if(options.auto){; | |
timeout = setTimeout(function(){ | |
animate("next",false); | |
},options.pause); | |
}; | |
if(options.numeric) setCurrent(0); | |
if(!options.continuous && options.controlsFade){ | |
$("a","#"+options.prevId).hide(); | |
$("a","#"+options.firstId).hide(); | |
}; | |
}); | |
}; | |
})(jQuery); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment