|
|
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));
| |