מדיה ויקי:MultiSlider.js: הבדלים בין גרסאות בדף
מתוך מכביפדיה
אין תקציר עריכה
אין תקציר עריכה
שורה 6: שורה 6:
*
*
*/
*/
$( document ).ready(function() {
$(document).ready(function () {
(function($){
    (function ($) {


    // ==== BEGINS PLUGGIN ====
        // ==== BEGINS PLUGGIN ====
    $.fn.multislider = function(data, callback){
        $.fn.multislider = function (data, callback) {


        // ==== CACHE DOM ====
            // ==== CACHE DOM ====
        var $multislider = $(this);
            var $multislider = $(this);
        var $msContent = $multislider.find('.MS-content');
            var $msContent = $multislider.find('.nmpIndexSliderContent');
        var $msRight = $multislider.find('button.MS-right');
            var $msRight = $multislider.find('button.nmpIndexSliderButtonRight');
        var $msLeft = $multislider.find('button.MS-left');
            var $msLeft = $multislider.find('button.nmpIndexSliderButtonLeft');
        var $imgFirst = $msContent.find('.item:first');
            var $imgFirst = $msContent.find('.nmpIndexSliderItem:first');


        // === DETERMINE ACTION ====
            // === DETERMINE ACTION ====
        // string = method | object or nothing is to initialize
            // string = method | object or nothing is to initialize
        if(typeof data === 'string'){
            if (typeof data === 'string') {
            getStringArgs(data);
                getStringArgs(data);
            return $multislider;
                return $multislider;
        } else if (typeof data === 'object' || typeof data ==='undefined'){
            } else if (typeof data === 'object' || typeof data === 'undefined') {
            init();
                init();
        }
            }


        // ==== PLUGGIN VARIABLES ====
            // ==== PLUGGIN VARIABLES ====
        var $imgLast,
            var $imgLast,
        totalWidth,
                totalWidth,
        numberVisibleSlides,
                numberVisibleSlides,
        animateDistance,
                animateDistance,
        animateSlideRight,
                animateSlideRight,
        animateSlideLeft,
                animateSlideLeft,
        defaults,
                defaults,
        settings,
                settings,
        animateDuration,
                animateDuration,
        autoSlideInterval;
                autoSlideInterval;


        // = INITIALIZE =
            // = INITIALIZE =
        function init(){
            function init() {
            minifyContent();        // minify html
                minifyContent();        // minify html
            createSettings();      // merge defaults and user provided options
                createSettings();      // merge defaults and user provided options
            saveData();            // add data object to DOM el with reference to animation functions, allows for methods to reference at any time
                saveData();            // add data object to DOM el with reference to animation functions, allows for methods to reference at any time
            selectAnimations();    // choose default animation
                selectAnimations();    // choose default animation
        }
            }




        // ==== EVENT HANDLERS ====
            // ==== EVENT HANDLERS ====
        $msRight.on('click', animateSlideLeft);
            $msRight.on('click', animateSlideLeft);
        $msLeft.on('click', animateSlideRight);
            $msLeft.on('click', animateSlideRight);
        $multislider.on('click','.MS-right, .MS-left', resetInterval);
            $multislider.on('click', '.nmpIndexSliderButtonRight, .nmpIndexSliderButtonLeft', resetInterval);
        $(window).on('resize', findItemWidth);
            $(window).on('resize', findItemWidth);




        // ==== FUNCTIONS (for days...) ====
            // ==== FUNCTIONS (for days...) ====
        // =================================
            // =================================


        function pauseAbove(){
            function pauseAbove() {
            if (window.innerWidth > settings.pauseAbove){ $multislider.addClass('ms-PAUSE'); }
                if (window.innerWidth > settings.pauseAbove) { $multislider.addClass('ms-PAUSE'); }
            $(window).on('resize',function(){
                $(window).on('resize', function () {
                if (window.innerWidth > settings.pauseAbove){
                    if (window.innerWidth > settings.pauseAbove) {
                     $multislider.addClass('ms-PAUSE');
                        $multislider.addClass('ms-PAUSE');
                     } else {
                        $multislider.removeClass('ms-PAUSE');
                    }
                });
            }
 
            function pauseBelow() {
                if (window.innerWidth < settings.pauseBelow) { $multislider.addClass('ms-PAUSE'); }
                $(window).on('resize', function () {
                    if (window.innerWidth < settings.pauseBelow) {
                        $multislider.addClass('ms-PAUSE');
                    } else {
                        $multislider.removeClass('ms-PAUSE');
                    }
                });
            }
 
            // used if method is called after initialization
            function getStringArgs(str) {
                if (typeof $multislider.data(str) !== 'undefined') {
                    $multislider.data(str)();
                 } else {
                 } else {
                     $multislider.removeClass('ms-PAUSE');
                     console.error("Multislider currently only accepts the following methods: next, prev, pause, play");
                 }
                 }
             });
             }
        }
 
            // saves data object to DOM element
            function saveData() {
                $multislider.data({
                    "pause": function () { $multislider.addClass('ms-PAUSE'); },
                    "unPause": function () { $multislider.removeClass('ms-PAUSE'); },
                    "continuous": function () { $multislider.removeClass('ms-PAUSE'); continuousLeft(); },
                    "next": function () { overRidePause(singleLeft); },
                    "nextAll": function () { overRidePause(allLeft); },
                    "prev": function () { overRidePause(singleRight); },
                    "prevAll": function () { overRidePause(allRight); },
                    "settings": settings
                });
            }


        function pauseBelow(){
            // used when calling 'next', 'prev' methods
            if (window.innerWidth < settings.pauseBelow){ $multislider.addClass('ms-PAUSE'); }
            function overRidePause(animation) {
            $(window).on('resize',function(){
                if ($multislider.hasClass('ms-PAUSE')) {
                if (window.innerWidth < settings.pauseBelow){
                    $multislider.removeClass('ms-PAUSE');
                    animation();
                     $multislider.addClass('ms-PAUSE');
                     $multislider.addClass('ms-PAUSE');
                 } else {
                 } else {
                     $multislider.removeClass('ms-PAUSE');
                     animation();
                 }
                 }
            });
                 resetInterval();
        }
 
        // used if method is called after initialization
        function getStringArgs(str){
            if (typeof $multislider.data(str) !== 'undefined'){
                $multislider.data(str)();
            } else {
                 console.error("Multislider currently only accepts the following methods: next, prev, pause, play");
             }
             }
        }
        // saves data object to DOM element
        function saveData(){
            $multislider.data({
                "pause":function(){ $multislider.addClass('ms-PAUSE'); },
                "unPause":function(){ $multislider.removeClass('ms-PAUSE'); },
                "continuous":function(){ $multislider.removeClass('ms-PAUSE'); continuousLeft(); },
                "next":function(){ overRidePause(singleLeft); },
                "nextAll":function(){ overRidePause(allLeft); },
                "prev":function(){ overRidePause(singleRight); },
                "prevAll":function(){ overRidePause(allRight); },
                "settings":settings
            });
        }


        // used when calling 'next', 'prev' methods
            // CRITICAL for items to be perfectly side-by-side without floating them
        function overRidePause(animation){
            function minifyContent() {
            if ($multislider.hasClass('ms-PAUSE')){
                $msContent.contents().filter(function () {
                $multislider.removeClass('ms-PAUSE');
                    return (this.nodeType == 3 && !/\S/.test(this.nodeValue));
                 animation();
                 }).remove();
                $multislider.addClass('ms-PAUSE');
            } else {
                animation();
             }
             }
            resetInterval();
        }


        // CRITICAL for items to be perfectly side-by-side without floating them
            // updated options with defaults, measure slide widths for animation calculations, carry out setting implementations
        function minifyContent(){
             function createSettings() {
             $msContent.contents().filter(function(){
                 defaults = settings || {
                 return (this.nodeType == 3 && !/\S/.test(this.nodeValue));
                    continuous: false, // endless scrolling with no pauses
            }).remove();
                    slideAll: false, // slide all visible slides, or just one at a time
        }
                    // autoSlide: true, // DEPRECATED
                    interval: 2000, // time bewteen slide animation, 0 or 'false' prevents auto-sliding
                    duration: 500,     // duration of slide animation
                    hoverPause: true, // pause slideshow on hover
                    pauseAbove: null,  // pause above specified screen width
                    pauseBelow: null    // pause below specified screen width
                };


        // updated options with defaults, measure slide widths for animation calculations, carry out setting implementations
                settings = $.extend({}, defaults, data);
        function createSettings() {
            defaults = settings || {
    continuous: false, // endless scrolling with no pauses
    slideAll: false, // slide all visible slides, or just one at a time
    // autoSlide: true, // DEPRECATED
    interval: 2000, // time bewteen slide animation, 0 or 'false' prevents auto-sliding
    duration: 500,     // duration of slide animation
    hoverPause: true, // pause slideshow on hover
                pauseAbove: null,  // pause above specified screen width
                pauseBelow: null    // pause below specified screen width
    };


    settings = $.extend({},defaults,data);
                findItemWidth();
                animateDuration = settings.duration;


            findItemWidth();
                if (settings.hoverPause) { pauseHover(); }
            animateDuration = settings.duration;
                // autoSlide is being depricated | Feb 2 2017
                if (settings.continuous !== true && settings.interval !== 0 && settings.interval !== false && settings.autoSlide !== false) { autoSlide(); }
                if (settings.pauseAbove !== null && typeof settings.pauseAbove === 'number') { pauseAbove(); }
                if (settings.pauseBelow !== null && typeof settings.pauseBelow === 'number') { pauseBelow(); }
            }


             if (settings.hoverPause){pauseHover();}
             // determine between single and multi-slide animations
            // autoSlide is being depricated | Feb 2 2017
            function selectAnimations() {
            if (settings.continuous !== true && settings.interval !== 0 && settings.interval !== false && settings.autoSlide !== false){autoSlide();}
                if (settings.continuous) {
            if (settings.pauseAbove !== null && typeof settings.pauseAbove === 'number'){ pauseAbove(); }
                    settings.autoSlide = false;
            if (settings.pauseBelow !== null && typeof settings.pauseBelow === 'number'){ pauseBelow(); }
                    continuousLeft();
        }
                } else if (settings.slideAll) {
                    animateSlideRight = $multislider.data('prevAll');
                    animateSlideLeft = $multislider.data('nextAll');
                } else {
                    animateSlideRight = $multislider.data('prev');
                    animateSlideLeft = $multislider.data('next');
                }
            }


        // determine between single and multi-slide animations
            // measure slide width, for animation calculations
        function selectAnimations () {
            function findItemWidth() {
            if (settings.continuous){
                reTargetSlides();
                 settings.autoSlide = false;
                 animateDistance = $imgFirst.width();
                 continuousLeft();
                 var left = parseInt($msContent.find('.nmpIndexSliderItem:first').css('padding-left'));
            } else if (settings.slideAll){
                 var right = parseInt($msContent.find('.nmpIndexSliderItem:first').css('padding-right'));
                animateSlideRight = $multislider.data('prevAll');
                 if (left !== 0) { animateDistance += left; }
                 animateSlideLeft = $multislider.data('nextAll');
                if (right !== 0) { animateDistance += right; }
            } else {
                animateSlideRight = $multislider.data('prev');
                 animateSlideLeft = $multislider.data('next');
             }
             }
        }


        // measure slide width, for animation calculations
            // recursive auto-slide loop
        function findItemWidth(){
            function autoSlide() {
            reTargetSlides();
                autoSlideInterval = setInterval(function () {
            animateDistance = $imgFirst.width();
                    if (!$multislider.hasClass('ms-PAUSE')) {
            var left = parseInt($msContent.find('.item:first').css('padding-left'));
                        animateSlideLeft();
            var right = parseInt($msContent.find('.item:first').css('padding-right'));
                    }
            if (left !== 0){animateDistance += left;}
                }, settings.interval);
            if (right !== 0){animateDistance += right;}
            }
        }


        // recursive auto-slide loop
             function resetInterval() {
        function autoSlide() {
                 if (settings.interval !== 0 && settings.interval !== false && settings.continuous !== true) {
             autoSlideInterval = setInterval(function(){
                    clearInterval(autoSlideInterval);
                 if (!$multislider.hasClass('ms-PAUSE')){
                     autoSlide();
                     animateSlideLeft();
                 }
                 }
             }, settings.interval);
             }
        }


        function resetInterval() {
            // target first and last visible slides before each new animation
            if (settings.interval !== 0 && settings.interval !== false && settings.continuous !== true){
            function reTargetSlides() {
                clearInterval(autoSlideInterval);
                $imgFirst = $msContent.find('.nmpIndexSliderItem:first');
                 autoSlide();
                 $imgLast = $msContent.find('.nmpIndexSliderItem:last');
             }
             }
        }
        // target first and last visible slides before each new animation
        function reTargetSlides(){
            $imgFirst = $msContent.find('.item:first');
            $imgLast = $msContent.find('.item:last');
        }


        // prevent animation firing if multislider is currently animating
            // prevent animation firing if multislider is currently animating
        // all animations pass through this function, which emits events, and adds/removes animating class
            // all animations pass through this function, which emits events, and adds/removes animating class
        function isItAnimating(callback){
            function isItAnimating(callback) {
if(!$multislider.hasClass('ms-animating') &&
                if (!$multislider.hasClass('ms-animating') &&
              !$multislider.hasClass('ms-HOVER') &&
                    !$multislider.hasClass('ms-HOVER') &&
              !$multislider.hasClass('ms-PAUSE')){
                    !$multislider.hasClass('ms-PAUSE')) {
                     $multislider.trigger('ms.before.animate'); // event!
                     $multislider.trigger('ms.before.animate'); // event!
                     $multislider.addClass('ms-animating');
                     $multislider.addClass('ms-animating');
                     callback();    //callback is animation
                     callback();    //callback is animation
}
                }
}
            }


        // update multislider at the end of each animation
            // update multislider at the end of each animation
        function doneAnimating() {
            function doneAnimating() {
if($multislider.hasClass('ms-animating')){
                if ($multislider.hasClass('ms-animating')) {
$multislider.removeClass('ms-animating');
                    $multislider.removeClass('ms-animating');
                $multislider.trigger('ms.after.animate'); // event!
                    $multislider.trigger('ms.after.animate'); // event!
                }
             }
             }
}


        // logic for pausing and restarting the multislider on hover
            // logic for pausing and restarting the multislider on hover
        function pauseHover() {
            function pauseHover() {
            // continuous scroll pause slightly different
                // continuous scroll pause slightly different
            if(settings.continuous){
                if (settings.continuous) {
$msContent.on('mouseover',function(){
                    $msContent.on('mouseover', function () {
doneAnimating();
                        doneAnimating();
$msContent.children('.item:first').stop();
                        $msContent.children('.nmpIndexSliderItem:first').stop();
});
                    });
$msContent.on('mouseout',function(){
                    $msContent.on('mouseout', function () {
continuousLeft();
                        continuousLeft();
});
                    });
} else {
                } else {
            // regular animation pausing
                    // regular animation pausing
                $msContent.on('mouseover',function(){
                    $msContent.on('mouseover', function () {
                    $multislider.addClass('ms-HOVER');
                        $multislider.addClass('ms-HOVER');
                });
                    });
                $msContent.on('mouseout',function(){
                    $msContent.on('mouseout', function () {
                    $multislider.removeClass('ms-HOVER');
                        $multislider.removeClass('ms-HOVER');
                });
                    });
}
                }
        }
            }


        // calculate remaining animation, if stopped mid-animation and resuming
            // calculate remaining animation, if stopped mid-animation and resuming
        function midAnimateResume(){
            function midAnimateResume() {
            animateDuration = settings.duration;
                animateDuration = settings.duration;
            var currentMargin = parseFloat($msContent.find('.item:first').css("margin-left"));
                var currentMargin = parseFloat($msContent.find('.nmpIndexSliderItem:first').css("margin-left"));
            var percentageRemaining = 1-(currentMargin/-(animateDistance-1));
                var percentageRemaining = 1 - (currentMargin / -(animateDistance - 1));
            animateDuration = percentageRemaining*animateDuration;
                animateDuration = percentageRemaining * animateDuration;
        }
            }


        // determine how many slides need to be moved over, if slideAll is true
            // determine how many slides need to be moved over, if slideAll is true
        function calcNumSlidesToMove(){
            function calcNumSlidesToMove() {
            totalWidth = $msContent.width();           // total width of .MS-content containing all visible slides
                totalWidth = $msContent.width();           // total width of .nmpIndexSliderContent containing all visible slides
    numberVisibleSlides = Math.floor(totalWidth/animateDistance);    // number of (visible) slides needed to be moved in each animation
                numberVisibleSlides = Math.floor(totalWidth / animateDistance);    // number of (visible) slides needed to be moved in each animation
        }
            }




        // ==== ANIMATION FUNCTIONS ====
            // ==== ANIMATION FUNCTIONS ====
        // =============================
            // =============================
        function continuousLeft () {
            function continuousLeft() {
            isItAnimating(function(){
                isItAnimating(function () {
                reTargetSlides();
                    reTargetSlides();
                midAnimateResume();
                    midAnimateResume();
                $imgFirst.animate(
                    $imgFirst.animate(
                    {marginLeft: -(animateDistance+1)},
                        { marginLeft: -(animateDistance + 1) },
                    {
                        {
                        duration: animateDuration,
                            duration: animateDuration,
                        easing: "linear",
                            easing: "linear",
                        complete: function(){
                            complete: function () {
                            $imgFirst.insertAfter($imgLast).removeAttr("style");
                                $imgFirst.insertAfter($imgLast).removeAttr("style");
                            doneAnimating();
                                doneAnimating();
                            continuousLeft ();
                                continuousLeft();
                            }
                         }
                         }
                     }
                     );
                );
                });
            });
            }
        }


        function allLeft(){
            function allLeft() {
            isItAnimating(function(){
                isItAnimating(function () {
                reTargetSlides();
                    reTargetSlides();
                calcNumSlidesToMove();
                    calcNumSlidesToMove();


                var $clonedItemSet = $msContent.children('.item').clone();
                    var $clonedItemSet = $msContent.children('.nmpIndexSliderItem').clone();
                var filteredClones = $clonedItemSet.splice(0, numberVisibleSlides);
                    var filteredClones = $clonedItemSet.splice(0, numberVisibleSlides);


                $msContent.append(filteredClones);
                    $msContent.append(filteredClones);


                $imgFirst.animate(
                    $imgFirst.animate(
                    {marginLeft: -totalWidth}, {
                        { marginLeft: -totalWidth }, {
                         duration: animateDuration,
                         duration: animateDuration,
                         easing: "swing",
                         easing: "swing",
                         complete: function(){
                         complete: function () {
                             $($msContent.children('.item').splice(0,numberVisibleSlides)).remove();
                             $($msContent.children('.nmpIndexSliderItem').splice(0, numberVisibleSlides)).remove();
                             doneAnimating();
                             doneAnimating();
                         }
                         }
                     }
                     }
                );
                    );
            });
                });
        }
            }


        function allRight() {
            function allRight() {
            isItAnimating(function(){
                isItAnimating(function () {
                reTargetSlides();
                    reTargetSlides();
                calcNumSlidesToMove();
                    calcNumSlidesToMove();


                var numberTotalSlides = $msContent.children('.item').length;
                    var numberTotalSlides = $msContent.children('.nmpIndexSliderItem').length;
                var $clonedItemSet = $msContent.children('.item').clone();
                    var $clonedItemSet = $msContent.children('.nmpIndexSliderItem').clone();
                var filteredClones = $clonedItemSet.splice(numberTotalSlides-numberVisibleSlides,numberTotalSlides);
                    var filteredClones = $clonedItemSet.splice(numberTotalSlides - numberVisibleSlides, numberTotalSlides);


                $($(filteredClones)[0]).css('margin-left',-totalWidth); // give clone array negative margin before preppending
                    $($(filteredClones)[0]).css('margin-left', -totalWidth); // give clone array negative margin before preppending
                $msContent.prepend(filteredClones);
                    $msContent.prepend(filteredClones);


                reTargetSlides();
                    reTargetSlides();


                $imgFirst.animate(
                    $imgFirst.animate(
                    {
                        {
                        marginLeft: 0
                            marginLeft: 0
                    }, {
                        }, {
                         duration: animateDuration,
                         duration: animateDuration,
                         easing: "swing",
                         easing: "swing",
                         complete: function(){
                         complete: function () {
                             numberTotalSlides = $msContent.find('.item').length;
                             numberTotalSlides = $msContent.find('nmpIndexSliderItem').length;
                             $($msContent.find('.item').splice(numberTotalSlides-numberVisibleSlides,numberTotalSlides)).remove();
                             $($msContent.find('.nmpIndexSliderItem').splice(numberTotalSlides - numberVisibleSlides, numberTotalSlides)).remove();
                             $imgFirst.removeAttr('style');
                             $imgFirst.removeAttr('style');
                             doneAnimating();
                             doneAnimating();
                         }
                         }
                     }
                     }
                );
                    );
            });
                });
        }
            }


        function singleLeft(){
            function singleLeft() {
            isItAnimating(function(){
                isItAnimating(function () {
                reTargetSlides();
                    reTargetSlides();
                $imgFirst.animate(
                    $imgFirst.animate(
                    {
                        {
                        marginLeft: -animateDistance
                            marginLeft: -animateDistance
                    }, {
                        }, {
                         duration: animateDuration,
                         duration: animateDuration,
                         easing: "swing",
                         easing: "swing",
                         complete: function(){
                         complete: function () {
                             $imgFirst.detach().removeAttr('style').appendTo($msContent);
                             $imgFirst.detach().removeAttr('style').appendTo($msContent);
                             doneAnimating();
                             doneAnimating();
                         }
                         }
                     }
                     }
                );
                    );
            });
                });
        }
            }


        function singleRight(){
            function singleRight() {
            isItAnimating(function(){
                isItAnimating(function () {
                reTargetSlides();
                    reTargetSlides();
                $imgLast.css('margin-left',-animateDistance).prependTo($msContent);
                    $imgLast.css('margin-left', -animateDistance).prependTo($msContent);
                $imgLast.animate(
                    $imgLast.animate(
                    {
                        {
                        marginLeft: 0
                            marginLeft: 0
                    }, {
                        }, {
                         duration: animateDuration,
                         duration: animateDuration,
                         easing: "swing",
                         easing: "swing",
                         complete: function(){
                         complete: function () {
                             $imgLast.removeAttr("style");
                             $imgLast.removeAttr("style");
                             doneAnimating();
                             doneAnimating();
                         }
                         }
                     }
                     }
                );
                    );
            });
                });
        }  
            }
        return $multislider;
            return $multislider;
    }
        }
})(jQuery);
    })(jQuery);




     $('#exampleSlider').multislider({
     $('#nmpIndexSliderContainer').multislider({
         interval: 4000,
         interval: 4000,
         slideAll: true,
         slideAll: true,
         duration: 1500
         duration: 1500
     });
     });
console.log('slider.js2');
});
});

