JAVASCRIPT 13
Jquery.nivo slider.js Guest on 1st October 2020 08:35:08 PM
  1. /*
  2.  * jQuery Nivo Slider v3.2
  3.  * http://nivo.dev7studios.com
  4.  *
  5.  * Copyright 2012, Dev7studios
  6.  * Free to use and abuse under the MIT license.
  7.  * http://www.opensource.org/licenses/mit-license.php
  8.  */
  9.  
  10. (function($) {
  11.     var NivoSlider = function(element, options){
  12.         // Defaults are below
  13.         var settings = $.extend({}, $.fn.nivoSlider.defaults, options);
  14.  
  15.         // Useful variables. Play carefully.
  16.         var vars = {
  17.             currentSlide: 0,
  18.             currentImage: '',
  19.             totalSlides: 0,
  20.             running: false,
  21.             paused: false,
  22.             stop: false,
  23.             controlNavEl: false
  24.         };
  25.  
  26.         // Get this slider
  27.         var slider = $(element);
  28.         slider.data('nivo:vars', vars).addClass('nivoSlider');
  29.  
  30.         // Find our slider children
  31.         var kids = slider.children();
  32.         kids.each(function() {
  33.             var child = $(this);
  34.             var link = '';
  35.             if(!child.is('img')){
  36.                 if(child.is('a')){
  37.                     child.addClass('nivo-imageLink');
  38.                     link = child;
  39.                 }
  40.                 child = child.find('img:first');
  41.             }
  42.             // Get img width & height
  43.             var childWidth = (childWidth === 0) ? child.attr('width') : child.width(),
  44.                 childHeight = (childHeight === 0) ? child.attr('height') : child.height();
  45.  
  46.             if(link !== ''){
  47.                 link.css('display','none');
  48.             }
  49.             child.css('display','none');
  50.             vars.totalSlides++;
  51.         });
  52.          
  53.         // If randomStart
  54.         if(settings.randomStart){
  55.             settings.startSlide = Math.floor(Math.random() * vars.totalSlides);
  56.         }
  57.        
  58.         // Set startSlide
  59.         if(settings.startSlide > 0){
  60.             if(settings.startSlide >= vars.totalSlides) { settings.startSlide = vars.totalSlides - 1; }
  61.             vars.currentSlide = settings.startSlide;
  62.         }
  63.        
  64.         // Get initial image
  65.         if($(kids[vars.currentSlide]).is('img')){
  66.             vars.currentImage = $(kids[vars.currentSlide]);
  67.         } else {
  68.             vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
  69.         }
  70.        
  71.         // Show initial link
  72.         if($(kids[vars.currentSlide]).is('a')){
  73.             $(kids[vars.currentSlide]).css('display','block');
  74.         }
  75.        
  76.         // Set first background
  77.         var sliderImg = $('<img/>').addClass('nivo-main-image');
  78.         sliderImg.attr('src', vars.currentImage.attr('src')).show();
  79.         slider.append(sliderImg);
  80.  
  81.         // Detect Window Resize
  82.         $(window).resize(function() {
  83.             slider.children('img').width(slider.width());
  84.             sliderImg.attr('src', vars.currentImage.attr('src'));
  85.             sliderImg.stop().height('auto');
  86.             $('.nivo-slice').remove();
  87.             $('.nivo-box').remove();
  88.         });
  89.  
  90.         //Create caption
  91.         slider.append($('<div class="nivo-caption"></div>'));
  92.        
  93.         // Process caption function
  94.         var processCaption = function(settings){
  95.             var nivoCaption = $('.nivo-caption', slider);
  96.             if(vars.currentImage.attr('alt') != '' && vars.currentImage.attr('alt') != undefined){
  97.                 var alt = vars.currentImage.attr('alt');
  98.                 if(alt.substr(0,1) == '#') alt = $(alt).html();  
  99.  
  100.                 if(nivoCaption.css('display') == 'block'){
  101.                     setTimeout(function(){
  102.                         nivoCaption.html(alt);
  103.                     }, settings.animSpeed);
  104.                 } else {
  105.                     nivoCaption.html(alt);
  106.                     nivoCaption.stop().fadeIn(settings.animSpeed);
  107.                 }
  108.             } else {
  109.                 nivoCaption.stop().fadeOut(settings.animSpeed);
  110.             }
  111.         }
  112.        
  113.         //Process initial  caption
  114.         processCaption(settings);
  115.        
  116.         // In the words of Super Mario "let's a go!"
  117.         var timer = 0;
  118.         if(!settings.manualAdvance && kids.length > 1){
  119.             timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
  120.         }
  121.        
  122.         // Add Direction nav
  123.         if(settings.directionNav){
  124.             slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+ settings.prevText +'</a><a class="nivo-nextNav">'+ settings.nextText +'</a></div>');
  125.            
  126.             $(slider).on('click', 'a.nivo-prevNav', function(){
  127.                 if(vars.running) { return false; }
  128.                 clearInterval(timer);
  129.                 timer = '';
  130.                 vars.currentSlide -= 2;
  131.                 nivoRun(slider, kids, settings, 'prev');
  132.             });
  133.            
  134.             $(slider).on('click', 'a.nivo-nextNav', function(){
  135.                 if(vars.running) { return false; }
  136.                 clearInterval(timer);
  137.                 timer = '';
  138.                 nivoRun(slider, kids, settings, 'next');
  139.             });
  140.         }
  141.        
  142.         // Add Control nav
  143.         if(settings.controlNav){
  144.             vars.controlNavEl = $('<div class="nivo-controlNav"></div>');
  145.             slider.after(vars.controlNavEl);
  146.             for(var i = 0; i < kids.length; i++){
  147.                 if(settings.controlNavThumbs){
  148.                     vars.controlNavEl.addClass('nivo-thumbs-enabled');
  149.                     var child = kids.eq(i);
  150.                     if(!child.is('img')){
  151.                         child = child.find('img:first');
  152.                     }
  153.                     if(child.attr('data-thumb')) vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('data-thumb') +'" alt="" /></a>');
  154.                 } else {
  155.                     vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>');
  156.                 }
  157.             }
  158.  
  159.             //Set initial active link
  160.             $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
  161.            
  162.             $('a', vars.controlNavEl).bind('click', function(){
  163.                 if(vars.running) return false;
  164.                 if($(this).hasClass('active')) return false;
  165.                 clearInterval(timer);
  166.                 timer = '';
  167.                 sliderImg.attr('src', vars.currentImage.attr('src'));
  168.                 vars.currentSlide = $(this).attr('rel') - 1;
  169.                 nivoRun(slider, kids, settings, 'control');
  170.             });
  171.         }
  172.        
  173.         //For pauseOnHover setting
  174.         if(settings.pauseOnHover){
  175.             slider.hover(function(){
  176.                 vars.paused = true;
  177.                 clearInterval(timer);
  178.                 timer = '';
  179.             }, function(){
  180.                 vars.paused = false;
  181.                 // Restart the timer
  182.                 if(timer === '' && !settings.manualAdvance){
  183.                     timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
  184.                 }
  185.             });
  186.         }
  187.        
  188.         // Event when Animation finishes
  189.         slider.bind('nivo:animFinished', function(){
  190.             sliderImg.attr('src', vars.currentImage.attr('src'));
  191.             vars.running = false;
  192.             // Hide child links
  193.             $(kids).each(function(){
  194.                 if($(this).is('a')){
  195.                    $(this).css('display','none');
  196.                 }
  197.             });
  198.             // Show current link
  199.             if($(kids[vars.currentSlide]).is('a')){
  200.                 $(kids[vars.currentSlide]).css('display','block');
  201.             }
  202.             // Restart the timer
  203.             if(timer === '' && !vars.paused && !settings.manualAdvance){
  204.                 timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
  205.             }
  206.             // Trigger the afterChange callback
  207.             settings.afterChange.call(this);
  208.         });
  209.        
  210.         // Add slices for slice animations
  211.         var createSlices = function(slider, settings, vars) {
  212.                 if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
  213.             $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
  214.             var sliceHeight = ($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().is('a')) ? $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().height() : $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height();
  215.  
  216.             for(var i = 0; i < settings.slices; i++){
  217.                 var sliceWidth = Math.round(slider.width()/settings.slices);
  218.                
  219.                 if(i === settings.slices-1){
  220.                     slider.append(
  221.                         $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({
  222.                             left:(sliceWidth*i)+'px',
  223.                             width:(slider.width()-(sliceWidth*i))+'px',
  224.                             height:sliceHeight+'px',
  225.                             opacity:'0',
  226.                             overflow:'hidden'
  227.                         })
  228.                     );
  229.                 } else {
  230.                     slider.append(
  231.                         $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({
  232.                             left:(sliceWidth*i)+'px',
  233.                             width:sliceWidth+'px',
  234.                             height:sliceHeight+'px',
  235.                             opacity:'0',
  236.                             overflow:'hidden'
  237.                         })
  238.                     );
  239.                 }
  240.             }
  241.            
  242.             $('.nivo-slice', slider).height(sliceHeight);
  243.             sliderImg.stop().animate({
  244.                 height: $(vars.currentImage).height()
  245.             }, settings.animSpeed);
  246.         };
  247.        
  248.         // Add boxes for box animations
  249.         var createBoxes = function(slider, settings, vars){
  250.                 if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
  251.             $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
  252.             var boxWidth = Math.round(slider.width()/settings.boxCols),
  253.                 boxHeight = Math.round($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height() / settings.boxRows);
  254.            
  255.                        
  256.             for(var rows = 0; rows < settings.boxRows; rows++){
  257.                 for(var cols = 0; cols < settings.boxCols; cols++){
  258.                     if(cols === settings.boxCols-1){
  259.                         slider.append(
  260.                             $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({
  261.                                 opacity:0,
  262.                                 left:(boxWidth*cols)+'px',
  263.                                 top:(boxHeight*rows)+'px',
  264.                                 width:(slider.width()-(boxWidth*cols))+'px'
  265.                                
  266.                             })
  267.                         );
  268.                         $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
  269.                     } else {
  270.                         slider.append(
  271.                             $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({
  272.                                 opacity:0,
  273.                                 left:(boxWidth*cols)+'px',
  274.                                 top:(boxHeight*rows)+'px',
  275.                                 width:boxWidth+'px'
  276.                             })
  277.                         );
  278.                         $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
  279.                     }
  280.                 }
  281.             }
  282.            
  283.             sliderImg.stop().animate({
  284.                 height: $(vars.currentImage).height()
  285.             }, settings.animSpeed);
  286.         };
  287.  
  288.         // Private run method
  289.         var nivoRun = function(slider, kids, settings, nudge){          
  290.             // Get our vars
  291.             var vars = slider.data('nivo:vars');
  292.            
  293.             // Trigger the lastSlide callback
  294.             if(vars && (vars.currentSlide === vars.totalSlides - 1)){
  295.                 settings.lastSlide.call(this);
  296.             }
  297.            
  298.             // Stop
  299.             if((!vars || vars.stop) && !nudge) { return false; }
  300.            
  301.             // Trigger the beforeChange callback
  302.             settings.beforeChange.call(this);
  303.  
  304.             // Set current background before change
  305.             if(!nudge){
  306.                 sliderImg.attr('src', vars.currentImage.attr('src'));
  307.             } else {
  308.                 if(nudge === 'prev'){
  309.                     sliderImg.attr('src', vars.currentImage.attr('src'));
  310.                 }
  311.                 if(nudge === 'next'){
  312.                     sliderImg.attr('src', vars.currentImage.attr('src'));
  313.                 }
  314.             }
  315.            
  316.             vars.currentSlide++;
  317.             // Trigger the slideshowEnd callback
  318.             if(vars.currentSlide === vars.totalSlides){
  319.                 vars.currentSlide = 0;
  320.                 settings.slideshowEnd.call(this);
  321.             }
  322.             if(vars.currentSlide < 0) { vars.currentSlide = (vars.totalSlides - 1); }
  323.             // Set vars.currentImage
  324.             if($(kids[vars.currentSlide]).is('img')){
  325.                 vars.currentImage = $(kids[vars.currentSlide]);
  326.             } else {
  327.                 vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
  328.             }
  329.            
  330.             // Set active links
  331.             if(settings.controlNav){
  332.                 $('a', vars.controlNavEl).removeClass('active');
  333.                 $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
  334.             }
  335.            
  336.             // Process caption
  337.             processCaption(settings);            
  338.            
  339.             // Remove any slices from last transition
  340.             $('.nivo-slice', slider).remove();
  341.            
  342.             // Remove any boxes from last transition
  343.             $('.nivo-box', slider).remove();
  344.            
  345.             var currentEffect = settings.effect,
  346.                 anims = '';
  347.                
  348.             // Generate random effect
  349.             if(settings.effect === 'random'){
  350.                 anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade',
  351.                 'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
  352.                 currentEffect = anims[Math.floor(Math.random()*(anims.length + 1))];
  353.                 if(currentEffect === undefined) { currentEffect = 'fade'; }
  354.             }
  355.            
  356.             // Run random effect from specified set (eg: effect:'fold,fade')
  357.             if(settings.effect.indexOf(',') !== -1){
  358.                 anims = settings.effect.split(',');
  359.                 currentEffect = anims[Math.floor(Math.random()*(anims.length))];
  360.                 if(currentEffect === undefined) { currentEffect = 'fade'; }
  361.             }
  362.            
  363.             // Custom transition as defined by "data-transition" attribute
  364.             if(vars.currentImage.attr('data-transition')){
  365.                 currentEffect = vars.currentImage.attr('data-transition');
  366.             }
  367.        
  368.             // Run effects
  369.             vars.running = true;
  370.             var timeBuff = 0,
  371.                 i = 0,
  372.                 slices = '',
  373.                 firstSlice = '',
  374.                 totalBoxes = '',
  375.                 boxes = '';
  376.            
  377.             if(currentEffect === 'sliceDown' || currentEffect === 'sliceDownRight' || currentEffect === 'sliceDownLeft'){
  378.                 createSlices(slider, settings, vars);
  379.                 timeBuff = 0;
  380.                 i = 0;
  381.                 slices = $('.nivo-slice', slider);
  382.                 if(currentEffect === 'sliceDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
  383.                
  384.                 slices.each(function(){
  385.                     var slice = $(this);
  386.                     slice.css({ 'top': '0px' });
  387.                     if(i === settings.slices-1){
  388.                         setTimeout(function(){
  389.                             slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
  390.                         }, (100 + timeBuff));
  391.                     } else {
  392.                         setTimeout(function(){
  393.                             slice.animate({opacity:'1.0' }, settings.animSpeed);
  394.                         }, (100 + timeBuff));
  395.                     }
  396.                     timeBuff += 50;
  397.                     i++;
  398.                 });
  399.             } else if(currentEffect === 'sliceUp' || currentEffect === 'sliceUpRight' || currentEffect === 'sliceUpLeft'){
  400.                 createSlices(slider, settings, vars);
  401.                 timeBuff = 0;
  402.                 i = 0;
  403.                 slices = $('.nivo-slice', slider);
  404.                 if(currentEffect === 'sliceUpLeft') { slices = $('.nivo-slice', slider)._reverse(); }
  405.                
  406.                 slices.each(function(){
  407.                     var slice = $(this);
  408.                     slice.css({ 'bottom': '0px' });
  409.                     if(i === settings.slices-1){
  410.                         setTimeout(function(){
  411.                             slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
  412.                         }, (100 + timeBuff));
  413.                     } else {
  414.                         setTimeout(function(){
  415.                             slice.animate({opacity:'1.0' }, settings.animSpeed);
  416.                         }, (100 + timeBuff));
  417.                     }
  418.                     timeBuff += 50;
  419.                     i++;
  420.                 });
  421.             } else if(currentEffect === 'sliceUpDown' || currentEffect === 'sliceUpDownRight' || currentEffect === 'sliceUpDownLeft'){
  422.                 createSlices(slider, settings, vars);
  423.                 timeBuff = 0;
  424.                 i = 0;
  425.                 var v = 0;
  426.                 slices = $('.nivo-slice', slider);
  427.                 if(currentEffect === 'sliceUpDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
  428.                
  429.                 slices.each(function(){
  430.                     var slice = $(this);
  431.                     if(i === 0){
  432.                         slice.css('top','0px');
  433.                         i++;
  434.                     } else {
  435.                         slice.css('bottom','0px');
  436.                         i = 0;
  437.                     }
  438.                    
  439.                     if(v === settings.slices-1){
  440.                         setTimeout(function(){
  441.                             slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
  442.                         }, (100 + timeBuff));
  443.                     } else {
  444.                         setTimeout(function(){
  445.                             slice.animate({opacity:'1.0' }, settings.animSpeed);
  446.                         }, (100 + timeBuff));
  447.                     }
  448.                     timeBuff += 50;
  449.                     v++;
  450.                 });
  451.             } else if(currentEffect === 'fold'){
  452.                 createSlices(slider, settings, vars);
  453.                 timeBuff = 0;
  454.                 i = 0;
  455.                
  456.                 $('.nivo-slice', slider).each(function(){
  457.                     var slice = $(this);
  458.                     var origWidth = slice.width();
  459.                     slice.css({ top:'0px', width:'0px' });
  460.                     if(i === settings.slices-1){
  461.                         setTimeout(function(){
  462.                             slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
  463.                         }, (100 + timeBuff));
  464.                     } else {
  465.                         setTimeout(function(){
  466.                             slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed);
  467.                         }, (100 + timeBuff));
  468.                     }
  469.                     timeBuff += 50;
  470.                     i++;
  471.                 });
  472.             } else if(currentEffect === 'fade'){
  473.                 createSlices(slider, settings, vars);
  474.                
  475.                 firstSlice = $('.nivo-slice:first', slider);
  476.                 firstSlice.css({
  477.                     'width': slider.width() + 'px'
  478.                 });
  479.    
  480.                 firstSlice.animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
  481.             } else if(currentEffect === 'slideInRight'){
  482.                 createSlices(slider, settings, vars);
  483.                
  484.                 firstSlice = $('.nivo-slice:first', slider);
  485.                 firstSlice.css({
  486.                     'width': '0px',
  487.                     'opacity': '1'
  488.                 });
  489.  
  490.                 firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
  491.             } else if(currentEffect === 'slideInLeft'){
  492.                 createSlices(slider, settings, vars);
  493.                
  494.                 firstSlice = $('.nivo-slice:first', slider);
  495.                 firstSlice.css({
  496.                     'width': '0px',
  497.                     'opacity': '1',
  498.                     'left': '',
  499.                     'right': '0px'
  500.                 });
  501.  
  502.                 firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){
  503.                     // Reset positioning
  504.                     firstSlice.css({
  505.                         'left': '0px',
  506.                         'right': ''
  507.                     });
  508.                     slider.trigger('nivo:animFinished');
  509.                 });
  510.             } else if(currentEffect === 'boxRandom'){
  511.                 createBoxes(slider, settings, vars);
  512.                
  513.                 totalBoxes = settings.boxCols * settings.boxRows;
  514.                 i = 0;
  515.                 timeBuff = 0;
  516.  
  517.                 boxes = shuffle($('.nivo-box', slider));
  518.                 boxes.each(function(){
  519.                     var box = $(this);
  520.                     if(i === totalBoxes-1){
  521.                         setTimeout(function(){
  522.                             box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
  523.                         }, (100 + timeBuff));
  524.                     } else {
  525.                         setTimeout(function(){
  526.                             box.animate({ opacity:'1' }, settings.animSpeed);
  527.                         }, (100 + timeBuff));
  528.                     }
  529.                     timeBuff += 20;
  530.                     i++;
  531.                 });
  532.             } else if(currentEffect === 'boxRain' || currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
  533.                 createBoxes(slider, settings, vars);
  534.                
  535.                 totalBoxes = settings.boxCols * settings.boxRows;
  536.                 i = 0;
  537.                 timeBuff = 0;
  538.                
  539.                 // Split boxes into 2D array
  540.                 var rowIndex = 0;
  541.                 var colIndex = 0;
  542.                 var box2Darr = [];
  543.                 box2Darr[rowIndex] = [];
  544.                 boxes = $('.nivo-box', slider);
  545.                 if(currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrowReverse'){
  546.                     boxes = $('.nivo-box', slider)._reverse();
  547.                 }
  548.                 boxes.each(function(){
  549.                     box2Darr[rowIndex][colIndex] = $(this);
  550.                     colIndex++;
  551.                     if(colIndex === settings.boxCols){
  552.                         rowIndex++;
  553.                         colIndex = 0;
  554.                         box2Darr[rowIndex] = [];
  555.                     }
  556.                 });
  557.                
  558.                 // Run animation
  559.                 for(var cols = 0; cols < (settings.boxCols * 2); cols++){
  560.                     var prevCol = cols;
  561.                     for(var rows = 0; rows < settings.boxRows; rows++){
  562.                         if(prevCol >= 0 && prevCol < settings.boxCols){
  563.                             /* Due to some weird JS bug with loop vars
  564.                             being used in setTimeout, this is wrapped
  565.                             with an anonymous function call */
  566.                             (function(row, col, time, i, totalBoxes) {
  567.                                 var box = $(box2Darr[row][col]);
  568.                                 var w = box.width();
  569.                                 var h = box.height();
  570.                                 if(currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
  571.                                     box.width(0).height(0);
  572.                                 }
  573.                                 if(i === totalBoxes-1){
  574.                                     setTimeout(function(){
  575.                                         box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); });
  576.                                     }, (100 + time));
  577.                                 } else {
  578.                                     setTimeout(function(){
  579.                                         box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3);
  580.                                     }, (100 + time));
  581.                                 }
  582.                             })(rows, prevCol, timeBuff, i, totalBoxes);
  583.                             i++;
  584.                         }
  585.                         prevCol--;
  586.                     }
  587.                     timeBuff += 100;
  588.                 }
  589.             }          
  590.         };
  591.        
  592.         // Shuffle an array
  593.         var shuffle = function(arr){
  594.             for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i, 10), x = arr[--i], arr[i] = arr[j], arr[j] = x);
  595.             return arr;
  596.         };
  597.        
  598.         // For debugging
  599.         var trace = function(msg){
  600.             if(this.console && typeof console.log !== 'undefined') { console.log(msg); }
  601.         };
  602.        
  603.         // Start / Stop
  604.         this.stop = function(){
  605.             if(!$(element).data('nivo:vars').stop){
  606.                 $(element).data('nivo:vars').stop = true;
  607.                 trace('Stop Slider');
  608.             }
  609.         };
  610.        
  611.         this.start = function(){
  612.             if($(element).data('nivo:vars').stop){
  613.                 $(element).data('nivo:vars').stop = false;
  614.                 trace('Start Slider');
  615.             }
  616.         };
  617.        
  618.         // Trigger the afterLoad callback
  619.         settings.afterLoad.call(this);
  620.        
  621.         return this;
  622.     };
  623.        
  624.     $.fn.nivoSlider = function(options) {
  625.         return this.each(function(key, value){
  626.             var element = $(this);
  627.             // Return early if this element already has a plugin instance
  628.             if (element.data('nivoslider')) { return element.data('nivoslider'); }
  629.             // Pass options to plugin constructor
  630.             var nivoslider = new NivoSlider(this, options);
  631.             // Store plugin object in this element's data
  632.             element.data('nivoslider', nivoslider);
  633.         });
  634.     };
  635.    
  636.     //Default settings
  637.     $.fn.nivoSlider.defaults = {
  638.         effect: 'random',
  639.         slices: 15,
  640.         boxCols: 8,
  641.         boxRows: 4,
  642.         animSpeed: 500,
  643.         pauseTime: 3000,
  644.         startSlide: 0,
  645.         directionNav: true,
  646.         controlNav: true,
  647.         controlNavThumbs: false,
  648.         pauseOnHover: true,
  649.         manualAdvance: false,
  650.         prevText: 'Prev',
  651.         nextText: 'Next',
  652.         randomStart: false,
  653.         beforeChange: function(){},
  654.         afterChange: function(){},
  655.         slideshowEnd: function(){},
  656.         lastSlide: function(){},
  657.         afterLoad: function(){}
  658.     };
  659.  
  660.     $.fn._reverse = [].reverse;
  661.    
  662. })(jQuery);

Paste is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

Login or Register to edit or fork this paste. It's free.