Viljami S
13 years ago
1 changed files with 155 additions and 0 deletions
@ -0,0 +1,155 @@ |
|||||||
|
/*! AdaptiveSlides.js v1.0. (c) 2011 Viljami Salminen. MIT License. http://adaptiveslides.viljamis.com */ |
||||||
|
(function ($) { |
||||||
|
$.fn.adaptiveSlides = function (options) { |
||||||
|
|
||||||
|
// Settings
|
||||||
|
var settings = { |
||||||
|
'speed' : 4000, |
||||||
|
'fade' : 1000, |
||||||
|
'auto' : true, |
||||||
|
'maxwidth' : 'none', |
||||||
|
'namespace' : 'adaptiveSlides' |
||||||
|
}; |
||||||
|
|
||||||
|
return this.each(function () { |
||||||
|
var $this = $(this); |
||||||
|
|
||||||
|
if (options) { |
||||||
|
$.extend(settings, options); |
||||||
|
} |
||||||
|
|
||||||
|
// Don't run if there's only one image
|
||||||
|
if ($this.find('img').length <= 1) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
var slideshow = function () { |
||||||
|
$this.find('img').each(function (i) { |
||||||
|
var $el = $(this); |
||||||
|
$el.attr({ |
||||||
|
id : settings.namespace + '_slide' + i |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
$this.find('img').css({ |
||||||
|
top: 0, |
||||||
|
left: 0, |
||||||
|
width: '100%', |
||||||
|
height: 'inherit', |
||||||
|
position: 'absolute' |
||||||
|
}); |
||||||
|
|
||||||
|
$this.find(':first-child').addClass(settings.namespace + '_visible'); |
||||||
|
|
||||||
|
$this.css({ |
||||||
|
'max-width': parseFloat(settings.maxwidth), |
||||||
|
width: '100%', |
||||||
|
overflow: 'hidden', |
||||||
|
position: 'relative' |
||||||
|
}); |
||||||
|
|
||||||
|
// Dirty attempt to fix the height
|
||||||
|
heightFix = [ |
||||||
|
'<style>', |
||||||
|
'.' + settings.namespace + '_visible {', |
||||||
|
'position: relative !important;', |
||||||
|
'float: left !important;', |
||||||
|
'}', |
||||||
|
'</style>' |
||||||
|
].join(''); |
||||||
|
$('head').append(heightFix); |
||||||
|
|
||||||
|
// Auto: true
|
||||||
|
if (settings.auto === true) { |
||||||
|
$this.find('img:gt(0)').hide(); |
||||||
|
setInterval(function () { |
||||||
|
$this.find(':first-child').fadeOut(parseFloat(settings.fade)) |
||||||
|
.next('img').fadeIn(parseFloat(settings.fade)) |
||||||
|
.addClass(settings.namespace + '_visible').end().appendTo($this) |
||||||
|
.removeClass(settings.namespace + '_visible'); |
||||||
|
}, parseFloat(settings.speed)); |
||||||
|
|
||||||
|
// Auto: false
|
||||||
|
} else { |
||||||
|
var $pagination = $('<ul class="' + settings.namespace + '_tabs" />'), |
||||||
|
$slides = $this.find('img'), |
||||||
|
slideNumber = $slides.length; |
||||||
|
|
||||||
|
$this.find('img:gt(0)').hide(); |
||||||
|
|
||||||
|
while (slideNumber--) { |
||||||
|
var whichSlide = slideNumber + 1; |
||||||
|
tabMarkup = [ |
||||||
|
'<li>', |
||||||
|
'<a href="#' + settings.namespace + '_slide' + slideNumber + '"', |
||||||
|
'class="' + settings.namespace + '_slide' + slideNumber + '">' + whichSlide + '</a>', |
||||||
|
'</li>' |
||||||
|
].join(''); |
||||||
|
$pagination.prepend(tabMarkup); |
||||||
|
} |
||||||
|
$this.after($pagination); |
||||||
|
|
||||||
|
$('.' + settings.namespace + '_slide0').parent().addClass('active'); |
||||||
|
|
||||||
|
$('.' + settings.namespace + '_tabs a').each(function (i) { |
||||||
|
var $el = $(this); |
||||||
|
|
||||||
|
$el.click(function (e) { |
||||||
|
e.preventDefault(); |
||||||
|
|
||||||
|
// Prevent clicking if animated
|
||||||
|
if ($('.' + settings.namespace + '_visible:animated').length) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
if (!($el.parent().hasClass('active'))) { |
||||||
|
$('.' + settings.namespace + '_tabs li').removeClass('active'); |
||||||
|
|
||||||
|
$('.' + settings.namespace + '_visible').stop() |
||||||
|
.fadeOut(parseFloat(settings.fade), function () { |
||||||
|
$(this).removeClass(settings.namespace + '_visible'); |
||||||
|
}).end(); |
||||||
|
|
||||||
|
$('#' + settings.namespace + '_slide' + i).stop() |
||||||
|
.fadeIn(parseFloat(settings.fade), function () { |
||||||
|
$(this).addClass(settings.namespace + '_visible'); |
||||||
|
}).end(); |
||||||
|
|
||||||
|
$el.parent().addClass('active'); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
// Fallback to make IE6 support CSS max-width
|
||||||
|
var widthSupport = function () { |
||||||
|
if (options.maxwidth) { |
||||||
|
if (typeof document.body.style.maxHeight !== 'undefined' && typeof document.body.style.minHeight !== 'undefined') { |
||||||
|
return false; |
||||||
|
} else { |
||||||
|
$this.each(function () { |
||||||
|
$this.css('width', '100%'); |
||||||
|
if ($this.width() > parseFloat(settings.maxwidth)) { |
||||||
|
$this.css('width', parseFloat(settings.maxwidth)); |
||||||
|
} else if ($this.width() < parseFloat(settings.maxwidth)) { |
||||||
|
$this.css('width', '100%'); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
// Call once
|
||||||
|
slideshow(); |
||||||
|
widthSupport(); |
||||||
|
|
||||||
|
// Call on resize
|
||||||
|
$(window).resize(function () { |
||||||
|
widthSupport(); |
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
|
}; |
||||||
|
})(jQuery); |
Loading…
Reference in new issue