Browse Source

White space fixes + jslint + Prevent click/touch if animated

pull/21/head
Viljami S 13 years ago
parent
commit
d00046cf00
  1. 154
      responsiveslides.js

154
responsiveslides.js

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