Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

/*
 *      loopedSlider 0.5.6 - jQuery plugin
 *      written by Nathan Searles       
 *      http://nathansearles.com/loopedslider/
 *
 *      Copyright (c) 2009 Nathan Searles (http://nathansearles.com/)
 *      Dual licensed under the MIT (MIT-LICENSE.txt)
 *      and GPL (GPL-LICENSE.txt) licenses.
 *
 *      Built for jQuery library
 *      http://jquery.com
 *      Compatible with jQuery 1.3.2+
 *
 */

/*
 *      markup example for $("#loopedSlider").loopedSlider();
 *
 *      <div id="loopedSlider"> 
 *              <div class="container">
 *                      <div class="slides">
 *                              <div><img src="01.jpg" alt="" /></div>
 *                              <div><img src="02.jpg" alt="" /></div>
 *                              <div><img src="03.jpg" alt="" /></div>
 *                              <div><img src="04.jpg" alt="" /></div>
 *                      </div>
 *              </div>
 *              <a href="#" class="previous">previous</a>
 *              <a href="#" class="next">next</a>       
 *      </div>
 *
*/

if(typeof jQuery != 'undefined') {
        jQuery(function($) {
                $.fn.extend({
                        loopedSlider: function(options) {
                                var settings = $.extend({}, $.fn.loopedSlider.defaults, options);
                        
                                return this.each(
                                        function() {
                                        if($.fn.jquery < '1.3.2') {return;}
                                        var $t = $(this);
                                        var o = $.metadata ? $.extend({}, settings, $t.metadata()) : settings;
                                        
                                        var distance = 0;
                                        var times = 1;
                                        var slides = $(o.slides,$t).children().size();
                                        var width = $(o.slides,$t).children().outerWidth();
                                        var position = 0;
                                        var active = false;
                                        var number = 0;
                                        var interval = 0;
                                        var restart = 0;
                                        var pagination = $("."+o.pagination+" li a",$t);

                                        if(o.addPagination && !$(pagination).length){
                                                var buttons = slides;
                                                $($t).append("<ul class="+o.pagination+">");
                                                $(o.slides,$t).children().each(function(){
                                                        if (number<buttons) {
                                                                $("."+o.pagination,$t).append("<li><a rel="+(number+1)+" href=\"#\" >"+(number+1)+"</a></li>");
                                                                number = number+1;
                                                        } else {
                                                                number = 0;
                                                                return false;
                                                        }
                                                        $("."+o.pagination+" li a:eq(0)",$t).parent().addClass("active");
                                                });
                                                pagination = $("."+o.pagination+" li a",$t);
                                        } else {
                                                $(pagination,$t).each(function(){
                                                        number=number+1;
                                                        $(this).attr("rel",number);
                                                        $(pagination.eq(0),$t).parent().addClass("active");
                                                });
                                        }

                                        if (slides===1) {
                                                $(o.slides,$t).children().css({position:"absolute",left:position,display:"block"});
                                                return;
                                        }

                                        $(o.slides,$t).css({width:(slides*width)});

                                        $(o.slides,$t).children().each(function(){
                                                $(this).css({position:"absolute",left:position,display:"block"});
                                                position=position+width;
                                        });

                                        $(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:-width});

                                        if (slides>3) {
                                                $(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:-width});
                                        }

                                        if(o.autoHeight){autoHeight(times);}

                                        $(".next",$t).click(function(){
                                                if(active===false) {
                                                        animate("next",true);
                                                        if(o.autoStart){
                                                                if (o.restart) {autoStart();}
                                                                else {clearInterval(sliderIntervalID);}
                                                        }
                                                } return false;
                                        });

                                        $(".previous",$t).click(function(){
                                                if(active===false) {    
                                                        animate("prev",true);
                                                        if(o.autoStart){
                                                                if (o.restart) {autoStart();}
                                                                else {clearInterval(sliderIntervalID);}
                                                        }
                                                } return false;
                                        });

                                        if (o.containerClick) {
                                                $(o.container,$t).click(function(){
                                                        if(active===false) {
                                                                animate("next",true);
                                                                if(o.autoStart){
                                                                        if (o.restart) {autoStart();}
                                                                        else {clearInterval(sliderIntervalID);}
                                                                }
                                                        } return false;
                                                });
                                        }

                                        $(pagination,$t).click(function(){
                                                if ($(this).parent().hasClass("active")) {return false;}
                                                else {
                                                        times = $(this).attr("rel");
                                                        $(pagination,$t).parent().siblings().removeClass("active");
                                                        $(this).parent().addClass("active");
                                                        animate("fade",times);
                                                        if(o.autoStart){
                                                                if (o.restart) {autoStart();}
                                                                else {clearInterval(sliderIntervalID);}
                                                        }
                                                } return false;
                                        });

                                        if (o.autoStart) {
                                                sliderIntervalID = setInterval(function(){
                                                        if(active===false) {animate("next",true);}
                                                },o.autoStart);
                                                function autoStart() {
                                                        if (o.restart) {
                                                        clearInterval(sliderIntervalID);
                                                        clearInterval(interval);
                                                        clearTimeout(restart);
                                                                restart = setTimeout(function() {
                                                                        interval = setInterval( function(){
                                                                                animate("next",true);
                                                                        },o.autoStart);
                                                                },o.restart);
                                                        } else {
                                                                sliderIntervalID = setInterval(function(){
                                                                        if(active===false) {animate("next",true);}
                                                                },o.autoStart);
                                                        }
                                                };
                                        }

                                        function current(times) {
                                                if(times===slides+1){times = 1;}
                                                if(times===0){times = slides;}
                                                $(pagination,$t).parent().siblings().removeClass("active");
                                                $(pagination+"[rel='" + (times) + "']",$t).parent().addClass("active");
                                        };

                                        function autoHeight(times) {
                                                if(times===slides+1){times=1;}
                                                if(times===0){times=slides;}    
                                                var getHeight = $(o.slides,$t).children(":eq("+(times-1)+")",$t).outerHeight();
                                                $(o.container,$t).animate({height: getHeight},o.autoHeight);                                    
                                        };              

                                        function animate(dir,clicked){  
                                                active = true;  
                                                switch(dir){
                                                        case "next":
                                                                times = times+1;
                                                                distance = (-(times*width-width));
                                                                current(times);
                                                                if(o.autoHeight){autoHeight(times);}
                                                                if(slides<3){
                                                                        if (times===3){$(o.slides,$t).children(":eq(0)").css({left:(slides*width)});}
                                                                        if (times===2){$(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:width});}
                                                                }
                                                                $(o.slides,$t).animate({left: distance}, o.slidespeed,function(){
                                                                        if (times===slides+1) {
                                                                                times = 1;
                                                                                $(o.slides,$t).css({left:0},function(){$(o.slides,$t).animate({left:distance});});                                                      
                                                                                $(o.slides,$t).children(":eq(0)").css({left:0});
                                                                                $(o.slides,$t).children(":eq("+(slides-1)+")").css({ position:"absolute",left:-width});                         
                                                                        }
                                                                        if (times===slides) $(o.slides,$t).children(":eq(0)").css({left:(slides*width)});
                                                                        if (times===slides-1) $(o.slides,$t).children(":eq("+(slides-1)+")").css({left:(slides*width-width)});
                                                                        active = false;
                                                                });                                     
                                                                break; 
                                                        case "prev":
                                                                times = times-1;
                                                                distance = (-(times*width-width));
                                                                current(times);
                                                                if(o.autoHeight){autoHeight(times);}
                                                                if (slides<3){
                                                                        if(times===0){$(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:(-width)});}
                                                                        if(times===1){$(o.slides,$t).children(":eq(0)").css({position:"absolute",left:0});}
                                                                }
                                                                $(o.slides,$t).animate({left: distance}, o.slidespeed,function(){
                                                                        if (times===0) {
                                                                                times = slides;
                                                                                $(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:(slides*width-width)});
                                                                                $(o.slides,$t).css({left: -(slides*width-width)});
                                                                                $(o.slides,$t).children(":eq(0)").css({left:(slides*width)});
                                                                        }
                                                                        if (times===2 ) $(o.slides,$t).children(":eq(0)").css({position:"absolute",left:0});
                                                                        if (times===1) $(o.slides,$t).children(":eq("+ (slides-1) +")").css({position:"absolute",left:-width});
                                                                        active = false;
                                                                });
                                                                break;
                                                        case "fade":
                                                                times = [times]*1;
                                                                distance = (-(times*width-width));
                                                                current(times);
                                                                if(o.autoHeight){autoHeight(times);}
                                                                $(o.slides,$t).children().fadeOut(o.fadespeed, function(){
                                                                        $(o.slides,$t).css({left: distance});
                                                                        $(o.slides,$t).children(":eq("+(slides-1)+")").css({left:slides*width-width});
                                                                        $(o.slides,$t).children(":eq(0)").css({left:0});
                                                                        if(times===slides){$(o.slides,$t).children(":eq(0)").css({left:(slides*width)});}
                                                                        if(times===1){$(o.slides,$t).children(":eq("+(slides-1)+")").css({ position:"absolute",left:-width});}
                                                                        $(o.slides,$t).children().fadeIn(o.fadespeed);
                                                                        active = false;
                                                                });
                                                                break; 
                                                        default:
                                                                break;
                                                        }                                       
                                                };
                                        }
                                );
                        }
                });
                $.fn.loopedSlider.defaults = {
                        container: ".container", //Class/id of main container. You can use "#container" for an id.
                        slides: ".slides", //Class/id of slide container. You can use "#slides" for an id.
                        pagination: "pagination", //Class name of parent ul for numbered links. Don't add a "." here.
                        containerClick: true, //Click slider to goto next slide? true/false
                        autoStart: 0, //Set to positive number for true. This number will be the time between transitions.
                        restart: 0, //Set to positive number for true. Sets time until autoStart is restarted.
                        slidespeed: 300, //Speed of slide animation, 1000 = 1second.
                        fadespeed: 200, //Speed of fade animation, 1000 = 1second.
                        autoHeight: 0, //Set to positive number for true. This number will be the speed of the animation.
                        addPagination: false //Add pagination links based on content? true/false
                };
        });
}