Team:RHIT/responsiveslides.min.js
From 2012.igem.org
(Difference between revisions)
(Created page with "(function(d,D,v){d.fn.responsiveSlides=function(h){var b=d.extend({auto:!0,speed:1E3,timeout:4E3,pager:!1,nav:!1,random:!1,pause:!1,pauseControls:!1,prevText:"Previous",nextText:...") |
|||
(5 intermediate revisions not shown) | |||
Line 1: | Line 1: | ||
- | (function( | + | /*! ResponsiveSlides.js v1.32 |
- | + | * http://responsiveslides.com | |
- | + | * http://viljamis.com | |
- | function( | + | * |
- | + | * Copyright (c) 2011-2012 @viljamis | |
+ | * Available under the MIT license | ||
+ | */ | ||
+ | |||
+ | /*jslint browser: true, sloppy: true, vars: true, plusplus: true, indent: 2 */ | ||
+ | |||
+ | (function ($, window, i) { | ||
+ | $.fn.responsiveSlides = function (options) { | ||
+ | |||
+ | // Default settings | ||
+ | var settings = $.extend({ | ||
+ | "auto": true, // Boolean: Animate automatically, true or false | ||
+ | "speed": 1000, // Integer: Speed of the transition, in milliseconds | ||
+ | "timeout": 4000, // Integer: Time between slide transitions, in milliseconds | ||
+ | "pager": false, // Boolean: Show pager, true or false | ||
+ | "nav": false, // Boolean: Show navigation, true or false | ||
+ | "random": false, // Boolean: Randomize the order of the slides, true or false | ||
+ | "pause": false, // Boolean: Pause on hover, true or false | ||
+ | "pauseControls": false, // Boolean: Pause when hovering controls, true or false | ||
+ | "prevText": "Previous", // String: Text for the "previous" button | ||
+ | "nextText": "Next", // String: Text for the "next" button | ||
+ | "maxwidth": "", // Integer: Max-width of the slideshow, in pixels | ||
+ | "controls": "", // Selector: Where controls should be appended to, default is after the <ul> | ||
+ | "namespace": "rslides", // String: change the default namespace used | ||
+ | before: function () {}, // Function: Before callback | ||
+ | after: function () {} // Function: After callback | ||
+ | }, options); | ||
+ | |||
+ | return this.each(function () { | ||
+ | |||
+ | // Index for namespacing | ||
+ | i++; | ||
+ | |||
+ | var $this = $(this), | ||
+ | |||
+ | // Local variables | ||
+ | selectTab, | ||
+ | startCycle, | ||
+ | restartCycle, | ||
+ | rotate, | ||
+ | $tabs, | ||
+ | |||
+ | // Helpers | ||
+ | index = 0, | ||
+ | $slide = $this.children(), | ||
+ | length = $slide.size(), | ||
+ | fadeTime = parseFloat(settings.speed), | ||
+ | waitTime = parseFloat(settings.timeout), | ||
+ | maxw = parseFloat(settings.maxwidth), | ||
+ | |||
+ | // Namespacing | ||
+ | namespace = settings.namespace, | ||
+ | namespaceIdx = namespace + i, | ||
+ | |||
+ | // Classes | ||
+ | navClass = namespace + "_nav " + namespaceIdx + "_nav", | ||
+ | activeClass = namespace + "_here", | ||
+ | visibleClass = namespaceIdx + "_on", | ||
+ | slideClassPrefix = namespaceIdx + "_s", | ||
+ | |||
+ | // Pager | ||
+ | $pager = $("<ul class='" + namespace + "_tabs " + namespaceIdx + "_tabs' />"), | ||
+ | |||
+ | // Styles for visible and hidden slides | ||
+ | visible = {"float": "none", "position": "relative"}, | ||
+ | hidden = {"float": "none", "position": "absolute"}, | ||
+ | |||
+ | // Fading animation | ||
+ | slideTo = function (idx) { | ||
+ | settings.before(); | ||
+ | $slide | ||
+ | .stop() | ||
+ | .fadeOut(fadeTime, function () { | ||
+ | $(this) | ||
+ | .removeClass(visibleClass) | ||
+ | .css(hidden); | ||
+ | }) | ||
+ | .eq(idx) | ||
+ | .fadeIn(fadeTime, function () { | ||
+ | $(this) | ||
+ | .addClass(visibleClass) | ||
+ | .css(visible); | ||
+ | settings.after(); | ||
+ | index = idx; | ||
+ | }); | ||
+ | }; | ||
+ | |||
+ | // Random order | ||
+ | if (settings.random) { | ||
+ | $slide.sort(function () { | ||
+ | return (Math.round(Math.random()) - 0.5); | ||
+ | }); | ||
+ | $this | ||
+ | .empty() | ||
+ | .append($slide); | ||
+ | } | ||
+ | |||
+ | // Add ID's to each slide | ||
+ | $slide.each(function (i) { | ||
+ | this.id = slideClassPrefix + i; | ||
+ | }); | ||
+ | |||
+ | // Add max-width and classes | ||
+ | $this.addClass(namespace + " " + namespaceIdx); | ||
+ | if (options && options.maxwidth) { | ||
+ | $this.css("max-width", maxw); | ||
+ | } | ||
+ | |||
+ | // Hide all slides, then show first one | ||
+ | $slide | ||
+ | .hide() | ||
+ | .eq(0) | ||
+ | .addClass(visibleClass) | ||
+ | .css(visible) | ||
+ | .show(); | ||
+ | |||
+ | // Only run if there's more than one slide | ||
+ | if ($slide.size() > 1) { | ||
+ | |||
+ | // Make sure the timeout is at least 100ms longer than the fade | ||
+ | if (waitTime < fadeTime + 100) { | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | // Pager | ||
+ | if (settings.pager) { | ||
+ | var tabMarkup = []; | ||
+ | $slide.each(function (i) { | ||
+ | var n = i + 1; | ||
+ | tabMarkup += | ||
+ | "<li>" + | ||
+ | "<a href='#' class='" + slideClassPrefix + n + "'>" + n + "</a>" + | ||
+ | "</li>"; | ||
+ | }); | ||
+ | $pager.append(tabMarkup); | ||
+ | |||
+ | $tabs = $pager.find("a"); | ||
+ | |||
+ | // Inject pager | ||
+ | if (options.controls) { | ||
+ | $(settings.controls).append($pager); | ||
+ | } else { | ||
+ | $this.after($pager); | ||
+ | } | ||
+ | |||
+ | // Select pager item | ||
+ | selectTab = function (idx) { | ||
+ | $tabs | ||
+ | .closest("li") | ||
+ | .removeClass(activeClass) | ||
+ | .eq(idx) | ||
+ | .addClass(activeClass); | ||
+ | }; | ||
+ | } | ||
+ | |||
+ | // Auto cycle | ||
+ | if (settings.auto) { | ||
+ | |||
+ | startCycle = function () { | ||
+ | rotate = setInterval(function () { | ||
+ | |||
+ | // Clear the event queue | ||
+ | $slide.stop(true, true); | ||
+ | |||
+ | var idx = index + 1 < length ? index + 1 : 0; | ||
+ | |||
+ | // Remove active state and set new if pager is set | ||
+ | if (settings.pager) { | ||
+ | selectTab(idx); | ||
+ | } | ||
+ | |||
+ | slideTo(idx); | ||
+ | }, waitTime); | ||
+ | }; | ||
+ | |||
+ | // Init cycle | ||
+ | startCycle(); | ||
+ | } | ||
+ | |||
+ | // Restarting cycle | ||
+ | restartCycle = function () { | ||
+ | if (settings.auto) { | ||
+ | // Stop | ||
+ | clearInterval(rotate); | ||
+ | // Restart | ||
+ | startCycle(); | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | // Pause on hover | ||
+ | if (settings.pause) { | ||
+ | $this.hover(function () { | ||
+ | clearInterval(rotate); | ||
+ | }, function () { | ||
+ | restartCycle(); | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | // Pager click event handler | ||
+ | if (settings.pager) { | ||
+ | $tabs.bind("click", function (e) { | ||
+ | e.preventDefault(); | ||
+ | |||
+ | if (!settings.pauseControls) { | ||
+ | restartCycle(); | ||
+ | } | ||
+ | |||
+ | // Get index of clicked tab | ||
+ | var idx = $tabs.index(this); | ||
+ | |||
+ | // Break if element is already active or currently animated | ||
+ | if (index === idx || $("." + visibleClass + ":animated").length) { | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | // Remove active state from old tab and set new one | ||
+ | selectTab(idx); | ||
+ | |||
+ | // Do the animation | ||
+ | slideTo(idx); | ||
+ | }) | ||
+ | .eq(0) | ||
+ | .closest("li") | ||
+ | .addClass(activeClass); | ||
+ | |||
+ | // Pause when hovering pager | ||
+ | if (settings.pauseControls) { | ||
+ | $tabs.hover(function () { | ||
+ | clearInterval(rotate); | ||
+ | }, function () { | ||
+ | restartCycle(); | ||
+ | }); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Navigation | ||
+ | if (settings.nav) { | ||
+ | var navMarkup = | ||
+ | "<a href='#' class='" + navClass + " prev'>" + settings.prevText + "</a>" + | ||
+ | "<a href='#' class='" + navClass + " next'>" + settings.nextText + "</a>"; | ||
+ | |||
+ | // Inject navigation | ||
+ | if (options.controls) { | ||
+ | $(settings.controls).append(navMarkup); | ||
+ | } else { | ||
+ | $this.after(navMarkup); | ||
+ | } | ||
+ | |||
+ | var $trigger = $("." + namespaceIdx + "_nav"), | ||
+ | $prev = $("." + namespaceIdx + "_nav.prev"); | ||
+ | |||
+ | // Click event handler | ||
+ | $trigger.bind("click", function (e) { | ||
+ | e.preventDefault(); | ||
+ | |||
+ | // Prevent clicking if currently animated | ||
+ | if ($("." + visibleClass + ":animated").length) { | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | // Adds active class during slide animation | ||
+ | // $(this) | ||
+ | // .addClass(namespace + "_active") | ||
+ | // .delay(fadeTime) | ||
+ | // .queue(function (next) { | ||
+ | // $(this).removeClass(namespace + "_active"); | ||
+ | // next(); | ||
+ | // }); | ||
+ | |||
+ | // Determine where to slide | ||
+ | var idx = $slide.index($("." + visibleClass)), | ||
+ | prevIdx = idx - 1, | ||
+ | nextIdx = idx + 1 < length ? index + 1 : 0; | ||
+ | |||
+ | // Go to slide | ||
+ | slideTo($(this)[0] === $prev[0] ? prevIdx : nextIdx); | ||
+ | if (settings.pager) { | ||
+ | selectTab($(this)[0] === $prev[0] ? prevIdx : nextIdx); | ||
+ | } | ||
+ | |||
+ | if (!settings.pauseControls) { | ||
+ | restartCycle(); | ||
+ | } | ||
+ | }); | ||
+ | |||
+ | // Pause when hovering navigation | ||
+ | if (settings.pauseControls) { | ||
+ | $trigger.hover(function () { | ||
+ | clearInterval(rotate); | ||
+ | }, function () { | ||
+ | restartCycle(); | ||
+ | }); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | // Max-width fallback | ||
+ | if (typeof document.body.style.maxWidth === "undefined" && options.maxwidth) { | ||
+ | var widthSupport = function () { | ||
+ | $this.css("width", "100%"); | ||
+ | if ($this.width() > maxw) { | ||
+ | $this.css("width", maxw); | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | // Init fallback | ||
+ | widthSupport(); | ||
+ | $(window).bind("resize", function () { | ||
+ | widthSupport(); | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | }); | ||
+ | |||
+ | }; | ||
+ | })(jQuery, this, 0); |
Latest revision as of 00:02, 13 August 2012
/*! ResponsiveSlides.js v1.32
* http://responsiveslides.com * http://viljamis.com * * Copyright (c) 2011-2012 @viljamis * Available under the MIT license */
/*jslint browser: true, sloppy: true, vars: true, plusplus: true, indent: 2 */
(function ($, window, i) {
$.fn.responsiveSlides = function (options) {
// Default settings var settings = $.extend({ "auto": true, // Boolean: Animate automatically, true or false "speed": 1000, // Integer: Speed of the transition, in milliseconds "timeout": 4000, // Integer: Time between slide transitions, in milliseconds "pager": false, // Boolean: Show pager, true or false "nav": false, // Boolean: Show navigation, true or false "random": false, // Boolean: Randomize the order of the slides, true or false "pause": false, // Boolean: Pause on hover, true or false "pauseControls": false, // Boolean: Pause when hovering controls, true or false "prevText": "Previous", // String: Text for the "previous" button "nextText": "Next", // String: Text for the "next" button "maxwidth": "", // Integer: Max-width of the slideshow, in pixels"controls": "", // Selector: Where controls should be appended to, default is after the
-
"namespace": "rslides", // String: change the default namespace used
before: function () {}, // Function: Before callback
after: function () {} // Function: After callback
}, options);
return this.each(function () {
// Index for namespacing
i++;
var $this = $(this),
// Local variables
selectTab,
startCycle,
restartCycle,
rotate,
$tabs,
// Helpers
index = 0,
$slide = $this.children(),
length = $slide.size(),
fadeTime = parseFloat(settings.speed),
waitTime = parseFloat(settings.timeout),
maxw = parseFloat(settings.maxwidth),
// Namespacing
namespace = settings.namespace,
namespaceIdx = namespace + i,
// Classes
navClass = namespace + "_nav " + namespaceIdx + "_nav",
activeClass = namespace + "_here",
visibleClass = namespaceIdx + "_on",
slideClassPrefix = namespaceIdx + "_s",
// Pager
$pager = $("<ul class='" + namespace + "_tabs " + namespaceIdx + "_tabs' />"),
// Styles for visible and hidden slides
visible = {"float": "none", "position": "relative"},
hidden = {"float": "none", "position": "absolute"},
// Fading animation
slideTo = function (idx) {
settings.before();
$slide
.stop()
.fadeOut(fadeTime, function () {
$(this)
.removeClass(visibleClass)
.css(hidden);
})
.eq(idx)
.fadeIn(fadeTime, function () {
$(this)
.addClass(visibleClass)
.css(visible);
settings.after();
index = idx;
});
};
// Random order
if (settings.random) {
$slide.sort(function () {
return (Math.round(Math.random()) - 0.5);
});
$this
.empty()
.append($slide);
}
// Add ID's to each slide
$slide.each(function (i) {
this.id = slideClassPrefix + i;
});
// Add max-width and classes
$this.addClass(namespace + " " + namespaceIdx);
if (options && options.maxwidth) {
$this.css("max-width", maxw);
}
// Hide all slides, then show first one
$slide
.hide()
.eq(0)
.addClass(visibleClass)
.css(visible)
.show();
// Only run if there's more than one slide
if ($slide.size() > 1) {
// Make sure the timeout is at least 100ms longer than the fade
if (waitTime < fadeTime + 100) {
return;
}
// Pager
if (settings.pager) {
var tabMarkup = [];
$slide.each(function (i) {
var n = i + 1;
tabMarkup +=
"
- " + "<a href='#' class='" + slideClassPrefix + n + "'>" + n + "</a>" + " ";
}); $pager.append(tabMarkup);
$tabs = $pager.find("a");
// Inject pager if (options.controls) { $(settings.controls).append($pager); } else { $this.after($pager); }
// Select pager item selectTab = function (idx) { $tabs .closest("li") .removeClass(activeClass) .eq(idx) .addClass(activeClass); }; }
// Auto cycle if (settings.auto) {
startCycle = function () { rotate = setInterval(function () {
// Clear the event queue $slide.stop(true, true);
var idx = index + 1 < length ? index + 1 : 0;
// Remove active state and set new if pager is set if (settings.pager) { selectTab(idx); }
slideTo(idx); }, waitTime); };
// Init cycle startCycle(); }
// Restarting cycle restartCycle = function () { if (settings.auto) { // Stop clearInterval(rotate); // Restart startCycle(); } };
// Pause on hover if (settings.pause) { $this.hover(function () { clearInterval(rotate); }, function () { restartCycle(); }); }
// Pager click event handler if (settings.pager) { $tabs.bind("click", function (e) { e.preventDefault();
if (!settings.pauseControls) { restartCycle(); }
// Get index of clicked tab var idx = $tabs.index(this);
// Break if element is already active or currently animated if (index === idx || $("." + visibleClass + ":animated").length) { return; }
// Remove active state from old tab and set new one selectTab(idx);
// Do the animation slideTo(idx); }) .eq(0) .closest("li") .addClass(activeClass);
// Pause when hovering pager if (settings.pauseControls) { $tabs.hover(function () { clearInterval(rotate); }, function () { restartCycle(); }); } }
// Navigation if (settings.nav) { var navMarkup = "<a href='#' class='" + navClass + " prev'>" + settings.prevText + "</a>" + "<a href='#' class='" + navClass + " next'>" + settings.nextText + "</a>";
// Inject navigation if (options.controls) { $(settings.controls).append(navMarkup); } else { $this.after(navMarkup); }
var $trigger = $("." + namespaceIdx + "_nav"), $prev = $("." + namespaceIdx + "_nav.prev");
// Click event handler $trigger.bind("click", function (e) { e.preventDefault();
// Prevent clicking if currently animated if ($("." + visibleClass + ":animated").length) { return; }
// Adds active class during slide animation // $(this) // .addClass(namespace + "_active") // .delay(fadeTime) // .queue(function (next) { // $(this).removeClass(namespace + "_active"); // next(); // });
// Determine where to slide var idx = $slide.index($("." + visibleClass)), prevIdx = idx - 1, nextIdx = idx + 1 < length ? index + 1 : 0;
// Go to slide slideTo($(this)[0] === $prev[0] ? prevIdx : nextIdx); if (settings.pager) { selectTab($(this)[0] === $prev[0] ? prevIdx : nextIdx); }
if (!settings.pauseControls) { restartCycle(); } });
// Pause when hovering navigation if (settings.pauseControls) { $trigger.hover(function () { clearInterval(rotate); }, function () { restartCycle(); }); } }
}
// Max-width fallback if (typeof document.body.style.maxWidth === "undefined" && options.maxwidth) { var widthSupport = function () { $this.css("width", "100%"); if ($this.width() > maxw) { $this.css("width", maxw); } };
// Init fallback widthSupport(); $(window).bind("resize", function () { widthSupport(); }); }
});
};})(jQuery, this, 0);