/* jQuery Johnny Slider - http://www.johnnybroccolii.com Copyright (c) 2010 Keiji Hokamura This plugin available for use in all personal or commercial projects under both MIT and GPL licenses. */ $.fn.johnnySlider = function(settings) { settings = $.extend({ slideInterval: 1000, slideEaseDuration: 1400, slideEaseFunction: "easeInOutQuart", containerSlideEaseDuration: 1600, containerSlideEaseFunction: "easeInOutQuart", leftMargin: 0 }, settings); return this.each( function(index) { var containerSlider = $(this); var slider = containerSlider.find('div.images'); var windowWidth = $(window).width(); containerSlider.css('left', windowWidth + 300); slider.ready( function() { containerSlider.css('display', 'block'); containerSlider.data('johnnySliderCounter', 0); setupImagesWidth(); setTimeout(autoSlide, settings.autoSlideInterval); } ); $(window).resize(setupImagesWidth); function setupImagesWidth() { var images = slider.find('img'); var originalImagesSize = 0; var maxImageSize = 0; var windowWidth = $(window).width(); for (var i = 0; i < images.size(); i++) { var image = $(images.get(i)); originalImagesSize += image.width(); if (image.width() > maxImageSize) maxImageSize = image.width(); image.remove(); slider.append(image); } if (originalImagesSize + settings.leftMargin < windowWidth) { var addedImageTimes = Math.floor(windowWidth / originalImagesSize); for (var i = 0; i < addedImageTimes; i++) { for (var j = 0; j < images.size(); j++) { slider.append($(images.get(j)).clone()); } } originalImagesSize = originalImagesSize * (addedImageTimes + 1); } containerSlider.css('width', originalImagesSize + maxImageSize); } function autoSlide() { var counter = containerSlider.data('johnnySliderCounter'); var images = slider.find('img'); if (counter != null && images.size() > 1) { if (counter % 3 != 0) { var firstImg = $(images.get(0)); var toMarginLeft = -1 * firstImg.width(); slider.append(firstImg.clone()); slider.animate( { marginLeft: toMarginLeft }, settings.slideEaseDuration, settings.slideEaseFunction, function() { slider.css('marginLeft', 0); firstImg.remove(); } ); setTimeout(autoSlide, settings.slideEaseDuration + settings.slideInterval); } else { var toLeft = windowWidth * 0.7 * Math.random(); toLeft = toLeft > settings.leftMargin ? toLeft : settings.leftMargin; containerSlider.animate( { left: toLeft }, settings.containerSlideEaseDuration, settings.containerSlideEaseFunction ); setTimeout(autoSlide, settings.containerSlideEaseDuration + settings.slideInterval); if (soundFlag && !initialSlideFlag) { var slideSound = $('#slide-sound').get(0); slideSound.volume = 0.6; slideSound.play(); } if (initialSlideFlag) { initialSlideCount++; if (initialSlideCount == portfolioCount) { initialSlideFlag = false; } } } containerSlider.data('johnnySliderCounter', ++counter); } }; } ); };