You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
3.6 KiB

13 years ago
/*! ResponsiveSlides.js v1.07. (c) 2011 Viljami Salminen. MIT License. http://responsive-slides.viljamis.com */
(function($, window, i) {
$.fn.responsiveSlides = function( options ) {
// Merge default settings with optional arguments
var settings = $.extend({
"auto": true,
"fade": 1000,
"maxwidth": "none",
"speed": 4000
}, options);
return this.each( function () {
// increment i, which is used for namespacing
i++;
// save handle for the slideshow
var $this = $( this );
var $slide = $this.children(),
$img = $( "img", this ),
namespace = "rslides" + i,
activeClass = namespace + "_here",
slideClassPrefix = namespace + "_s",
tabsClass = namespace + "_tabs",
$pagination = $( "<ul class=\"" + tabsClass + "\" />" ),
visible = {"float": "left", "position": "relative"},
hidden = {"float": "none", "position": "absolute"},
// start index and number of slides
index = 0,
length = $slide.size();
// animations
var slideTo = function( idx ) {
$slide
.stop()
.fadeOut( settings.fade, function() {
$( this ).css( hidden );
})
.eq( idx )
.fadeIn( settings.fade, function() {
$( this ).css( visible );
index = idx;
});
};
// Only run if there's more than one slide
if ( $slide.size() > 1 ) {
// add ids to each slide
$slide.each( function ( i ) {
this.id = slideClassPrefix + i;
});
// add css to the slideshow
$this.css({
"max-width": settings.maxwidth
});
// hide all slides, then show first one
$slide
.hide()
.eq( 0 )
.css( visible )
.show();
// Auto: true
if ( settings.auto === true ) {
// rotate slides automatically
setInterval( function () {
var idx = index + 1 < length ? index + 1 : 0;
slideTo( idx );
}, settings.speed );
}
// Auto: false
else {
// build pagination
var tabMarkup = [];
$slide.each( function( i ) {
var n = i + 1;
tabMarkup.push( "<li>" );
tabMarkup.push( "<a href=\"#" + slideClassPrefix + n + "\" " );
tabMarkup.push( "class=\"" + slideClassPrefix + n + "\">" + n + "</a>" );
tabMarkup.push( "</li>" );
});
$pagination.append( tabMarkup.join("") );
var $tabs = $pagination.find( "a" );
// add click/touch event handler and set first tab active
$tabs.on( "ontouchstart" in window ? "touchstart" : "click", function( e ) {
e.preventDefault();
// get index of clicked tab
var idx = $tabs.index( this );
// break here if element is already active
if( index === idx ) {
return;
}
// remove active state from old tab and set new one
$tabs
.closest( "li" )
.removeClass( activeClass )
.eq( idx )
.addClass( activeClass );
// do the animation
slideTo( idx );
})
.eq( 0 )
.closest( "li" )
.addClass( activeClass );
// inject pagination
$this.after( $pagination );
}
}
// only add fallback if maxwidth isn't supported and maxwidth is set
if ( typeof document.body.style.maxWidth === "undefined" && options && options.maxwidth ) {
// Fallback to make IE6 support CSS max-width
var widthSupport = function() {
$this.css( "width", "100%" );
if ( $this.width() > settings.maxwidth ) {
$this.css( "width", settings.maxwidth );
}
};
widthSupport();
// bind on window resize
$( window ).on( "resize", function () {
widthSupport();
});
}
});
};
})(jQuery, this, 0);