Created
June 28, 2010 13:16
-
-
Save jnugh/455812 to your computer and use it in GitHub Desktop.
This file contains 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 | |
* | |
* 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> | |
* | |
*/ | |
var txts = new Array('Test1', 'Test2', 'Test3'); | |
(function($) { | |
$.fn.easySlider = function(options){ | |
// default configuration properties | |
var defaults = { | |
prevId: 'prevBtn', | |
prevText: 'Previous', | |
nextId: 'nextBtn', | |
nextText: 'Next', | |
controlsShow: true, | |
controlsBefore: '', | |
controlsAfter: '', | |
controlsFade: true, | |
firstId: '', | |
firstText: '', | |
firstShow: false, | |
lastId: '', | |
lastText: '', | |
lastShow: false, | |
vertical: false, | |
speed: false, | |
auto: false, | |
pause: true, | |
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>'; | |
} else { | |
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);\">'+ (txts[i]) +'</a>') | |
.appendTo($("#"+ options.numericId)) | |
.click(function(){ | |
animate($("a",$(this)).attr('rel'),true); | |
}); | |
}; | |
} else { | |
$("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