גרסה מ־17:41, 4 בפברואר 2021

/*
*   MultiSlider | MIT License
*
*   Copyright (c) 2017 Trevor Blackman
*   http://www.multislider.info
*
*/
$(document).ready(function () {
    (function ($) {

        // ==== BEGINS PLUGGIN ====
        $.fn.multislider = function (data, callback) {

            // ==== CACHE DOM ====
            var $multislider = $(this);
            var $msContent = $multislider.find('.nmpIndexSliderContent');
            var $msRight = $multislider.find('button.nmpIndexSliderButtonRight');
            var $msLeft = $multislider.find('button.nmpIndexSliderButtonLeft');
            var $imgFirst = $msContent.find('.nmpIndexSliderItem:first');

            // === DETERMINE ACTION ====
            // string = method | object or nothing is to initialize
            if (typeof data === 'string') {
                getStringArgs(data);
                return $multislider;
            } else if (typeof data === 'object' || typeof data === 'undefined') {
                init();
            }

            // ==== PLUGGIN VARIABLES ====
            var $imgLast,
                totalWidth,
                numberVisibleSlides,
                animateDistance,
                animateSlideRight,
                animateSlideLeft,
                defaults,
                settings,
                animateDuration,
                autoSlideInterval;

            // = INITIALIZE =
            function init() {
                minifyContent();        // minify html
                createSettings();       // merge defaults and user provided options
                saveData();             // add data object to DOM el with reference to animation functions, allows for methods to reference at any time
                selectAnimations();     // choose default animation
            }


            // ==== EVENT HANDLERS ====
            $msRight.on('click', animateSlideLeft);
            $msLeft.on('click', animateSlideRight);
            $multislider.on('click', '.nmpIndexSliderButtonRight, .nmpIndexSliderButtonLeft', resetInterval);
            $(window).on('resize', findItemWidth);


            // ==== FUNCTIONS (for days...) ====
            // =================================

            function pauseAbove() {
                if (window.innerWidth > settings.pauseAbove) { $multislider.addClass('ms-PAUSE'); }
                $(window).on('resize', function () {
                    if (window.innerWidth > settings.pauseAbove) {
                        $multislider.addClass('ms-PAUSE');
                    } else {
                        $multislider.removeClass('ms-PAUSE');
                    }
                });
            }

            function pauseBelow() {
                if (window.innerWidth < settings.pauseBelow) { $multislider.addClass('ms-PAUSE'); }
                $(window).on('resize', function () {
                    if (window.innerWidth < settings.pauseBelow) {
                        $multislider.addClass('ms-PAUSE');
                    } else {
                        $multislider.removeClass('ms-PAUSE');
                    }
                });
            }

            // used if method is called after initialization
            function getStringArgs(str) {
                if (typeof $multislider.data(str) !== 'undefined') {
                    $multislider.data(str)();
                } else {
                    console.error("Multislider currently only accepts the following methods: next, prev, pause, play");
                }
            }

            // saves data object to DOM element
            function saveData() {
                $multislider.data({
                    "pause": function () { $multislider.addClass('ms-PAUSE'); },
                    "unPause": function () { $multislider.removeClass('ms-PAUSE'); },
                    "continuous": function () { $multislider.removeClass('ms-PAUSE'); continuousLeft(); },
                    "next": function () { overRidePause(singleLeft); },
                    "nextAll": function () { overRidePause(allLeft); },
                    "prev": function () { overRidePause(singleRight); },
                    "prevAll": function () { overRidePause(allRight); },
                    "settings": settings
                });
            }

            // used when calling 'next', 'prev' methods
            function overRidePause(animation) {
                if ($multislider.hasClass('ms-PAUSE')) {
                    $multislider.removeClass('ms-PAUSE');
                    animation();
                    $multislider.addClass('ms-PAUSE');
                } else {
                    animation();
                }
                resetInterval();
            }

            // CRITICAL for items to be perfectly side-by-side without floating them
            function minifyContent() {
                $msContent.contents().filter(function () {
                    return (this.nodeType == 3 && !/\S/.test(this.nodeValue));
                }).remove();
            }

            // updated options with defaults, measure slide widths for animation calculations, carry out setting implementations
            function createSettings() {
                defaults = settings || {
                    continuous: false,	// endless scrolling with no pauses
                    slideAll: false,	// slide all visible slides, or just one at a time
                    // autoSlide: true,	// DEPRECATED
                    interval: 2000,		// time bewteen slide animation, 0 or 'false' prevents auto-sliding
                    duration: 500,	    // duration of slide animation
                    hoverPause: true,	// pause slideshow on hover
                    pauseAbove: null,   // pause above specified screen width
                    pauseBelow: null    // pause below specified screen width
                };

                settings = $.extend({}, defaults, data);

                findItemWidth();
                animateDuration = settings.duration;

                if (settings.hoverPause) { pauseHover(); }
                // autoSlide is being depricated | Feb 2 2017
                if (settings.continuous !== true && settings.interval !== 0 && settings.interval !== false && settings.autoSlide !== false) { autoSlide(); }
                if (settings.pauseAbove !== null && typeof settings.pauseAbove === 'number') { pauseAbove(); }
                if (settings.pauseBelow !== null && typeof settings.pauseBelow === 'number') { pauseBelow(); }
            }

            // determine between single and multi-slide animations
            function selectAnimations() {
                if (settings.continuous) {
                    settings.autoSlide = false;
                    continuousLeft();
                } else if (settings.slideAll) {
                    animateSlideRight = $multislider.data('prevAll');
                    animateSlideLeft = $multislider.data('nextAll');
                } else {
                    animateSlideRight = $multislider.data('prev');
                    animateSlideLeft = $multislider.data('next');
                }
            }

            // measure slide width, for animation calculations
            function findItemWidth() {
                reTargetSlides();
                animateDistance = $imgFirst.width();
                var left = parseInt($msContent.find('.nmpIndexSliderItem:first').css('padding-left'));
                var right = parseInt($msContent.find('.nmpIndexSliderItem:first').css('padding-right'));
                if (left !== 0) { animateDistance += left; }
                if (right !== 0) { animateDistance += right; }
            }

            // recursive auto-slide loop
            function autoSlide() {
                autoSlideInterval = setInterval(function () {
                    if (!$multislider.hasClass('ms-PAUSE')) {
                        animateSlideLeft();
                    }
                }, settings.interval);
            }

            function resetInterval() {
                if (settings.interval !== 0 && settings.interval !== false && settings.continuous !== true) {
                    clearInterval(autoSlideInterval);
                    autoSlide();
                }
            }

            // target first and last visible slides before each new animation
            function reTargetSlides() {
                $imgFirst = $msContent.find('.nmpIndexSliderItem:first');
                $imgLast = $msContent.find('.nmpIndexSliderItem:last');
            }

            // prevent animation firing if multislider is currently animating
            // all animations pass through this function, which emits events, and adds/removes animating class
            function isItAnimating(callback) {
                if (!$multislider.hasClass('ms-animating') &&
                    !$multislider.hasClass('ms-HOVER') &&
                    !$multislider.hasClass('ms-PAUSE')) {
                    $multislider.trigger('ms.before.animate'); // event!
                    $multislider.addClass('ms-animating');
                    callback();    //callback is animation
                }
            }

            // update multislider at the end of each animation
            function doneAnimating() {
                if ($multislider.hasClass('ms-animating')) {
                    $multislider.removeClass('ms-animating');
                    $multislider.trigger('ms.after.animate'); // event!
                }
            }

            // logic for pausing and restarting the multislider on hover
            function pauseHover() {
                // continuous scroll pause slightly different
                if (settings.continuous) {
                    $msContent.on('mouseover', function () {
                        doneAnimating();
                        $msContent.children('.nmpIndexSliderItem:first').stop();
                    });
                    $msContent.on('mouseout', function () {
                        continuousLeft();
                    });
                } else {
                    // regular animation pausing
                    $msContent.on('mouseover', function () {
                        $multislider.addClass('ms-HOVER');
                    });
                    $msContent.on('mouseout', function () {
                        $multislider.removeClass('ms-HOVER');
                    });
                }
            }

            // calculate remaining animation, if stopped mid-animation and resuming
            function midAnimateResume() {
                animateDuration = settings.duration;
                var currentMargin = parseFloat($msContent.find('.nmpIndexSliderItem:first').css("margin-left"));
                var percentageRemaining = 1 - (currentMargin / -(animateDistance - 1));
                animateDuration = percentageRemaining * animateDuration;
            }

            // determine how many slides need to be moved over, if slideAll is true
            function calcNumSlidesToMove() {
                totalWidth = $msContent.width();						          // total width of .nmpIndexSliderContent containing all visible slides
                numberVisibleSlides = Math.floor(totalWidth / animateDistance);     // number of (visible) slides needed to be moved in each animation
            }


            // ==== ANIMATION FUNCTIONS ====
            // =============================
            function continuousLeft() {
                isItAnimating(function () {
                    reTargetSlides();
                    midAnimateResume();
                    $imgFirst.animate(
                        { marginLeft: -(animateDistance + 1) },
                        {
                            duration: animateDuration,
                            easing: "linear",
                            complete: function () {
                                $imgFirst.insertAfter($imgLast).removeAttr("style");
                                doneAnimating();
                                continuousLeft();
                            }
                        }
                    );
                });
            }

            function allLeft() {
                isItAnimating(function () {
                    reTargetSlides();
                    calcNumSlidesToMove();

                    var $clonedItemSet = $msContent.children('.nmpIndexSliderItem').clone();
                    var filteredClones = $clonedItemSet.splice(0, numberVisibleSlides);

                    $msContent.append(filteredClones);

                    $imgFirst.animate(
                        { marginLeft: -totalWidth }, {
                        duration: animateDuration,
                        easing: "swing",
                        complete: function () {
                            $($msContent.children('.nmpIndexSliderItem').splice(0, numberVisibleSlides)).remove();
                            doneAnimating();
                        }
                    }
                    );
                });
            }

            function allRight() {
                isItAnimating(function () {
                    reTargetSlides();
                    calcNumSlidesToMove();

                    var numberTotalSlides = $msContent.children('.nmpIndexSliderItem').length;
                    var $clonedItemSet = $msContent.children('.nmpIndexSliderItem').clone();
                    var filteredClones = $clonedItemSet.splice(numberTotalSlides - numberVisibleSlides, numberTotalSlides);

                    $($(filteredClones)[0]).css('margin-left', -totalWidth); // give clone array negative margin before preppending
                    $msContent.prepend(filteredClones);

                    reTargetSlides();

                    $imgFirst.animate(
                        {
                            marginLeft: 0
                        }, {
                        duration: animateDuration,
                        easing: "swing",
                        complete: function () {
                            numberTotalSlides = $msContent.find('nmpIndexSliderItem').length;
                            $($msContent.find('.nmpIndexSliderItem').splice(numberTotalSlides - numberVisibleSlides, numberTotalSlides)).remove();
                            $imgFirst.removeAttr('style');
                            doneAnimating();
                        }
                    }
                    );
                });
            }

            function singleLeft() {
                isItAnimating(function () {
                    reTargetSlides();
                    $imgFirst.animate(
                        {
                            marginLeft: -animateDistance
                        }, {
                        duration: animateDuration,
                        easing: "swing",
                        complete: function () {
                            $imgFirst.detach().removeAttr('style').appendTo($msContent);
                            doneAnimating();
                        }
                    }
                    );
                });
            }

            function singleRight() {
                isItAnimating(function () {
                    reTargetSlides();
                    $imgLast.css('margin-left', -animateDistance).prependTo($msContent);
                    $imgLast.animate(
                        {
                            marginLeft: 0
                        }, {
                        duration: animateDuration,
                        easing: "swing",
                        complete: function () {
                            $imgLast.removeAttr("style");
                            doneAnimating();
                        }
                    }
                    );
                });
            }
            return $multislider;
        }
    })(jQuery);


    $('#nmpIndexSliderContainer').multislider({
        interval: 4000,
        slideAll: true,
        duration: 1500
    });
});