Difference between revisions of "Template:Aachen/lightslider.js"

(Created page with "(function ($, undefined) { 'use strict'; var defaults = { item: 3, autoWidth: false, slideMove: 1, slideMargin: 10, addClass: '...")
 
(Blanked the page)
 
Line 1: Line 1:
(function ($, undefined) {
 
    'use strict';
 
    var defaults = {
 
        item: 3,
 
        autoWidth: false,
 
        slideMove: 1,
 
        slideMargin: 10,
 
        addClass: '',
 
        mode: 'slide',
 
        useCSS: true,
 
        cssEasing: 'ease', //'cubic-bezier(0.25, 0, 0.25, 1)',
 
        easing: 'linear', //'for jquery animation',//
 
        speed: 400, //ms'
 
        auto: false,
 
        pauseOnHover: false,
 
        loop: false,
 
        slideEndAnimation: true,
 
        pause: 2000,
 
        keyPress: false,
 
        controls: true,
 
        prevHtml: '',
 
        nextHtml: '',
 
        rtl: false,
 
        adaptiveHeight: false,
 
        vertical: false,
 
        verticalHeight: 500,
 
        vThumbWidth: 100,
 
        thumbItem: 3,
 
        pager: true,
 
        gallery: false,
 
        galleryMargin: 10,
 
        thumbMargin: 10,
 
        currentPagerPosition: 'middle',
 
        enableTouch: true,
 
        enableDrag: true,
 
        freeMove: true,
 
        swipeThreshold: 40,
 
        responsive: [],
 
        /* jshint ignore:start */
 
        onBeforeStart: function ($el) {},
 
        onSliderLoad: function ($el) {},
 
        onBeforeSlide: function ($el, scene) {},
 
        onAfterSlide: function ($el, scene) {},
 
        onBeforeNextSlide: function ($el, scene) {},
 
        onBeforePrevSlide: function ($el, scene) {}
 
        /* jshint ignore:end */
 
    };
 
    $.fn.lightSlider = function (options) {
 
        if (this.length === 0) {
 
            return this;
 
        }
 
  
        if (this.length > 1) {
 
            this.each(function () {
 
                $(this).lightSlider(options);
 
            });
 
            return this;
 
        }
 
 
        var plugin = {},
 
            settings = $.extend(true, {}, defaults, options),
 
            settingsTemp = {},
 
            $el = this;
 
        plugin.$el = this;
 
 
        if (settings.mode === 'fade') {
 
            settings.vertical = false;
 
        }
 
        var $children = $el.children(),
 
            windowW = $(window).width(),
 
            breakpoint = null,
 
            resposiveObj = null,
 
            length = 0,
 
            w = 0,
 
            on = false,
 
            elSize = 0,
 
            $slide = '',
 
            scene = 0,
 
            property = (settings.vertical === true) ? 'height' : 'width',
 
            gutter = (settings.vertical === true) ? 'margin-bottom' : 'margin-right',
 
            slideValue = 0,
 
            pagerWidth = 0,
 
            slideWidth = 0,
 
            thumbWidth = 0,
 
            interval = null,
 
            isTouch = ('ontouchstart' in document.documentElement);
 
        var refresh = {};
 
 
        refresh.chbreakpoint = function () {
 
            windowW = $(window).width();
 
            if (settings.responsive.length) {
 
                var item;
 
                if (settings.autoWidth === false) {
 
                    item = settings.item;
 
                }
 
                if (windowW < settings.responsive[0].breakpoint) {
 
                    for (var i = 0; i < settings.responsive.length; i++) {
 
                        if (windowW < settings.responsive[i].breakpoint) {
 
                            breakpoint = settings.responsive[i].breakpoint;
 
                            resposiveObj = settings.responsive[i];
 
                        }
 
                    }
 
                }
 
                if (typeof resposiveObj !== 'undefined' && resposiveObj !== null) {
 
                    for (var j in resposiveObj.settings) {
 
                        if (resposiveObj.settings.hasOwnProperty(j)) {
 
                            if (typeof settingsTemp[j] === 'undefined' || settingsTemp[j] === null) {
 
                                settingsTemp[j] = settings[j];
 
                            }
 
                            settings[j] = resposiveObj.settings[j];
 
                        }
 
                    }
 
                }
 
                if (!$.isEmptyObject(settingsTemp) && windowW > settings.responsive[0].breakpoint) {
 
                    for (var k in settingsTemp) {
 
                        if (settingsTemp.hasOwnProperty(k)) {
 
                            settings[k] = settingsTemp[k];
 
                        }
 
                    }
 
                }
 
                if (settings.autoWidth === false) {
 
                    if (slideValue > 0 && slideWidth > 0) {
 
                        if (item !== settings.item) {
 
                            scene = Math.round(slideValue / ((slideWidth + settings.slideMargin) * settings.slideMove));
 
                        }
 
                    }
 
                }
 
            }
 
        };
 
 
        refresh.calSW = function () {
 
            if (settings.autoWidth === false) {
 
                slideWidth = (elSize - ((settings.item * (settings.slideMargin)) - settings.slideMargin)) / settings.item;
 
            }
 
        };
 
 
        refresh.calWidth = function (cln) {
 
            var ln = cln === true ? $slide.find('.lslide').length : $children.length;
 
            if (settings.autoWidth === false) {
 
                w = ln * (slideWidth + settings.slideMargin);
 
            } else {
 
                w = 0;
 
                for (var i = 0; i < ln; i++) {
 
                    w += (parseInt($children.eq(i).width()) + settings.slideMargin);
 
                }
 
            }
 
            return w;
 
        };
 
        plugin = {
 
            doCss: function () {
 
                var support = function () {
 
                    var transition = ['transition', 'MozTransition', 'WebkitTransition', 'OTransition', 'msTransition', 'KhtmlTransition'];
 
                    var root = document.documentElement;
 
                    for (var i = 0; i < transition.length; i++) {
 
                        if (transition[i] in root.style) {
 
                            return true;
 
                        }
 
                    }
 
                };
 
                if (settings.useCSS && support()) {
 
                    return true;
 
                }
 
                return false;
 
            },
 
            keyPress: function () {
 
                if (settings.keyPress) {
 
                    $(document).on('keyup.lightslider', function (e) {
 
                        if (!$(':focus').is('input, textarea')) {
 
                            if (e.preventDefault) {
 
                                e.preventDefault();
 
                            } else {
 
                                e.returnValue = false;
 
                            }
 
                            if (e.keyCode === 37) {
 
                                $el.goToPrevSlide();
 
                            } else if (e.keyCode === 39) {
 
                                $el.goToNextSlide();
 
                            }
 
                        }
 
                    });
 
                }
 
            },
 
            controls: function () {
 
                if (settings.controls) {
 
                    $el.after('<div class="lSAction"><a class="lSPrev">' + settings.prevHtml + '</a><a class="lSNext">' + settings.nextHtml + '</a></div>');
 
                    if (!settings.autoWidth) {
 
                        if (length <= settings.item) {
 
                            $slide.find('.lSAction').hide();
 
                        }
 
                    } else {
 
                        if (refresh.calWidth(false) < elSize) {
 
                            $slide.find('.lSAction').hide();
 
                        }
 
                    }
 
                    $slide.find('.lSAction a').on('click', function (e) {
 
                        if (e.preventDefault) {
 
                            e.preventDefault();
 
                        } else {
 
                            e.returnValue = false;
 
                        }
 
                        if ($(this).attr('class') === 'lSPrev') {
 
                            $el.goToPrevSlide();
 
                        } else {
 
                            $el.goToNextSlide();
 
                        }
 
                        return false;
 
                    });
 
                }
 
            },
 
            initialStyle: function () {
 
                var $this = this;
 
                if (settings.mode === 'fade') {
 
                    settings.autoWidth = false;
 
                    settings.slideEndAnimation = false;
 
                }
 
                if (settings.auto) {
 
                    settings.slideEndAnimation = false;
 
                }
 
                if (settings.autoWidth) {
 
                    settings.slideMove = 1;
 
                    settings.item = 1;
 
                }
 
                if (settings.loop) {
 
                    settings.slideMove = 1;
 
                    settings.freeMove = false;
 
                }
 
                settings.onBeforeStart.call(this, $el);
 
                refresh.chbreakpoint();
 
                $el.addClass('lightSlider').wrap('<div class="lSSlideOuter ' + settings.addClass + '"><div class="lSSlideWrapper"></div></div>');
 
                $slide = $el.parent('.lSSlideWrapper');
 
                if (settings.rtl === true) {
 
                    $slide.parent().addClass('lSrtl');
 
                }
 
                if (settings.vertical) {
 
                    $slide.parent().addClass('vertical');
 
                    elSize = settings.verticalHeight;
 
                    $slide.css('height', elSize + 'px');
 
                } else {
 
                    elSize = $el.outerWidth();
 
                }
 
                $children.addClass('lslide');
 
                if (settings.loop === true && settings.mode === 'slide') {
 
                    refresh.calSW();
 
                    refresh.clone = function () {
 
                        if (refresh.calWidth(true) > elSize) {
 
                            /**/
 
                            var tWr = 0,
 
                                tI = 0;
 
                            for (var k = 0; k < $children.length; k++) {
 
                                tWr += (parseInt($el.find('.lslide').eq(k).width()) + settings.slideMargin);
 
                                tI++;
 
                                if (tWr >= (elSize + settings.slideMargin)) {
 
                                    break;
 
                                }
 
                            }
 
                            var tItem = settings.autoWidth === true ? tI : settings.item;
 
 
                            /**/
 
                            if (tItem < $el.find('.clone.left').length) {
 
                                for (var i = 0; i < $el.find('.clone.left').length - tItem; i++) {
 
                                    $children.eq(i).remove();
 
                                }
 
                            }
 
                            if (tItem < $el.find('.clone.right').length) {
 
                                for (var j = $children.length - 1; j > ($children.length - 1 - $el.find('.clone.right').length); j--) {
 
                                    scene--;
 
                                    $children.eq(j).remove();
 
                                }
 
                            }
 
                            /**/
 
                            for (var n = $el.find('.clone.right').length; n < tItem; n++) {
 
                                $el.find('.lslide').eq(n).clone().removeClass('lslide').addClass('clone right').appendTo($el);
 
                                scene++;
 
                            }
 
                            for (var m = $el.find('.lslide').length - $el.find('.clone.left').length; m > ($el.find('.lslide').length - tItem); m--) {
 
                                $el.find('.lslide').eq(m - 1).clone().removeClass('lslide').addClass('clone left').prependTo($el);
 
                            }
 
                            $children = $el.children();
 
                        } else {
 
                            if ($children.hasClass('clone')) {
 
                                $el.find('.clone').remove();
 
                                $this.move($el, 0);
 
                            }
 
                        }
 
                    };
 
                    refresh.clone();
 
                }
 
                refresh.sSW = function () {
 
                    length = $children.length;
 
                    if (settings.rtl === true && settings.vertical === false) {
 
                        gutter = 'margin-left';
 
                    }
 
                    if (settings.autoWidth === false) {
 
                        $children.css(property, slideWidth + 'px');
 
                    }
 
                    $children.css(gutter, settings.slideMargin + 'px');
 
                    w = refresh.calWidth(false);
 
                    $el.css(property, w + 'px');
 
                    if (settings.loop === true && settings.mode === 'slide') {
 
                        if (on === false) {
 
                            scene = $el.find('.clone.left').length;
 
                        }
 
                    }
 
                };
 
                refresh.calL = function () {
 
                    $children = $el.children();
 
                    length = $children.length;
 
                };
 
                if (this.doCss()) {
 
                    $slide.addClass('usingCss');
 
                }
 
                refresh.calL();
 
                if (settings.mode === 'slide') {
 
                    refresh.calSW();
 
                    refresh.sSW();
 
                    if (settings.loop === true) {
 
                        slideValue = $this.slideValue();
 
                        this.move($el, slideValue);
 
                    }
 
                    if (settings.vertical === false) {
 
                        this.setHeight($el, false);
 
                    }
 
 
                } else {
 
                    this.setHeight($el, true);
 
                    $el.addClass('lSFade');
 
                    if (!this.doCss()) {
 
                        $children.fadeOut(0);
 
                        $children.eq(scene).fadeIn(0);
 
                    }
 
                }
 
                if (settings.loop === true && settings.mode === 'slide') {
 
                    $children.eq(scene).addClass('active');
 
                } else {
 
                    $children.first().addClass('active');
 
                }
 
            },
 
            pager: function () {
 
                var $this = this;
 
                refresh.createPager = function () {
 
                    thumbWidth = (elSize - ((settings.thumbItem * (settings.thumbMargin)) - settings.thumbMargin)) / settings.thumbItem;
 
                    var $children = $slide.find('.lslide');
 
                    var length = $slide.find('.lslide').length;
 
                    var i = 0,
 
                        pagers = '',
 
                        v = 0;
 
                    for (i = 0; i < length; i++) {
 
                        if (settings.mode === 'slide') {
 
                            // calculate scene * slide value
 
                            if (!settings.autoWidth) {
 
                                v = i * ((slideWidth + settings.slideMargin) * settings.slideMove);
 
                            } else {
 
                                v += ((parseInt($children.eq(i).width()) + settings.slideMargin) * settings.slideMove);
 
                            }
 
                        }
 
                        var thumb = $children.eq(i * settings.slideMove).attr('data-thumb');
 
                        if (settings.gallery === true) {
 
                            pagers += '<li style="width:100%;' + property + ':' + thumbWidth + 'px;' + gutter + ':' + settings.thumbMargin + 'px"><a href="#"><img src="' + thumb + '" /></a></li>';
 
                        } else {
 
                            pagers += '<li><a href="#">' + (i + 1) + '</a></li>';
 
                        }
 
                        if (settings.mode === 'slide') {
 
                            if ((v) >= w - elSize - settings.slideMargin) {
 
                                i = i + 1;
 
                                var minPgr = 2;
 
                                if (settings.autoWidth) {
 
                                    pagers += '<li><a href="#">' + (i + 1) + '</a></li>';
 
                                    minPgr = 1;
 
                                }
 
                                if (i < minPgr) {
 
                                    pagers = null;
 
                                    $slide.parent().addClass('noPager');
 
                                } else {
 
                                    $slide.parent().removeClass('noPager');
 
                                }
 
                                break;
 
                            }
 
                        }
 
                    }
 
                    var $cSouter = $slide.parent();
 
                    $cSouter.find('.lSPager').html(pagers);
 
                    if (settings.gallery === true) {
 
                        if (settings.vertical === true) {
 
                            // set Gallery thumbnail width
 
                            $cSouter.find('.lSPager').css('width', settings.vThumbWidth + 'px');
 
                        }
 
                        pagerWidth = (i * (settings.thumbMargin + thumbWidth)) + 0.5;
 
                        $cSouter.find('.lSPager').css({
 
                            property: pagerWidth + 'px',
 
                            'transition-duration': settings.speed + 'ms'
 
                        });
 
                        if (settings.vertical === true) {
 
                            $slide.parent().css('padding-right', (settings.vThumbWidth + settings.galleryMargin) + 'px');
 
                        }
 
                        $cSouter.find('.lSPager').css(property, pagerWidth + 'px');
 
                    }
 
                    var $pager = $cSouter.find('.lSPager').find('li');
 
                    $pager.first().addClass('active');
 
                    $pager.on('click', function () {
 
                        if (settings.loop === true && settings.mode === 'slide') {
 
                            scene = scene + ($pager.index(this) - $cSouter.find('.lSPager').find('li.active').index());
 
                        } else {
 
                            scene = $pager.index(this);
 
                        }
 
                        $el.mode(false);
 
                        if (settings.gallery === true) {
 
                            $this.slideThumb();
 
                        }
 
                        return false;
 
                    });
 
                };
 
                if (settings.pager) {
 
                    var cl = 'lSpg';
 
                    if (settings.gallery) {
 
                        cl = 'lSGallery';
 
                    }
 
                    $slide.after('<ul class="lSPager ' + cl + '"></ul>');
 
                    var gMargin = (settings.vertical) ? 'margin-left' : 'margin-top';
 
                    $slide.parent().find('.lSPager').css(gMargin, settings.galleryMargin + 'px');
 
                    refresh.createPager();
 
                }
 
 
                setTimeout(function () {
 
                    refresh.init();
 
                }, 0);
 
            },
 
            setHeight: function (ob, fade) {
 
                var obj = null,
 
                    $this = this;
 
                if (settings.loop) {
 
                    obj = ob.children('.lslide ').first();
 
                } else {
 
                    obj = ob.children().first();
 
                }
 
                var setCss = function () {
 
                    var tH = obj.outerHeight(),
 
                        tP = 0,
 
                        tHT = tH;
 
                    if (fade) {
 
                        tH = 0;
 
                        tP = ((tHT) * 100) / elSize;
 
                    }
 
                    ob.css({
 
                        'height': tH + 'px',
 
                        'padding-bottom': tP + '%'
 
                    });
 
                };
 
                setCss();
 
                if (obj.find('img').length) {
 
                    if ( obj.find('img')[0].complete) {
 
                        setCss();
 
                        if (!interval) {
 
                            $this.auto();
 
                        } 
 
                    }else{
 
                        obj.find('img').load(function () {
 
                            setTimeout(function () {
 
                                setCss();
 
                                if (!interval) {
 
                                    $this.auto();
 
                                }
 
                            }, 100);
 
                        });
 
                    }
 
                }else{
 
                    if (!interval) {
 
                        $this.auto();
 
                    }
 
                }
 
            },
 
            active: function (ob, t) {
 
                if (this.doCss() && settings.mode === 'fade') {
 
                    $slide.addClass('on');
 
                }
 
                var sc = 0;
 
                if (scene * settings.slideMove < length) {
 
                    ob.removeClass('active');
 
                    if (!this.doCss() && settings.mode === 'fade' && t === false) {
 
                        ob.fadeOut(settings.speed);
 
                    }
 
                    if (t === true) {
 
                        sc = scene;
 
                    } else {
 
                        sc = scene * settings.slideMove;
 
                    }
 
                    //t === true ? sc = scene : sc = scene * settings.slideMove;
 
                    var l, nl;
 
                    if (t === true) {
 
                        l = ob.length;
 
                        nl = l - 1;
 
                        if (sc + 1 >= l) {
 
                            sc = nl;
 
                        }
 
                    }
 
                    if (settings.loop === true && settings.mode === 'slide') {
 
                        //t === true ? sc = scene - $el.find('.clone.left').length : sc = scene * settings.slideMove;
 
                        if (t === true) {
 
                            sc = scene - $el.find('.clone.left').length;
 
                        } else {
 
                            sc = scene * settings.slideMove;
 
                        }
 
                        if (t === true) {
 
                            l = ob.length;
 
                            nl = l - 1;
 
                            if (sc + 1 === l) {
 
                                sc = nl;
 
                            } else if (sc + 1 > l) {
 
                                sc = 0;
 
                            }
 
                        }
 
                    }
 
 
                    if (!this.doCss() && settings.mode === 'fade' && t === false) {
 
                        ob.eq(sc).fadeIn(settings.speed);
 
                    }
 
                    ob.eq(sc).addClass('active');
 
                } else {
 
                    ob.removeClass('active');
 
                    ob.eq(ob.length - 1).addClass('active');
 
                    if (!this.doCss() && settings.mode === 'fade' && t === false) {
 
                        ob.fadeOut(settings.speed);
 
                        ob.eq(sc).fadeIn(settings.speed);
 
                    }
 
                }
 
            },
 
            move: function (ob, v) {
 
                if (settings.rtl === true) {
 
                    v = -v;
 
                }
 
                if (this.doCss()) {
 
                    if (settings.vertical === true) {
 
                        ob.css({
 
                            'transform': 'translate3d(0px, ' + (-v) + 'px, 0px)',
 
                            '-webkit-transform': 'translate3d(0px, ' + (-v) + 'px, 0px)'
 
                        });
 
                    } else {
 
                        ob.css({
 
                            'transform': 'translate3d(' + (-v) + 'px, 0px, 0px)',
 
                            '-webkit-transform': 'translate3d(' + (-v) + 'px, 0px, 0px)',
 
                        });
 
                    }
 
                } else {
 
                    if (settings.vertical === true) {
 
                        ob.css('position', 'relative').animate({
 
                            top: -v + 'px'
 
                        }, settings.speed, settings.easing);
 
                    } else {
 
                        ob.css('position', 'relative').animate({
 
                            left: -v + 'px'
 
                        }, settings.speed, settings.easing);
 
                    }
 
                }
 
                var $thumb = $slide.parent().find('.lSPager').find('li');
 
                this.active($thumb, true);
 
            },
 
            fade: function () {
 
                this.active($children, false);
 
                var $thumb = $slide.parent().find('.lSPager').find('li');
 
                this.active($thumb, true);
 
            },
 
            slide: function () {
 
                var $this = this;
 
                refresh.calSlide = function () {
 
                    if (w > elSize) {
 
                        slideValue = $this.slideValue();
 
                        $this.active($children, false);
 
                        if ((slideValue) > w - elSize - settings.slideMargin) {
 
                            slideValue = w - elSize - settings.slideMargin;
 
                        } else if (slideValue < 0) {
 
                            slideValue = 0;
 
                        }
 
                        $this.move($el, slideValue);
 
                        if (settings.loop === true && settings.mode === 'slide') {
 
                            if (scene >= (length - ($el.find('.clone.left').length / settings.slideMove))) {
 
                                $this.resetSlide($el.find('.clone.left').length);
 
                            }
 
                            if (scene === 0) {
 
                                $this.resetSlide($slide.find('.lslide').length);
 
                            }
 
                        }
 
                    }
 
                };
 
                refresh.calSlide();
 
            },
 
            resetSlide: function (s) {
 
                var $this = this;
 
                $slide.find('.lSAction a').addClass('disabled');
 
                setTimeout(function () {
 
                    scene = s;
 
                    $slide.css('transition-duration', '0ms');
 
                    slideValue = $this.slideValue();
 
                    $this.active($children, false);
 
                    plugin.move($el, slideValue);
 
                    setTimeout(function () {
 
                        $slide.css('transition-duration', settings.speed + 'ms');
 
                        $slide.find('.lSAction a').removeClass('disabled');
 
                    }, 50);
 
                }, settings.speed + 100);
 
            },
 
            slideValue: function () {
 
                var _sV = 0;
 
                if (settings.autoWidth === false) {
 
                    _sV = scene * ((slideWidth + settings.slideMargin) * settings.slideMove);
 
                } else {
 
                    _sV = 0;
 
                    for (var i = 0; i < scene; i++) {
 
                        _sV += (parseInt($children.eq(i).width()) + settings.slideMargin);
 
                    }
 
                }
 
                return _sV;
 
            },
 
            slideThumb: function () {
 
                var position;
 
                switch (settings.currentPagerPosition) {
 
                case 'left':
 
                    position = 0;
 
                    break;
 
                case 'middle':
 
                    position = (elSize / 2) - (thumbWidth / 2);
 
                    break;
 
                case 'right':
 
                    position = elSize - thumbWidth;
 
                }
 
                var sc = scene - $el.find('.clone.left').length;
 
                var $pager = $slide.parent().find('.lSPager');
 
                if (settings.mode === 'slide' && settings.loop === true) {
 
                    if (sc >= $pager.children().length) {
 
                        sc = 0;
 
                    } else if (sc < 0) {
 
                        sc = $pager.children().length;
 
                    }
 
                }
 
                var thumbSlide = sc * ((thumbWidth + settings.thumbMargin)) - (position);
 
                if ((thumbSlide + elSize) > pagerWidth) {
 
                    thumbSlide = pagerWidth - elSize - settings.thumbMargin;
 
                }
 
                if (thumbSlide < 0) {
 
                    thumbSlide = 0;
 
                }
 
                this.move($pager, thumbSlide);
 
            },
 
            auto: function () {
 
                if (settings.auto) {
 
                    clearInterval(interval);
 
                    interval = setInterval(function () {
 
                        $el.goToNextSlide();
 
                    }, settings.pause);
 
                }
 
            },
 
            pauseOnHover: function(){
 
                var $this = this;
 
                if (settings.auto && settings.pauseOnHover) {
 
                    $slide.on('mouseenter', function(){
 
                        $(this).addClass('ls-hover');
 
                        $el.pause();
 
                        settings.auto = true;
 
                    });
 
                    $slide.on('mouseleave',function(){
 
                        $(this).removeClass('ls-hover');
 
                        if (!$slide.find('.lightSlider').hasClass('lsGrabbing')) {
 
                            $this.auto();
 
                        }
 
                    });
 
                }
 
            },
 
            touchMove: function (endCoords, startCoords) {
 
                $slide.css('transition-duration', '0ms');
 
                if (settings.mode === 'slide') {
 
                    var distance = endCoords - startCoords;
 
                    var swipeVal = slideValue - distance;
 
                    if ((swipeVal) >= w - elSize - settings.slideMargin) {
 
                        if (settings.freeMove === false) {
 
                            swipeVal = w - elSize - settings.slideMargin;
 
                        } else {
 
                            var swipeValT = w - elSize - settings.slideMargin;
 
                            swipeVal = swipeValT + ((swipeVal - swipeValT) / 5);
 
 
                        }
 
                    } else if (swipeVal < 0) {
 
                        if (settings.freeMove === false) {
 
                            swipeVal = 0;
 
                        } else {
 
                            swipeVal = swipeVal / 5;
 
                        }
 
                    }
 
                    this.move($el, swipeVal);
 
                }
 
            },
 
 
            touchEnd: function (distance) {
 
                $slide.css('transition-duration', settings.speed + 'ms');
 
                if (settings.mode === 'slide') {
 
                    var mxVal = false;
 
                    var _next = true;
 
                    slideValue = slideValue - distance;
 
                    if ((slideValue) > w - elSize - settings.slideMargin) {
 
                        slideValue = w - elSize - settings.slideMargin;
 
                        if (settings.autoWidth === false) {
 
                            mxVal = true;
 
                        }
 
                    } else if (slideValue < 0) {
 
                        slideValue = 0;
 
                    }
 
                    var gC = function (next) {
 
                        var ad = 0;
 
                        if (!mxVal) {
 
                            if (next) {
 
                                ad = 1;
 
                            }
 
                        }
 
                        if (!settings.autoWidth) {
 
                            var num = slideValue / ((slideWidth + settings.slideMargin) * settings.slideMove);
 
                            scene = parseInt(num) + ad;
 
                            if (slideValue >= (w - elSize - settings.slideMargin)) {
 
                                if (num % 1 !== 0) {
 
                                    scene++;
 
                                }
 
                            }
 
                        } else {
 
                            var tW = 0;
 
                            for (var i = 0; i < $children.length; i++) {
 
                                tW += (parseInt($children.eq(i).width()) + settings.slideMargin);
 
                                scene = i + ad;
 
                                if (tW >= slideValue) {
 
                                    break;
 
                                }
 
                            }
 
                        }
 
                    };
 
                    if (distance >= settings.swipeThreshold) {
 
                        gC(false);
 
                        _next = false;
 
                    } else if (distance <= -settings.swipeThreshold) {
 
                        gC(true);
 
                        _next = false;
 
                    }
 
                    $el.mode(_next);
 
                    this.slideThumb();
 
                } else {
 
                    if (distance >= settings.swipeThreshold) {
 
                        $el.goToPrevSlide();
 
                    } else if (distance <= -settings.swipeThreshold) {
 
                        $el.goToNextSlide();
 
                    }
 
                }
 
            },
 
 
 
 
            enableDrag: function () {
 
                var $this = this;
 
                if (!isTouch) {
 
                    var startCoords = 0,
 
                        endCoords = 0,
 
                        isDraging = false;
 
                    $slide.find('.lightSlider').addClass('lsGrab');
 
                    $slide.on('mousedown', function (e) {
 
                        if (w < elSize) {
 
                            if (w !== 0) {
 
                                return false;
 
                            }
 
                        }
 
                        if ($(e.target).attr('class') !== ('lSPrev') && $(e.target).attr('class') !== ('lSNext')) {
 
                            startCoords = (settings.vertical === true) ? e.pageY : e.pageX;
 
                            isDraging = true;
 
                            if (e.preventDefault) {
 
                                e.preventDefault();
 
                            } else {
 
                                e.returnValue = false;
 
                            }
 
                            // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723
 
                            $slide.scrollLeft += 1;
 
                            $slide.scrollLeft -= 1;
 
                            // *
 
                            $slide.find('.lightSlider').removeClass('lsGrab').addClass('lsGrabbing');
 
                            clearInterval(interval);
 
                        }
 
                    });
 
                    $(window).on('mousemove', function (e) {
 
                        if (isDraging) {
 
                            endCoords = (settings.vertical === true) ? e.pageY : e.pageX;
 
                            $this.touchMove(endCoords, startCoords);
 
                        }
 
                    });
 
                    $(window).on('mouseup', function (e) {
 
                        if (isDraging) {
 
                            $slide.find('.lightSlider').removeClass('lsGrabbing').addClass('lsGrab');
 
                            isDraging = false;
 
                            endCoords = (settings.vertical === true) ? e.pageY : e.pageX;
 
                            var distance = endCoords - startCoords;
 
                            if (Math.abs(distance) >= settings.swipeThreshold) {
 
                                $(window).on('click.ls', function (e) {
 
                                    if (e.preventDefault) {
 
                                        e.preventDefault();
 
                                    } else {
 
                                        e.returnValue = false;
 
                                    }
 
                                    e.stopImmediatePropagation();
 
                                    e.stopPropagation();
 
                                    $(window).off('click.ls');
 
                                });
 
                            }
 
 
                            $this.touchEnd(distance);
 
 
                        }
 
                    });
 
                }
 
            },
 
 
 
 
 
            enableTouch: function () {
 
                var $this = this;
 
                if (isTouch) {
 
                    var startCoords = {},
 
                        endCoords = {};
 
                    $slide.on('touchstart', function (e) {
 
                        endCoords = e.originalEvent.targetTouches[0];
 
                        startCoords.pageX = e.originalEvent.targetTouches[0].pageX;
 
                        startCoords.pageY = e.originalEvent.targetTouches[0].pageY;
 
                        clearInterval(interval);
 
                    });
 
                    $slide.on('touchmove', function (e) {
 
                        if (w < elSize) {
 
                            if (w !== 0) {
 
                                return false;
 
                            }
 
                        }
 
                        var orig = e.originalEvent;
 
                        endCoords = orig.targetTouches[0];
 
                        var xMovement = Math.abs(endCoords.pageX - startCoords.pageX);
 
                        var yMovement = Math.abs(endCoords.pageY - startCoords.pageY);
 
                        if (settings.vertical === true) {
 
                            if ((yMovement * 3) > xMovement) {
 
                                e.preventDefault();
 
                            }
 
                            $this.touchMove(endCoords.pageY, startCoords.pageY);
 
                        } else {
 
                            if ((xMovement * 3) > yMovement) {
 
                                e.preventDefault();
 
                            }
 
                            $this.touchMove(endCoords.pageX, startCoords.pageX);
 
                        }
 
 
                    });
 
                    $slide.on('touchend', function () {
 
                        if (w < elSize) {
 
                            if (w !== 0) {
 
                                return false;
 
                            }
 
                        }
 
                        var distance;
 
                        if (settings.vertical === true) {
 
                            distance = endCoords.pageY - startCoords.pageY;
 
                        } else {
 
                            distance = endCoords.pageX - startCoords.pageX;
 
                        }
 
                        $this.touchEnd(distance);
 
                    });
 
                }
 
            },
 
            build: function () {
 
                var $this = this;
 
                $this.initialStyle();
 
                if (this.doCss()) {
 
 
                    if (settings.enableTouch === true) {
 
                        $this.enableTouch();
 
                    }
 
                    if (settings.enableDrag === true) {
 
                        $this.enableDrag();
 
                    }
 
                }
 
 
                $(window).on('focus', function(){
 
                    $this.auto();
 
                });
 
               
 
                $(window).on('blur', function(){
 
                    clearInterval(interval);
 
                });
 
 
                $this.pager();
 
                $this.pauseOnHover();
 
                $this.controls();
 
                $this.keyPress();
 
            }
 
        };
 
        plugin.build();
 
        refresh.init = function () {
 
            refresh.chbreakpoint();
 
            if (settings.vertical === true) {
 
                if (settings.item > 1) {
 
                    elSize = settings.verticalHeight;
 
                } else {
 
                    elSize = $children.outerHeight();
 
                }
 
                $slide.css('height', elSize + 'px');
 
            } else {
 
                elSize = $slide.outerWidth();
 
            }
 
            if (settings.loop === true && settings.mode === 'slide') {
 
                refresh.clone();
 
            }
 
            refresh.calL();
 
            if (settings.mode === 'slide') {
 
                $el.removeClass('lSSlide');
 
            }
 
            if (settings.mode === 'slide') {
 
                refresh.calSW();
 
                refresh.sSW();
 
            }
 
            setTimeout(function () {
 
                if (settings.mode === 'slide') {
 
                    $el.addClass('lSSlide');
 
                }
 
            }, 1000);
 
            if (settings.pager) {
 
                refresh.createPager();
 
            }
 
            if (settings.adaptiveHeight === true && settings.vertical === false) {
 
                $el.css('height', $children.eq(scene).outerHeight(true));
 
            }
 
            if (settings.adaptiveHeight === false) {
 
                if (settings.mode === 'slide') {
 
                    if (settings.vertical === false) {
 
                        plugin.setHeight($el, false);
 
                    }else{
 
                        plugin.auto();
 
                    }
 
                } else {
 
                    plugin.setHeight($el, true);
 
                }
 
            }
 
            if (settings.gallery === true) {
 
                plugin.slideThumb();
 
            }
 
            if (settings.mode === 'slide') {
 
                plugin.slide();
 
            }
 
            if (settings.autoWidth === false) {
 
                if ($children.length <= settings.item) {
 
                    $slide.find('.lSAction').hide();
 
                } else {
 
                    $slide.find('.lSAction').show();
 
                }
 
            } else {
 
                if ((refresh.calWidth(false) < elSize) && (w !== 0)) {
 
                    $slide.find('.lSAction').hide();
 
                } else {
 
                    $slide.find('.lSAction').show();
 
                }
 
            }
 
        };
 
        $el.goToPrevSlide = function () {
 
            if (scene > 0) {
 
                settings.onBeforePrevSlide.call(this, $el, scene);
 
                scene--;
 
                $el.mode(false);
 
                if (settings.gallery === true) {
 
                    plugin.slideThumb();
 
                }
 
            } else {
 
                if (settings.loop === true) {
 
                    settings.onBeforePrevSlide.call(this, $el, scene);
 
                    if (settings.mode === 'fade') {
 
                        var l = (length - 1);
 
                        scene = parseInt(l / settings.slideMove);
 
                    }
 
                    $el.mode(false);
 
                    if (settings.gallery === true) {
 
                        plugin.slideThumb();
 
                    }
 
                } else if (settings.slideEndAnimation === true) {
 
                    $el.addClass('leftEnd');
 
                    setTimeout(function () {
 
                        $el.removeClass('leftEnd');
 
                    }, 400);
 
                }
 
            }
 
        };
 
        $el.goToNextSlide = function () {
 
            var nextI = true;
 
            if (settings.mode === 'slide') {
 
                var _slideValue = plugin.slideValue();
 
                nextI = _slideValue < w - elSize - settings.slideMargin;
 
            }
 
            if (((scene * settings.slideMove) < length - settings.slideMove) && nextI) {
 
                settings.onBeforeNextSlide.call(this, $el, scene);
 
                scene++;
 
                $el.mode(false);
 
                if (settings.gallery === true) {
 
                    plugin.slideThumb();
 
                }
 
            } else {
 
                if (settings.loop === true) {
 
                    settings.onBeforeNextSlide.call(this, $el, scene);
 
                    scene = 0;
 
                    $el.mode(false);
 
                    if (settings.gallery === true) {
 
                        plugin.slideThumb();
 
                    }
 
                } else if (settings.slideEndAnimation === true) {
 
                    $el.addClass('rightEnd');
 
                    setTimeout(function () {
 
                        $el.removeClass('rightEnd');
 
                    }, 400);
 
                }
 
            }
 
        };
 
        $el.mode = function (_touch) {
 
            if (settings.adaptiveHeight === true && settings.vertical === false) {
 
                $el.css('height', $children.eq(scene).outerHeight(true));
 
            }
 
            if (on === false) {
 
                if (settings.mode === 'slide') {
 
                    if (plugin.doCss()) {
 
                        $el.addClass('lSSlide');
 
                        if (settings.speed !== '') {
 
                            $slide.css('transition-duration', settings.speed + 'ms');
 
                        }
 
                        if (settings.cssEasing !== '') {
 
                            $slide.css('transition-timing-function', settings.cssEasing);
 
                        }
 
                    }
 
                } else {
 
                    if (plugin.doCss()) {
 
                        if (settings.speed !== '') {
 
                            $el.css('transition-duration', settings.speed + 'ms');
 
                        }
 
                        if (settings.cssEasing !== '') {
 
                            $el.css('transition-timing-function', settings.cssEasing);
 
                        }
 
                    }
 
                }
 
            }
 
            if (!_touch) {
 
                settings.onBeforeSlide.call(this, $el, scene);
 
            }
 
            if (settings.mode === 'slide') {
 
                plugin.slide();
 
            } else {
 
                plugin.fade();
 
            }
 
            if (!$slide.hasClass('ls-hover')) {
 
                plugin.auto();
 
            }
 
            setTimeout(function () {
 
                if (!_touch) {
 
                    settings.onAfterSlide.call(this, $el, scene);
 
                }
 
            }, settings.speed);
 
            on = true;
 
        };
 
        $el.play = function () {
 
            $el.goToNextSlide();
 
            settings.auto = true;
 
            plugin.auto();
 
        };
 
        $el.pause = function () {
 
            settings.auto = false;
 
            clearInterval(interval);
 
        };
 
        $el.refresh = function () {
 
            refresh.init();
 
        };
 
        $el.getCurrentSlideCount = function () {
 
            var sc = scene;
 
            if (settings.loop) {
 
                var ln = $slide.find('.lslide').length,
 
                    cl = $el.find('.clone.left').length;
 
                if (scene <= cl - 1) {
 
                    sc = ln + (scene - cl);
 
                } else if (scene >= (ln + cl)) {
 
                    sc = scene - ln - cl;
 
                } else {
 
                    sc = scene - cl;
 
                }
 
            }
 
            return sc + 1;
 
        };
 
        $el.getTotalSlideCount = function () {
 
            return $slide.find('.lslide').length;
 
        };
 
        $el.goToSlide = function (s) {
 
            if (settings.loop) {
 
                scene = (s + $el.find('.clone.left').length - 1);
 
            } else {
 
                scene = s;
 
            }
 
            $el.mode(false);
 
            if (settings.gallery === true) {
 
                plugin.slideThumb();
 
            }
 
        };
 
        $el.destroy = function () {
 
            if ($el.lightSlider) {
 
                $el.goToPrevSlide = function(){};
 
                $el.goToNextSlide = function(){};
 
                $el.mode = function(){};
 
                $el.play = function(){};
 
                $el.pause = function(){};
 
                $el.refresh = function(){};
 
                $el.getCurrentSlideCount = function(){};
 
                $el.getTotalSlideCount = function(){};
 
                $el.goToSlide = function(){};
 
                $el.lightSlider = null;
 
                refresh = {
 
                    init : function(){}
 
                };
 
                $el.parent().parent().find('.lSAction, .lSPager').remove();
 
                $el.removeClass('lightSlider lSFade lSSlide lsGrab lsGrabbing leftEnd right').removeAttr('style').unwrap().unwrap();
 
                $el.children().removeAttr('style');
 
                $children.removeClass('lslide active');
 
                $el.find('.clone').remove();
 
                $children = null;
 
                interval = null;
 
                on = false;
 
                scene = 0;
 
            }
 
 
        };
 
        setTimeout(function () {
 
            settings.onSliderLoad.call(this, $el);
 
        }, 10);
 
        $(window).on('resize orientationchange', function (e) {
 
            setTimeout(function () {
 
                if (e.preventDefault) {
 
                    e.preventDefault();
 
                } else {
 
                    e.returnValue = false;
 
                }
 
                refresh.init();
 
            }, 200);
 
        });
 
        return this;
 
    };
 
}(jQuery));
 

Latest revision as of 11:32, 25 August 2016