/* * LayerSlider * * (c) 2011-2014 George Krupa, John Gera & Kreatura Media * * Plugin web: //kreaturamedia.com/ * licenses: //codecanyon.net/licenses/ * simpleDoc: //www.docs.purethemes.net/sukces/layerslider/documentation/documentation.htm */ function lsShowNotice(lsobj,issue,ver){ var el; if( typeof lsobj == 'string' ){ el = jQuery('#'+lsobj); }else if( typeof lsobj == 'object' ){ el = lsobj; } var errorTitle, errorText; switch(issue){ case 'jquery': errorTitle = 'multiple jQuery issue'; errorText = 'It looks like that another plugin or your theme loads an extra copy of the jQuery library causing problems for LayerSlider to show your sliders. Please navigate on your WordPress admin area to the main page of LayerSlider and enable the "Put JS includes to body" option within the Troubleshooting & Advanced Settings box.'; break; case 'oldjquery': errorTitle = 'old jQuery issue'; errorText = 'It looks like you are using an old version ('+ver+') of the jQuery library. LayerSlider requires at least version 1.7.0 or newer. Please update jQuery to 1.10.x or higher. Important: Please do not use the jQuery Updater plugin on WordPress and do not update to 2.x version of jQuery because it is not compatible with older browsers like IE 7 & 8. You can read more about updating jQuery by clicking here.'; break; } el.addClass('ls-error'); el.append('

!

'); el.append('

LayerSlider: '+errorTitle+'

'); el.append('

'+errorText+'

'); } (function($) { $.fn.layerSlider = function( options ){ // IMPROVEMENT v4.1.0 Checking jQuery version // IMPROVEMENT v4.1.3 Changed required version from 1.7.2 to 1.7.0 var reqVer = '1.7.0'; var curVer = $.fn.jquery; var el = $(this); var checkVersions = function(v1,v2){ var v1parts = v1.split('.'); var v2parts = v2.split('.'); for (var i = 0; i < v1parts.length; ++i) { if (v2parts.length == i) { return false; } if(parseInt(v1parts[i]) == parseInt(v2parts[i])){ continue; }else if (parseInt(v1parts[i]) > parseInt(v2parts[i])){ return false; }else{ return true; } } if (v1parts.length != v2parts.length) { return true; } return true; }; if( !checkVersions('1.8.0',curVer) ){ el.addClass('ls-norotate'); } // Initializing if jQuery version is greater than 1.7.0 if( !checkVersions(reqVer,curVer) ){ lsShowNotice( el, 'oldjquery', curVer ); }else{ if( (typeof(options)).match('object|undefined') ){ return this.each(function(i){ new layerSlider(this, options); }); }else{ if( options == 'data' ){ var lsData = $(this).data('LayerSlider').g; if( lsData ){ return lsData; } }else{ return this.each(function(i){ // Control functions: prev, next, start, stop & change var lsData = $(this).data('LayerSlider'); if( lsData ){ if( !lsData.g.isAnimating && !lsData.g.isLoading ){ if( typeof options == 'number' ){ if( options > 0 && options < lsData.g.layersNum + 1 && options != lsData.g.curLayerIndex ){ lsData.change(options); } }else{ switch(options){ case 'prev': lsData.o.cbPrev(lsData.g); lsData.prev('clicked'); break; case 'next': lsData.o.cbNext(lsData.g); lsData.next('clicked'); break; case 'start': if( !lsData.g.autoSlideshow ){ lsData.o.cbStart(lsData.g); lsData.g.originalAutoSlideshow = true; lsData.start(); } break; } } } if( options == 'debug' ){ lsData.d.show(); } if( ( lsData.g.autoSlideshow || ( !lsData.g.autoSlideshow && lsData.g.originalAutoSlideshow ) ) && options == 'stop' ){ lsData.o.cbStop(lsData.g); lsData.g.originalAutoSlideshow = false; lsData.g.curLayer.find('iframe[src*="www.youtu"], iframe[src*="player.vimeo"]').each(function(){ // Clearing videoTimeouts clearTimeout( $(this).data( 'videoTimer') ); }); lsData.stop(); } if( options == 'forceStop'){ lsData.forcestop(); } } }); } } } }; // LayerSlider methods var layerSlider = function(el, options) { var ls = this; ls.$el = $(el).addClass('ls-container'); ls.$el.data('LayerSlider', ls); ls.load = function(){ // Setting options (user settings) and global (not modificable) parameters ls.o = $.extend({},layerSlider.options, options); ls.g = $.extend({},layerSlider.global); ls.lt = $.extend({},layerSlider.layerTransitions ); ls.st = $.extend({},layerSlider.slideTransitions ); ls.g.enableCSS3 = $(el).hasClass('ls-norotate') ? false : true; if( ls.g.ie78 ){ ls.o.lazyLoad = false; } // WP parameters if( ls.o.autoPauseSlideshow === 'enabled' ){ ls.o.autoPauseSlideshow = true; } if( ls.o.autoPauseSlideshow === 'disabled' ){ ls.o.autoPauseSlideshow = false; } // If layerslider.transitions.js is loaded... if( typeof layerSliderTransitions !== 'undefined' ){ ls.t = $.extend({},layerSliderTransitions); } // If custom transitions are loaded... if( typeof layerSliderCustomTransitions !== 'undefined' ){ ls.ct = $.extend({},layerSliderCustomTransitions); } // NEW IMPROVEMENT v3.6 forbid to call the init code more than once on the same element if( !ls.g.initialized ){ ls.g.initialized = true; // Added debug mode v3.5 ls.debug(); if( $('html').find('meta[content*="WordPress"]').length ){ ls.g.wpVersion = $('html').find('meta[content*="WordPress"]').attr('content').split('WordPress')[1]; } if( $('html').find('script[src*="layerslider"]').length ){ if( $('html').find('script[src*="layerslider"]').attr('src').indexOf('?') != -1 ){ ls.g.lswpVersion = $('html').find('script[src*="layerslider"]').attr('src').split('?')[1].split('=')[1]; } } // Debug mode controls ls.d.aT('LayerSlider controls'); ls.d.aU('prev | next | start | stop | force stop'); ls.d.history.find('a').each(function(){ $(this).click(function(e){ e.preventDefault(); $(el).layerSlider($(this).text()); }); }); ls.d.aT('LayerSlider version information'); ls.d.aU('JS version: ' + ls.g.version + ''); if(ls.g.lswpVersion){ ls.d.aL('WP version: ' + ls.g.lswpVersion + ''); } if(ls.g.wpVersion){ ls.d.aL('WordPress version: ' + ls.g.wpVersion + ''); } ls.d.aL('jQuery version: ' + $().jquery + ''); if( $(el).attr('id') ){ ls.d.aT('LayerSlider container'); ls.d.aU('#'+$(el).attr('id')); } // NEW LOAD METHOD v3.5 // FIXED v4.0 If the selected skin is already loaded, calling the ls.init() function immediately if( !ls.o.skin || ls.o.skin == '' || !ls.o.skinsPath || ls.o.skinsPath == '' ){ ls.d.aT('Loading without skin. Possibilities: mistyped skin and / or skinsPath.'); ls.init(); }else{ ls.d.aT('Trying to load with skin: '+ls.o.skin, true); // Applying skin $(el).addClass('ls-'+ls.o.skin); var skinStyle = ls.o.skinsPath+ls.o.skin+'/skin.css'; cssContainer = $('head'); if( !$('head').length ){ cssContainer = $('body'); } if( $('link[href="'+skinStyle+'"]').length ){ ls.d.aU('Skin "'+ls.o.skin+'" is already loaded.'); curSkin = $('link[href="'+skinStyle+'"]'); if( !ls.g.loaded ){ ls.g.loaded = true; // IMPROVEMENT v4.5.0 Added delay because of caching bugs ls.g.t1 = setTimeout(function(){ ls.init(); },150); } }else{ if (document.createStyleSheet){ document.createStyleSheet(skinStyle); var curSkin = $('link[href="'+skinStyle+'"]'); }else{ var curSkin = $('').appendTo( cssContainer ); } } // curSkin.load(); function for most of the browsers. curSkin.load(function(){ if( !ls.g.loaded ){ ls.d.aU('curSkin.load(); fired'); ls.g.loaded = true; // IMPROVEMENT v4.5.0 Added delay because of caching bugs ls.g.t2 = setTimeout(function(){ ls.init(); },150); } }); // $(window).load(); function for older webkit ( < v536 ). $(window).load(function(){ if( !ls.g.loaded ){ ls.d.aU('$(window).load(); fired'); ls.g.loaded = true; // IMPROVEMENT v4.5.0 Added delay because of caching bugs ls.g.t3 = setTimeout(function(){ ls.init(); },150); } }); // Fallback: if $(window).load(); not fired in 2 secs after $(document).ready(), // curSkin.load(); not fired at all or the name of the skin and / or the skinsPath // mistyped, we must call the init function manually. ls.g.t4 = setTimeout( function(){ if( !ls.g.loaded ){ ls.d.aT('Fallback mode: Neither curSkin.load(); or $(window).load(); were fired'); ls.g.loaded = true; ls.init(); } }, 1000); } } }; ls.init = function(){ // IMPROVEMENT v4.0.1 Trying to add special ID to or (required to overwrite WordPresss global styles) if( !$('html').attr('id') ){ $('html').attr('id','ls-global'); }else if( !$('body').attr('id') ){ $('body').attr('id','ls-global'); } // NEW FEATURE v1.7 making the slider responsive ls.g.sliderWidth = function(){ return $(el).width(); } ls.g.sliderHeight = function(){ return $(el).height(); } // Compatibility mode v5.0.0 // .ls-layer -> .ls-slide // .ls-s -> .ls-l $(el).find('.ls-layer').removeClass('ls-layer').addClass('ls-slide'); $(el).find('.ls-slide > *[class*="ls-s"]').each(function(){ var oldDistanceNum = $(this).attr('class').split('ls-s')[1].split(' ')[0]; $(this).removeClass('ls-s'+oldDistanceNum).addClass('ls-l'+oldDistanceNum); }); if( ls.o.firstLayer ){ ls.o.firstSlide = ls.o.firstLayer; } if( ls.o.animateFirstLayer === false ){ ls.o.animateFirstSlide = false; } // REPLACED FEATURE v2.0 If there is only ONE layer, instead of duplicating it, turning off slideshow and loops, hiding all controls, etc. if( $(el).find('.ls-slide').length == 1 ){ ls.o.autoStart = false; ls.o.navPrevNext = false; ls.o.navStartStop = false; ls.o.navButtons = false; ls.o.loops = 0; ls.o.forceLoopNum = false; ls.o.autoPauseSlideshow = true; ls.o.firstSlide = 1; ls.o.thumbnailNavigation = 'disabled'; } // NEW FEATURE v3.0 added "normal" responsive mode with image and font resizing // NEW FEATURE v3.5 responsiveUnder if( ls.o.width ){ ls.g.sliderOriginalWidthRU = ls.g.sliderOriginalWidth = '' + ls.o.width; }else{ ls.g.sliderOriginalWidthRU = ls.g.sliderOriginalWidth = $(el)[0].style.width; } if( ls.o.height ){ ls.g.sliderOriginalHeight = '' + ls.o.height; }else{ ls.g.sliderOriginalHeight = $(el)[0].style.height; } if( ls.g.sliderOriginalWidth.indexOf('%') == -1 && ls.g.sliderOriginalWidth.indexOf('px') == -1 ){ ls.g.sliderOriginalWidth += 'px'; } if( ls.g.sliderOriginalHeight.indexOf('%') == -1 && ls.g.sliderOriginalHeight.indexOf('px') == -1 ){ ls.g.sliderOriginalHeight += 'px'; } if( ls.o.responsive && ls.g.sliderOriginalWidth.indexOf('px') != -1 && ls.g.sliderOriginalHeight.indexOf('px') != -1 ){ ls.g.responsiveMode = true; }else{ ls.g.responsiveMode = false; } // IMPROVEMENT v3.0 preventing WordPress to wrap your sublayers in or

elements $(el).find('*[class*="ls-l"], *[class*="ls-bg"]').each(function(){ if( !$(this).parent().hasClass('ls-slide') ){ $(this).insertBefore( $(this).parent() ); } }); $(el).find('.ls-slide').each(function(){ $(this).children(':not([class*="ls-"])').each(function(){ $(this).remove(); }); var hd = $('

').addClass('ls-gpuhack'); if( $(this).find('.ls-bg').length ){ hd.insertAfter( $(this).find('.ls-bg').eq('0') ); }else{ hd.prependTo( $(this) ); } }); $(el).find('.ls-slide, *[class*="ls-l"]').each(function(){ if( $(this).data('ls') || $(this).attr('rel') || $(this).attr('style') ){ if( $(this).data('ls') ){ var params = $(this).data('ls').toLowerCase().split(';'); }else if( $(this).attr('rel')){ /* --else if( $(this).attr('rel') && $(this).attr('rel').indexOf(':') != -1 && $(this).attr('rel').indexOf(';') != -1 )*/ var params = $(this).attr('rel').toLowerCase().split(';'); }else{ var params = $(this).attr('style').toLowerCase().split(';'); } for(x=0;x 0 ){ sl = $(this).children(); } var _w = sl.width(); var _h = sl.height(); if( sl[0].style.width && sl[0].style.width.indexOf('%') != -1 ){ _w = sl[0].style.width; } if( sl[0].style.height && sl[0].style.height.indexOf('%') != -1 ){ _h = sl[0].style.height; } sl.data( 'originalWidth', _w ); sl.data( 'originalHeight', _h ); sl.data( 'originalPaddingLeft', sl.css('padding-left') ); sl.data( 'originalPaddingRight', sl.css('padding-right') ); sl.data( 'originalPaddingTop', sl.css('padding-top') ); sl.data( 'originalPaddingBottom', sl.css('padding-bottom') ); // iOS fade bug when GPU acceleration is enabled #1 var _o = typeof parseFloat( sl.css('opacity') ) == 'number' ? Math.round( parseFloat( sl.css('opacity') ) * 100 ) / 100 : 1; $(this).data( 'originalOpacity', _o ); if( sl.css('border-left-width').indexOf('px') == -1 ){ sl.data( 'originalBorderLeft', sl[0].style.borderLeftWidth ); }else{ sl.data( 'originalBorderLeft', sl.css('border-left-width') ); } if( sl.css('border-right-width').indexOf('px') == -1 ){ sl.data( 'originalBorderRight', sl[0].style.borderRightWidth ); }else{ sl.data( 'originalBorderRight', sl.css('border-right-width') ); } if( sl.css('border-top-width').indexOf('px') == -1 ){ sl.data( 'originalBorderTop', sl[0].style.borderTopWidth ); }else{ sl.data( 'originalBorderTop', sl.css('border-top-width') ); } if( sl.css('border-bottom-width').indexOf('px') == -1 ){ sl.data( 'originalBorderBottom', sl[0].style.borderBottomWidth ); }else{ sl.data( 'originalBorderBottom', sl.css('border-bottom-width') ); } sl.data( 'originalFontSize', sl.css('font-size') ); sl.data( 'originalLineHeight', sl.css('line-height') ); }); // CHANGED FEATURE v3.5 url- / deep linking layers if( document.location.hash ){ for( var dl = 0; dl < $(el).find('.ls-slide').length; dl++ ){ if( $(el).find('.ls-slide').eq(dl).data('deeplink') == document.location.hash.split('#')[1] ){ ls.o.firstSlide = dl+1; } } } // NEW FEATURE v2.0 linkTo $(el).find('*[class*="ls-linkto-"]').each(function(){ var lClasses = $(this).attr('class').split(' '); for( var ll=0; ll 2 ){ ls.o.firstSlide == 'random'; ls.o.twoWaySlideshow = false; }else{ ls.o.randomSlideshow = false; } // NEW FEATURE v3.0 random firstSlide if( ls.o.firstSlide == 'random' ){ ls.o.firstSlide = Math.floor(Math.random() * ls.g.layersNum+1); } ls.o.fisrtSlide = ls.o.fisrtSlide < ls.g.layersNum + 1 ? ls.o.fisrtSlide : 1; ls.o.fisrtSlide = ls.o.fisrtSlide < 1 ? 1 : ls.o.fisrtSlide; // NEW FEATURE v2.0 loops ls.g.nextLoop = 1; if( ls.o.animateFirstSlide ){ ls.g.nextLoop = 0; } // NEW FEATURE v2.0 videoPreview // IMPROVEMENT v4.6.0 http / https support of embedded videos var HTTP = document.location.href.indexOf('file:') === -1 ? '' : 'http:'; // Youtube videos $(el).find('iframe[src*="www.youtu"], iframe[src*="youtu.be"]').each(function(){ // BUGFIX v4.1.0 Firefox embedded video fix $(this).parent().addClass('ls-video-layer'); if( $(this).parent('[class*="ls-l"]') ){ var iframe = $(this); var http = HTTP; // Getting thumbnail $.getJSON( http + '//gdata.youtube.com/feeds/api/videos/' + $(this).attr('src').split('embed/')[1].split('?')[0] + '?v=2&alt=json&callback=?', function(data) { iframe.data( 'videoDuration', parseInt(data['entry']['media$group']['yt$duration']['seconds']) * 1000 ); }); var vpContainer = $('
').addClass('ls-vpcontainer').appendTo( $(this).parent() ); if( ls.o.lazyLoad ){ $('').appendTo( vpContainer ).addClass('ls-videopreview').attr('alt', 'Play video').data('src', http + '//img.youtube.com/vi/' + $(this).attr('src').split('embed/')[1].split('?')[0] + '/' + ls.o.youtubePreview ); }else{ $('').appendTo( vpContainer ).addClass('ls-videopreview').attr('alt', 'Play video').attr('src', http + '//img.youtube.com/vi/' + $(this).attr('src').split('embed/')[1].split('?')[0] + '/' + ls.o.youtubePreview ); } $('
').appendTo( vpContainer ).addClass('ls-playvideo'); $(this).parent().css({ width : $(this).width(), height : $(this).height() }).click(function(){ ls.g.isAnimating = true; if( ls.g.paused ){ if( ls.o.autoPauseSlideshow != false ){ ls.g.paused = false; } ls.g.originalAutoSlideshow = true; }else{ ls.g.originalAutoSlideshow = ls.g.autoSlideshow; } if( ls.o.autoPauseSlideshow != false ){ ls.stop(); } ls.g.pausedByVideo = true; http = $(this).find('iframe').data('videoSrc').indexOf('http') === -1 ? HTTP : ''; $(this).find('iframe').attr('src', http + $(this).find('iframe').data('videoSrc') ); $(this).find('.ls-vpcontainer').delay(ls.g.v.d).fadeOut(ls.g.v.fo, function(){ if( ls.o.autoPauseSlideshow == 'auto' && ls.g.originalAutoSlideshow == true ){ var videoTimer = setTimeout(function() { ls.start(); }, iframe.data( 'videoDuration') - ls.g.v.d ); iframe.data( 'videoTimer', videoTimer ); } ls.g.isAnimating = false; if( ls.g.resize == true ){ ls.makeResponsive( ls.g.curLayer, function(){ ls.g.resize = false; }); } }); }); var sep = '&'; if( $(this).attr('src').indexOf('?') == -1 ){ sep = '?'; } // BUGFIX v5.1.0 Fixed several issues with embedded videos (mostly under Firefox and IE) // fixed 'only audio but no video' bug, fixed 'unclickable video controls' bug, fixed 'hidden slider controls' bug var videoFix = '&wmode=opaque&html5=1'; // BUGFIX v5.1.0 Fixed autoplay parameter if( $(this).attr('src').indexOf('autoplay') == -1 ){ $(this).data( 'videoSrc', $(this).attr('src') + sep + 'autoplay=1' + videoFix ); }else{ $(this).data( 'videoSrc', $(this).attr('src').replace('autoplay=0','autoplay=1') + videoFix ); } $(this).data( 'originalWidth', $(this).attr('width') ); $(this).data( 'originalHeight', $(this).attr('height') ); $(this).attr('src',''); } }); // Vimeo videos $(el).find('iframe[src*="player.vimeo"]').each(function(){ // BUGFIX v4.1.0 Firefox embedded video fix $(this).parent().addClass('ls-video-layer'); if( $(this).parent('[class*="ls-l"]') ){ var iframe = $(this); var http = HTTP; // Getting thumbnail var vpContainer = $('
').addClass('ls-vpcontainer').appendTo( $(this).parent() ); $.getJSON( http + '//vimeo.com/api/v2/video/'+ ( $(this).attr('src').split('video/')[1].split('?')[0] ) +'.json?callback=?', function(data){ if( ls.o.lazyLoad ){ $('').appendTo( vpContainer ).addClass('ls-videopreview').attr('alt', 'Play video').data('src', data[0]['thumbnail_large'] ); }else{ $('').appendTo( vpContainer ).addClass('ls-videopreview').attr('alt', 'Play video').attr('src', data[0]['thumbnail_large'] ); } iframe.data( 'videoDuration', parseInt( data[0]['duration'] ) * 1000 ); $('
').appendTo( vpContainer ).addClass('ls-playvideo'); }); $(this).parent().css({ width : $(this).width(), height : $(this).height() }).click(function(){ ls.g.isAnimating = true; if( ls.g.paused ){ if( ls.o.autoPauseSlideshow != false ){ ls.g.paused = false; } ls.g.originalAutoSlideshow = true; }else{ ls.g.originalAutoSlideshow = ls.g.autoSlideshow; } if( ls.o.autoPauseSlideshow != false ){ ls.stop(); } ls.g.pausedByVideo = true; http = $(this).find('iframe').data('videoSrc').indexOf('http') === -1 ? HTTP : ''; $(this).find('iframe').attr('src', http + $(this).find('iframe').data('videoSrc') ); $(this).find('.ls-vpcontainer').delay(ls.g.v.d).fadeOut(ls.g.v.fo, function(){ if( ls.o.autoPauseSlideshow == 'auto' && ls.g.originalAutoSlideshow == true ){ var videoTimer = setTimeout(function() { ls.start(); }, iframe.data( 'videoDuration') - ls.g.v.d ); iframe.data( 'videoTimer', videoTimer ); } ls.g.isAnimating = false; if( ls.g.resize == true ){ ls.makeResponsive( ls.g.curLayer, function(){ ls.g.resize = false; }); } }); }); var sep = '&'; if( $(this).attr('src').indexOf('?') == -1 ){ sep = '?'; } // BUGFIX v5.1.0 Fixed several issues with embedded videos (mostly under Firefox and IE) // fixed 'only audio but no video' bug, fixed 'unclickable video controls' bug, fixed 'hidden slider controls' bug var videoFix = '&wmode=opaque'; // BUGFIX v5.1.0 Fixed autoplay parameter if( $(this).attr('src').indexOf('autoplay') == -1 ){ $(this).data( 'videoSrc', $(this).attr('src') + sep + 'autoplay=1' + videoFix ); }else{ $(this).data( 'videoSrc', $(this).attr('src').replace('autoplay=0','autoplay=1') + videoFix ); } $(this).data( 'originalWidth', $(this).attr('width') ); $(this).data( 'originalHeight', $(this).attr('height') ); $(this).attr('src',''); } }); // NEW FEATURE v5.0.0 HTML5 Video Support $(el).find('video, audio').each(function(){ // BUGFIX v5.1.0 fixed HTML5 video sizing issue (again :) var ow = typeof $(this).attr('width') !== 'undefined' ? $(this).attr('width') : '640'; var oh = typeof $(this).attr('height') !== 'undefined' ? $(this).attr('height') : '' + $(this).height(); if( ow.indexOf('%') === -1 ){ ow = parseInt( ow ); } if( oh.indexOf('%') === -1 ){ oh = parseInt( oh ); } if( ow === '100%' && ( oh === 0 || oh === '0' || oh === '100%' ) ){ $(this).attr('height', '100%'); oh = 'auto'; } $(this).parent().addClass('ls-video-layer').css({ width : ow, height : oh }).data({ originalWidth : ow, originalHeight : oh }); var curVideo = $(this); $(this).removeAttr('width').removeAttr('height').css({ width : '100%', height : '100%' }).click(function(){ if( typeof curVideo.attr('controls') === "undefined" ){ this.currentTime = 0; this.play(); } ls.g.isAnimating = true; if( ls.g.paused ){ if( ls.o.autoPauseSlideshow !== false ){ ls.g.paused = false; } ls.g.originalAutoSlideshow = true; }else{ ls.g.originalAutoSlideshow = ls.g.autoSlideshow; } if( ls.o.autoPauseSlideshow !== false ){ ls.stop(); } ls.g.pausedByVideo = true; $(this).on('ended', function(){ if( ls.o.autoPauseSlideshow === 'auto' && ls.g.originalAutoSlideshow === true ){ ls.start(); } }); ls.g.isAnimating = false; if( ls.g.resize === true ){ ls.makeResponsive( ls.g.curLayer, function(){ ls.g.resize = false; }); } }); }); // NEW FEATURE v1.7 animating first layer if( ls.o.animateFirstSlide ){ ls.o.firstSlide = ls.o.firstSlide - 1 === 0 ? ls.g.layersNum : ls.o.firstSlide-1; } ls.g.curLayerIndex = ls.o.firstSlide; ls.g.curLayer = $(el).find('.ls-slide:eq('+(ls.g.curLayerIndex-1)+')'); // Moving all layers to .ls-inner container $(el).find('.ls-slide').wrapAll('
'); // NEW FEATURE v4.5.0 Timers if( ls.o.showBarTimer ){ ls.g.barTimer = $('
').addClass('ls-bar-timer').appendTo( $(el).find('.ls-inner') ); } if( ls.o.showCircleTimer && !ls.g.ie78 ){ ls.g.circleTimer = $('
').addClass('ls-circle-timer').appendTo( $(el).find('.ls-inner') ); ls.g.circleTimer.append( $('
') ); } // NEW FEATURE v4.0 Adding loading indicator into the element ls.g.li = $('
').css({ zIndex: -1, display: 'none' }).addClass('ls-loading-container').appendTo( $(el) ); $('
').addClass('ls-loading-indicator').appendTo( ls.g.li ); // Adding styles if( $(el).css('position') == 'static' ){ $(el).css('position','relative'); } // IMPROVEMENT & BUGFIX v4.6.0 Fixed transparent global background issue under IE7 & IE8 if( ls.o.globalBGImage ){ $(el).find('.ls-inner').css({ backgroundImage : 'url('+ls.o.globalBGImage+')' }); }else{ $(el).find('.ls-inner').css({ backgroundColor : ls.o.globalBGColor }); } if( ls.o.globalBGColor == 'transparent' && ls.o.globalBGImage == false ){ $(el).find('.ls-inner').css({ background : 'none transparent !important' }); } // NEW FEATURES v5.0.0 Lazy-load & remove unnecessary width & height attributes from images $(el).find('.ls-slide img').each(function(){ $(this).removeAttr('width').removeAttr('height'); if( ls.o.imgPreload === true && ls.o.lazyLoad === true ){ if( typeof $(this).data('src') !== 'string' ){ $(this).data('src', $(this).attr('src') ); var src = ls.o.skinsPath+'../css/blank.gif'; $(this).attr('src',src); } }else{ if( typeof $(this).data('src') === 'string' ){ $(this).attr('src',$(this).data('src')); $(this).removeAttr('data-src'); } } }); // NEW FEATURE v5.0.0 Parallax layers by mousemove $(el).find('.ls-slide').on('mouseenter',function(e){ ls.g.parallaxStartX = e.pageX - $(this).parent().offset().left; ls.g.parallaxStartY = e.pageY - $(this).parent().offset().top; }); $(el).find('.ls-slide').on('mousemove',function(e){ var mX0 = $(this).parent().offset().left + ls.g.parallaxStartX; var mY0 = $(this).parent().offset().top + ls.g.parallaxStartY; var mX = e.pageX - mX0; var mY = e.pageY - mY0; $(this).find('> *:not(.ls-bg)').each(function(){ if( typeof $(this).data('parallaxlevel') !== 'undefined' && parseInt( $(this).data('parallaxlevel') ) !== 0 ){ $(this).css({ marginLeft : -mX / 100 * parseInt( $(this).data('parallaxlevel') ), marginTop : -mY / 100 * parseInt( $(this).data('parallaxlevel') ) }); } }); }); $(el).find('.ls-slide').on('mouseleave',function(){ $(this).find('> *:not(.ls-bg)').each(function(){ if( typeof $(this).data('parallaxlevel') !== 'undefined' && parseInt( $(this).data('parallaxlevel') ) !== 0 ){ TweenLite.to( this, .4, {css:{ marginLeft : 0, marginTop : 0 } }); } }); }); // Creating navigation if( ls.o.navPrevNext ){ $('').click(function(e){ e.preventDefault(); $(el).layerSlider('prev'); }).appendTo($(el)); $('').click(function(e){ e.preventDefault(); $(el).layerSlider('next'); }).appendTo($(el)); if( ls.o.hoverPrevNext ){ $(el).find('.ls-nav-prev, .ls-nav-next').css({ display: 'none' }); $(el).hover( function(){ if( !ls.g.forceHideControls ){ if( ls.g.ie78 ){ $(el).find('.ls-nav-prev, .ls-nav-next').css('display','block'); }else{ $(el).find('.ls-nav-prev, .ls-nav-next').stop(true,true).fadeIn(300); } } }, function(){ if( ls.g.ie78 ){ $(el).find('.ls-nav-prev, .ls-nav-next').css('display','none'); }else{ $(el).find('.ls-nav-prev, .ls-nav-next').stop(true,true).fadeOut(300); } } ); } } // Creating bottom navigation if( ls.o.navStartStop || ls.o.navButtons ){ var bottomNav = $('
').appendTo( $(el) ); ls.g.bottomWrapper = bottomNav; if( ls.o.thumbnailNavigation == 'always' ){ bottomNav.addClass('ls-above-thumbnails'); } if( ls.o.navButtons && ls.o.thumbnailNavigation != 'always' ){ $('').appendTo( $(el).find('.ls-bottom-nav-wrapper') ); // NEW FEATURE v3.5 thumbnailNavigation ('hover') if( ls.o.thumbnailNavigation == 'hover' ){ var thumbs = $('
').appendTo( $(el).find('.ls-bottom-slidebuttons') ); } for(x=1;x').appendTo( $(el).find('.ls-bottom-slidebuttons') ).click(function(e){ e.preventDefault(); $(el).layerSlider( ($(this).index() + 1) ); }); // NEW FEATURE v3.5 thumbnailNavigation ('hover') if( ls.o.thumbnailNavigation == 'hover' ){ $(el).find('.ls-thumbnail-hover, .ls-thumbnail-hover-img').css({ width : ls.o.tnWidth, height : ls.o.tnHeight }); var th = $(el).find('.ls-thumbnail-hover'); var ti = th.find('img').css({ height : ls.o.tnHeight }); var thi = $(el).find('.ls-thumbnail-hover-inner').css({ visibility : 'hidden', display: 'block' }); btn.hover( function(){ var hoverLayer = $(el).find('.ls-slide').eq( $(this).index() ); var tnSrc; if( ls.o.imgPreload === true && ls.o.lazyLoad === true ){ if( hoverLayer.find('.ls-tn').length ){ tnSrc = hoverLayer.find('.ls-tn').data('src'); }else if( hoverLayer.find('.ls-videopreview').length ){ tnSrc = hoverLayer.find('.ls-videopreview').data('src'); }else if( hoverLayer.find('.ls-bg').length ){ tnSrc = hoverLayer.find('.ls-bg').data('src'); }else{ tnSrc = ls.o.skinsPath+ls.o.skin+'/nothumb.png'; } }else{ if( hoverLayer.find('.ls-tn').length ){ tnSrc = hoverLayer.find('.ls-tn').attr('src'); }else if( hoverLayer.find('.ls-videopreview').length ){ tnSrc = hoverLayer.find('.ls-videopreview').attr('src'); }else if( hoverLayer.find('.ls-bg').length ){ tnSrc = hoverLayer.find('.ls-bg').attr('src'); }else{ tnSrc = ls.o.skinsPath+ls.o.skin+'/nothumb.png'; } } $(el).find('.ls-thumbnail-hover-img').css({ left: parseInt( th.css('padding-left') ), top: parseInt( th.css('padding-top') ) }); ti.load(function(){ if( $(this).width() == 0 ){ ti.css({ position: 'relative', margin: '0 auto', left: 'auto' }); }else{ ti.css({ position: 'absolute', marginLeft : - $(this).width() / 2, left: '50%' }); } }).attr( 'src', tnSrc ); th.css({ display: 'block' }).stop().animate({ left: $(this).position().left + ( $(this).width() - th.outerWidth() ) / 2 }, 250 ); thi.css({ display : 'none', visibility : 'visible' }).stop().fadeIn(250); }, function(){ thi.stop().fadeOut(250, function(){ th.css({ visibility : 'hidden', display: 'block' }); }); } ); } } if( ls.o.thumbnailNavigation == 'hover' ){ thumbs.appendTo( $(el).find('.ls-bottom-slidebuttons') ); } $(el).find('.ls-bottom-slidebuttons a:eq('+(ls.o.firstSlide-1)+')').addClass('ls-nav-active'); } if( ls.o.navStartStop ){ var buttonStart = $('
').click(function(e){ e.preventDefault(); $(el).layerSlider('start'); }).prependTo( $(el).find('.ls-bottom-nav-wrapper') ); var buttonStop = $('').click(function(e){ e.preventDefault(); $(el).layerSlider('stop'); }).appendTo( $(el).find('.ls-bottom-nav-wrapper') ); }else if( ls.o.thumbnailNavigation != 'always' ){ $('').prependTo( $(el).find('.ls-bottom-nav-wrapper') ); $('').appendTo( $(el).find('.ls-bottom-nav-wrapper') ); } if( ls.o.hoverBottomNav && ls.o.thumbnailNavigation != 'always' ){ bottomNav.css({ display: 'none' }); $(el).hover( function(){ if( !ls.g.forceHideControls ){ if( ls.g.ie78 ){ bottomNav.css('display','block'); }else{ bottomNav.stop(true,true).fadeIn(300); } } }, function(){ if( ls.g.ie78 ){ bottomNav.css('display','none'); }else{ bottomNav.stop(true,true).fadeOut(300); } } ) } } // NEW FEATURE v3x.5 thumbnailNavigation ('always') if( ls.o.thumbnailNavigation == 'always' ){ ls.g.thumbsWrapper = $('
').appendTo( $(el) ); var thumbs = $('
').appendTo( ls.g.thumbsWrapper ); ls.g.thumbnails = $(el).find('.ls-thumbnail-slide-container'); if( !('ontouchstart' in window) ){ ls.g.thumbnails.hover( function(){ $(this).addClass('ls-thumbnail-slide-hover'); }, function(){ $(this).removeClass('ls-thumbnail-slide-hover'); ls.scrollThumb(); } ).mousemove(function(e){ var mL = parseInt(e.pageX - $(this).offset().left ) / $(this).width() * ( $(this).width() - $(this).find('.ls-thumbnail-slide').width() ); $(this).find('.ls-thumbnail-slide').stop().css({ marginLeft : mL }); }); }else{ ls.g.thumbnails.addClass('ls-touchscroll'); } $(el).find('.ls-slide').each(function(){ var tempIndex = $(this).index() + 1; var tnSrc; if( ls.o.imgPreload === true && ls.o.lazyLoad === true ){ if( $(this).find('.ls-tn').length ){ tnSrc = $(this).find('.ls-tn').data('src'); }else if( $(this).find('.ls-videopreview').length ){ tnSrc = $(this).find('.ls-videopreview').data('src'); }else if( $(this).find('.ls-bg').length ){ tnSrc = $(this).find('.ls-bg').data('src'); }else{ tnSrc = ls.o.skinsPath+ls.o.skin+'/nothumb.png'; } }else{ if( $(this).find('.ls-tn').length ){ tnSrc = $(this).find('.ls-tn').attr('src'); }else if( $(this).find('.ls-videopreview').length ){ tnSrc = $(this).find('.ls-videopreview').attr('src'); }else if( $(this).find('.ls-bg').length ){ tnSrc = $(this).find('.ls-bg').attr('src'); }else{ tnSrc = ls.o.skinsPath+ls.o.skin+'/nothumb.png'; } } var thumb = $('
'); thumb.appendTo( $(el).find('.ls-thumbnail-slide') ); if( !('ontouchstart' in window) ){ thumb.hover( function(){ $(this).children().stop().fadeTo(300,ls.o.tnActiveOpacity/100); }, function(){ if( !$(this).children().hasClass('ls-thumb-active') ){ $(this).children().stop().fadeTo(300,ls.o.tnInactiveOpacity/100); } } ); } thumb.click(function(e){ e.preventDefault(); $(el).layerSlider( tempIndex ); }); }); if( buttonStart && buttonStop ){ var lsBottomBelowTN = ls.g.bottomWrapper = $('
').appendTo( $(el) ); buttonStart.clone().click(function(e){ e.preventDefault(); $(el).layerSlider('start'); }).appendTo( lsBottomBelowTN ); buttonStop.clone().click(function(e){ e.preventDefault(); $(el).layerSlider('stop'); }).appendTo( lsBottomBelowTN ); } if( ls.o.hoverBottomNav ){ ls.g.thumbsWrapper.css('display','none'); if( lsBottomBelowTN ){ ls.g.bottomWrapper = lsBottomBelowTN.css('display') == 'block' ? lsBottomBelowTN : $(el).find('.ls-above-thumbnails'); ls.g.bottomWrapper.css('display','none'); } // BUGFIXES v4.1.3 Added checking of the bottomWrapper variable $(el).hover( function(){ $(el).addClass('ls-hover'); if( !ls.g.forceHideControls ){ if( ls.g.ie78 ){ ls.g.thumbsWrapper.css('display','block'); if( ls.g.bottomWrapper ){ ls.g.bottomWrapper.css('display','block'); } }else{ ls.g.thumbsWrapper.stop(true,true).fadeIn(300); if( ls.g.bottomWrapper ){ ls.g.bottomWrapper.stop(true,true).fadeIn(300); } } } }, function(){ $(el).removeClass('ls-hover'); if( ls.g.ie78 ){ ls.g.thumbsWrapper.css('display','none'); if( ls.g.bottomWrapper ){ ls.g.bottomWrapper.css('display','none'); } }else{ ls.g.thumbsWrapper.stop(true,true).fadeOut(300); if( ls.g.bottomWrapper ){ ls.g.bottomWrapper.stop(true,true).fadeOut(300); } } } ) } } // Adding shadow wrapper ls.g.shadow = $('
').appendTo( $(el) ); if( ls.g.shadow.css('display') == 'block' && !ls.g.shadow.find('img').length ){ ls.g.showShadow = function(){ ls.g.shadow.css({ display: 'none', visibility: 'visible' }).fadeIn( 500, function(){ ls.g.showShadow = false; }); } ls.g.shadowImg = $('').attr('src',ls.o.skinsPath+ls.o.skin+'/shadow.png').appendTo( ls.g.shadow ); ls.g.shadowBtmMod = typeof parseInt( $(el).css('padding-bottom') ) == 'number' ? parseInt( $(el).css('padding-bottom') ) : 0; } ls.resizeShadow(); // Adding keyboard navigation if turned on and if number of layers > 1 if( ls.o.keybNav && $(el).find('.ls-slide').length > 1 ){ $('body').bind('keydown',function(e){ if( !ls.g.isAnimating && !ls.g.isLoading ){ if( e.which == 37 ){ ls.o.cbPrev(ls.g); ls.prev('clicked'); }else if( e.which == 39 ){ ls.o.cbNext(ls.g); ls.next('clicked'); } } }); } // Adding touch-control navigation if number of layers > 1 if('ontouchstart' in window && $(el).find('.ls-slide').length > 1 && ls.o.touchNav ){ //修复Android端浏览器触摸事件不灵敏问题 //ios下触控间距为45px var touchChangeSize = 45; var currentUserAgent = navigator.userAgent; if (currentUserAgent.indexOf('Android') != -1) { touchChangeSize = 10; } $(el).find('.ls-inner').bind('touchstart', function( e ) { var t = e.touches ? e.touches : e.originalEvent.touches; if( t.length == 1 ){ ls.g.touchStartX = ls.g.touchEndX = t[0].clientX; } }); $(el).find('.ls-inner').bind('touchmove', function( e ) { var t = e.touches ? e.touches : e.originalEvent.touches; if( t.length == 1 ){ ls.g.touchEndX = t[0].clientX; } if( Math.abs( ls.g.touchStartX - ls.g.touchEndX ) > touchChangeSize ){ e.preventDefault(); } }); $(el).find('.ls-inner').bind('touchend',function( e ){ if( Math.abs( ls.g.touchStartX - ls.g.touchEndX ) > touchChangeSize ){ if( ls.g.touchStartX - ls.g.touchEndX > 0 ){ ls.o.cbNext(ls.g); $(el).layerSlider('next'); }else{ ls.o.cbPrev(ls.g); $(el).layerSlider('prev'); } } }); } // Feature: pauseOnHover (if number of layers > 1) if( ls.o.pauseOnHover == true && $(el).find('.ls-slide').length > 1 ){ // BUGFIX v1.6 stop was not working because of pause on hover $(el).find('.ls-inner').hover( function(){ // Calling cbPause callback function ls.o.cbPause(ls.g); if( ls.g.autoSlideshow ){ ls.g.paused = true; ls.stop(); // Stopping the animation of Timers if( ls.g.barTimer ){ ls.g.barTimer.stop(); } if( ls.g.circleTimer ){ if( ls.g.cttl ){ ls.g.cttl.pause(); } } ls.g.pausedSlideTime = new Date().getTime(); } }, function(){ if( ls.g.paused == true ){ ls.start(); ls.g.paused = false; } } ); } ls.resizeSlider(); // NEW FEATURE v1.7 added yourLogo if( ls.o.yourLogo ){ ls.g.yourLogo = $('').addClass('ls-yourlogo').appendTo($(el)).attr('style', ls.o.yourLogoStyle ).css({ visibility: 'hidden', display: 'bock' }).load(function(){ // NEW FEATURE v3.0 added responsive yourLogo var logoTimeout = 0; if( !ls.g.yourLogo ){ logoTimeout = 1000; } setTimeout( function(){ ls.g.yourLogo.data( 'originalWidth', ls.g.yourLogo.width() ); ls.g.yourLogo.data( 'originalHeight', ls.g.yourLogo.height() ); if( ls.g.yourLogo.css('left') != 'auto' ){ ls.g.yourLogo.data( 'originalLeft', ls.g.yourLogo[0].style.left ); } if( ls.g.yourLogo.css('right') != 'auto' ){ ls.g.yourLogo.data( 'originalRight', ls.g.yourLogo[0].style.right ); } if( ls.g.yourLogo.css('top') != 'auto' ){ ls.g.yourLogo.data( 'originalTop', ls.g.yourLogo[0].style.top ); } if( ls.g.yourLogo.css('bottom') != 'auto' ){ ls.g.yourLogo.data( 'originalBottom', ls.g.yourLogo[0].style.bottom ); } // NEW FEATURES v1.8 added yourLogoLink & yourLogoTarget if( ls.o.yourLogoLink != false ){ $('').appendTo($(el)).attr( 'href', ls.o.yourLogoLink ).attr('target', ls.o.yourLogoTarget ).css({ textDecoration : 'none', outline : 'none' }).append( ls.g.yourLogo ); } ls.g.yourLogo.css({ display: 'none', visibility: 'visible' }); ls.resizeYourLogo(); }, logoTimeout ); }).attr( 'src', ls.o.yourLogo ); } // NEW FEATURE v1.7 added window resize function for make responsive layout better $(window).resize(function(){ ls.g.resize = true; if( !ls.g.isAnimating ){ ls.makeResponsive( ls.g.curLayer, function(){ if( ls.g.ltContainer ){ ls.g.ltContainer.empty(); } ls.g.resize = false; }); if( ls.g.yourLogo ){ ls.resizeYourLogo(); } } }); ls.g.showSlider = true; // NEW FEATURE v1.7 animating first layer if( ls.o.animateFirstSlide == true ){ if( ls.o.autoStart ){ ls.g.autoSlideshow = true; $(el).find('.ls-nav-start').addClass('ls-nav-start-active'); }else{ $(el).find('.ls-nav-stop').addClass('ls-nav-stop-active'); } ls.next(); }else{ ls.imgPreload(ls.g.curLayer,function(){ ls.g.curLayer.fadeIn(1000, function(){ ls.g.isLoading = false; $(this).addClass('ls-active'); // NEW FEATURE v2.0 autoPlayVideos if( ls.o.autoPlayVideos ){ $(this).delay( $(this).data('delayin') + 25 ).queue(function(){ $(this).find('.ls-videopreview, video, audio').click(); $(this).dequeue(); }); } // NEW FEATURE v3.0 showUntil sublayers ls.g.curLayer.find(' > *[class*="ls-l"]').each(function(){ // Setting showUntilTimers if( $(this).data('showuntil') > 0 ){ var cursub = $(this); // IMPROVEMENT v4.5.0 sublayerShowUntil will be called anly if necessary cursub.data('showUntilTimer', setTimeout(function(){ ls.sublayerShowUntil( cursub ); }, cursub.data('showuntil') )); } }); }); ls.changeThumb(ls.g.curLayerIndex) // If autoStart is true if( ls.o.autoStart ){ ls.g.isLoading = false; ls.start(); }else{ $(el).find('.ls-nav-stop').addClass('ls-nav-stop-active'); } }); } // NEW FEATURE v1.7 added cbInit function ls.o.cbInit($(el)); }; ls.start = function(){ //console.log("layerSlider start"); if( ls.g.autoSlideshow ){ if( ls.g.prevNext == 'prev' && ls.o.twoWaySlideshow ){ ls.prev(); }else{ ls.next(); } }else{ ls.g.autoSlideshow = true; if( !ls.g.isAnimating && !ls.g.isLoading ){ ls.timer(); } } $(el).find('.ls-nav-start').addClass('ls-nav-start-active'); $(el).find('.ls-nav-stop').removeClass('ls-nav-stop-active'); }; ls.timer = function(){ if( $(el).find('.ls-active').data('ls') ){ var sD = ls.st.slideDelay; }else{ var sD = ls.o.slideDelay; } var delaytime = $(el).find('.ls-active').data('slidedelay') ? parseInt( $(el).find('.ls-active').data('slidedelay') ) : sD; // BUGFIX v3.0 delaytime did not work on first layer if animateFirstSlide was set to off // BUGFIX v3.5 delaytime did not work on all layers in standalone version after bugfix 3.0 :) if( !ls.o.animateFirstSlide && !$(el).find('.ls-active').data('slidedelay') ){ var tempD = $(el).find('.ls-slide:eq('+(ls.o.firstSlide-1)+')').data('slidedelay'); delaytime = tempD ? tempD : sD; } clearTimeout( ls.g.slideTimer ); // NEW FEATURE v4.5.0 Timers if( ls.g.pausedSlideTime ){ if( !ls.g.startSlideTime ){ ls.g.startSlideTime = new Date().getTime(); } if( ls.g.startSlideTime > ls.g.pausedSlideTime ){ ls.g.pausedSlideTime = new Date().getTime(); } if(! ls.g.curSlideTime ){ ls.g.curSlideTime = delaytime; } ls.g.curSlideTime -= (ls.g.pausedSlideTime - ls.g.startSlideTime); ls.g.pausedSlideTime = false; ls.g.startSlideTime = new Date().getTime(); }else{ ls.g.curSlideTime = delaytime; ls.g.startSlideTime = new Date().getTime(); } // BUGFIX v4.6.0 fixed Bar Timer animation on the fisrt slide if animateFirstSlide is false ls.g.curSlideTime = parseInt( ls.g.curSlideTime ); ls.g.slideTimer = setTimeout(function(){ ls.g.startSlideTime = ls.g.pausedSlideTime = ls.g.curSlideTime = false; ls.start(); }, ls.g.curSlideTime ); // Animating Timers if( ls.g.barTimer ){ ls.g.barTimer.animate({ width : ls.g.sliderWidth() }, ls.g.curSlideTime, 'linear', function(){ $(this).css({ width: 0 }); }); } if( ls.g.circleTimer ){ var ct1 = ls.g.circleTimer.find('.ls-ct-right .ls-ct-rotate'); var ct2 = ls.g.circleTimer.find('.ls-ct-left .ls-ct-rotate'); if( ls.g.circleTimer.css('display') == 'none' ){ ct1.css({ rotate : 0 }); ct2.css({ rotate : 0 }); ls.g.circleTimer.fadeIn(350); } if( !ls.g.cttl ){ ls.g.cttl = new TimelineLite(); ls.g.cttl.add( TweenLite.fromTo(ct1[0],delaytime/2000,{ rotation : 0 },{ ease : Linear.easeNone, rotation : 180, onReverseComplete : function(){ ls.g.cttl = false; } })); ls.g.cttl.add( TweenLite.fromTo(ct2[0],delaytime/2000,{ rotation : 0 },{ ease : Linear.easeNone, rotation : 180 })); }else{ ls.g.cttl.resume(); } } }; ls.stop = function(){ // Stopping Timers ls.g.pausedSlideTime = new Date().getTime(); if( ls.g.barTimer ){ ls.g.barTimer.stop(); } if( ls.g.circleTimer ){ if( ls.g.cttl ){ ls.g.cttl.pause(); } } if( !ls.g.paused && !ls.g.originalAutoSlideshow ){ $(el).find('.ls-nav-stop').addClass('ls-nav-stop-active'); $(el).find('.ls-nav-start').removeClass('ls-nav-start-active'); } clearTimeout( ls.g.slideTimer ); ls.g.autoSlideshow = false; }; ls.forcestop = function(){ clearTimeout( ls.g.slideTimer ); ls.g.autoSlideshow = false; clearTimeout( ls.g.t1 ); clearTimeout( ls.g.t2 ); clearTimeout( ls.g.t3 ); clearTimeout( ls.g.t4 ); clearTimeout( ls.g.t5 ); if( ls.g.barTimer ){ ls.g.barTimer.stop(); } if( ls.g.circleTimer ){ if( ls.g.cttl ){ ls.g.cttl.pause(); } } $(el).find('*').stop(true,false).dequeue(); $(el).find('.ls-slide >').each(function(){ if( $(this).data('tr') ){ $(this).data('tr').pause(); } }); if( !ls.g.paused && !ls.g.originalAutoSlideshow ){ $(el).find('.ls-nav-stop').addClass('ls-nav-stop-active'); $(el).find('.ls-nav-start').removeClass('ls-nav-start-active'); } }; ls.restart = function(){ $(el).find('*').stop(); clearTimeout( ls.g.slideTimer ); ls.change(ls.g.curLayerIndex,ls.g.prevNext); }; // Because of an ie7 bug, we have to check & format the strings correctly ls.ieEasing = function( e ){ // BUGFIX v1.6 and v1.8 some type of animations didn't work properly if( $.trim(e.toLowerCase()) == 'swing' || $.trim(e.toLowerCase()) == 'linear'){ return e.toLowerCase(); }else{ return e.replace('easeinout','easeInOut').replace('easein','easeIn').replace('easeout','easeOut').replace('quad','Quad').replace('quart','Quart').replace('cubic','Cubic').replace('quint','Quint').replace('sine','Sine').replace('expo','Expo').replace('circ','Circ').replace('elastic','Elastic').replace('back','Back').replace('bounce','Bounce'); } }; // Calculating prev layer ls.prev = function(clicked){ // NEW FEATURE v2.0 loops if( ls.g.curLayerIndex < 2 ){ ls.g.nextLoop += 1; } if( ( ls.g.nextLoop > ls.o.loops ) && ( ls.o.loops > 0 ) && !clicked ){ ls.g.nextLoop = 0; ls.stop(); if( ls.o.forceLoopNum == false ){ ls.o.loops = 0; } }else{ var prev = ls.g.curLayerIndex < 2 ? ls.g.layersNum : ls.g.curLayerIndex - 1; ls.g.prevNext = 'prev'; ls.change(prev,ls.g.prevNext); } }; // Calculating next layer ls.next = function(clicked){ //console.log("layerslider next clicked"); if($(".backstage-inner-frontendpreview").length){ // $(window).trigger("resize"); //console.log("layerslider next clicked"); } // NEW FEATURE v2.0 loops if( !ls.o.randomSlideshow ){ if( !(ls.g.curLayerIndex < ls.g.layersNum) ){ ls.g.nextLoop += 1; } if( ( ls.g.nextLoop > ls.o.loops ) && ( ls.o.loops > 0 ) && !clicked ){ ls.g.nextLoop = 0; ls.stop(); if( ls.o.forceLoopNum == false ){ ls.o.loops = 0; } }else{ var next = ls.g.curLayerIndex < ls.g.layersNum ? ls.g.curLayerIndex + 1 : 1; ls.g.prevNext = 'next'; ls.change(next,ls.g.prevNext); } }else if( !clicked ){ // NEW FEATURE v3.5 randomSlideshow var next = ls.g.curLayerIndex; var calcRand = function(){ next = Math.floor(Math.random() * ls.g.layersNum) + 1; if( next == ls.g.curLayerIndex ){ calcRand(); }else{ ls.g.prevNext = 'next'; ls.change(next,ls.g.prevNext); } } calcRand(); }else if( clicked ){ var next = ls.g.curLayerIndex < ls.g.layersNum ? ls.g.curLayerIndex + 1 : 1; ls.g.prevNext = 'next'; ls.change(next,ls.g.prevNext); } }; ls.change = function(num,prevnext){ // Stopping Timers if needed ls.g.startSlideTime = ls.g.pausedSlideTime = ls.g.curSlideTime = false; // IMPROVEMENT v4.6.0 Bar Timer animation if( ls.g.barTimer ){ ls.g.barTimer.stop().delay(300).animate({ width: 0 },450); } if( ls.g.circleTimer ){ ls.g.circleTimer.fadeOut(500); if( ls.g.cttl ){ ls.g.cttl.reverse().duration(.35); } } // NEW FEATURE v2.0 videoPreview & autoPlayVideos if( ls.g.pausedByVideo == true ){ ls.g.pausedByVideo = false; ls.g.autoSlideshow = ls.g.originalAutoSlideshow; ls.g.curLayer.find('iframe[src*="www.youtu"], iframe[src*="player.vimeo"]').each(function(){ $(this).parent().find('.ls-vpcontainer').fadeIn(ls.g.v.fi,function(){ $(this).parent().find('iframe').attr('src',''); }); }); ls.g.curLayer.find('video, audio').each(function(){ this.pause(); }); } $(el).find('iframe[src*="www.youtu"], iframe[src*="player.vimeo"]').each(function(){ // Clearing videoTimeouts clearTimeout( $(this).data( 'videoTimer') ); }); clearTimeout( ls.g.slideTimer ); ls.g.nextLayerIndex = num; ls.g.nextLayer = $(el).find('.ls-slide:eq('+(ls.g.nextLayerIndex-1)+')'); // BUGFIX v1.6 fixed wrong directions of animations if navigating by slidebuttons if( !prevnext ){ if( ls.g.curLayerIndex < ls.g.nextLayerIndex ){ ls.g.prevNext = 'next'; }else{ ls.g.prevNext = 'prev'; } } // Added timeOut to wait for the fade animation of videoPreview image... var timeOut = 0; if( $(el).find('iframe[src*="www.youtu"], iframe[src*="player.vimeo"]').length > 0 ){ timeOut = ls.g.v.fi; } ls.imgPreload(ls.g.nextLayer,function(){ ls.animate(); }); }; // Preloading images ls.imgPreload = function(layer,callback){ if (!!!layer || !layer.length) { return; } ls.g.isLoading = true; // Showing slider for the first time if( ls.g.showSlider ){ $(el).css({ visibility : 'visible' }); } // If image preload is on if( ls.o.imgPreload ){ var preImages = []; var preloaded = 0; // NEW FEATURE v1.8 Preloading background images of layers if( layer.css('background-image') != 'none' && layer.css('background-image').indexOf('url') != -1 && !layer.hasClass('ls-preloaded') && !layer.hasClass('ls-not-preloaded') ){ var bgi = layer.css('background-image'); bgi = bgi.match(/url\((.*)\)/)[1].replace(/"/gi, ''); preImages[preImages.length] = [bgi, layer]; } // Images inside layers layer.find('img:not(.ls-preloaded, .ls-not-preloaded)').each(function(){ // NEW FEATURE v5.0.0 Lazy-load if( ls.o.lazyLoad === true ){ $(this).attr('src',$(this).data('src')); } preImages[preImages.length] = [$(this).attr('src'), $(this)]; }); // Background images inside layers layer.find('*').each(function(){ // BUGFIX v1.7 fixed preload bug with sublayers with gradient backgrounds if( $(this).css('background-image') != 'none' && $(this).css('background-image').indexOf('url') != -1 && !$(this).hasClass('ls-preloaded') && !$(this).hasClass('ls-not-preloaded') ){ var bgi = $(this).css('background-image'); bgi = bgi.match(/url\((.*)\)/)[1].replace(/"/gi, ''); preImages[preImages.length] = [bgi, $(this)]; } }); // BUGFIX v1.7 if there are no images in a layer, calling the callback function if(preImages.length == 0){ $('.ls-thumbnail-wrapper, .ls-nav-next, .ls-nav-prev, .ls-bottom-nav-wrapper').css({ visibility : 'visible' }); ls.makeResponsive(layer, callback); }else{ // NEW FEATURE v4.0 Showing loading indicator if( ls.g.ie78 ){ ls.g.li.css('display','block'); }else{ // BUGIFX v4.1.3 Adding delay to the showing of the loading indicator ls.g.li.delay(400).fadeIn(300); } // 获取图片高度优化 for(x=0;x ready > load;2、回调函数this指向img本身 // 04-02: 1、增加图片完全加载后的回调 2、提高性能 /** * 图片头数据加载就绪事件 - 更快获取图片尺寸 * @version 2011.05.27 * @see //blog.phpdr.net/js-get-image-size.html * @param {String} 图片路径 * @param {Function} 尺寸就绪 * @param {Function} 加载完毕 (可选) * @param {Function} 加载错误 (可选) * @example imgReady('//www.google.com.hk/intl/zh-CN/images/logo_cn.png', function () { alert('size ready: width=' + this.width + '; height=' + this.height); }); */ ls.imgReady = (function () { var list = [], intervalId = null, // 用来执行队列 tick = function () { var i = 0; for (; i < list.length; i++) { list[i].end ? list.splice(i--, 1) : list[i](); }; !list.length && stop(); }, // 停止所有定时器队列 stop = function () { clearInterval(intervalId); intervalId = null; }; return function (url, ready, load, error) { var onready, width, height, newWidth, newHeight, img = new Image(); img.src = url; // 如果图片被缓存,则直接返回缓存数据 if (img.complete) { ready.call(img); load && load.call(img); return; }; width = img.width; height = img.height; // 加载错误后的事件 img.onerror = function () { error && error.call(img); onready.end = true; img = img.onload = img.onerror = null; }; // 图片尺寸就绪 onready = function () { newWidth = img.width; newHeight = img.height; if (newWidth !== width || newHeight !== height || // 如果图片已经在其他地方加载可使用面积检测 newWidth * newHeight > 1024 ) { ready.call(img); onready.end = true; }; }; onready(); // 完全加载完毕的事件 img.onload = function () { // onload在定时器时间差范围内可能比onready快 // 这里进行检查并保证onready优先执行 !onready.end && onready(); load && load.call(img); // IE gif动画会循环执行onload,置空onload即可 img = img.onload = img.onerror = null; }; // 加入队列中定期执行 if (!onready.end) { list.push(onready); // 无论何时只允许出现一个定时器,减少浏览器性能损耗 if (intervalId === null) intervalId = setInterval(tick, 40); }; }; })(); // NEW FEATURE v1.7 making the slider responsive ls.makeResponsive = function(layer, callback ){ layer.css({ visibility: 'hidden', display: 'block' }); if( ls.g.showShadow ){ ls.g.showShadow(); } ls.resizeSlider(); if( ls.o.thumbnailNavigation == 'always' ){ ls.resizeThumb(); } layer.children().each(function(){ var sl = $(this); // positioning var ol = sl.data('originalLeft') ? sl.data('originalLeft') : '0'; var ot = sl.data('originalTop') ? sl.data('originalTop') : '0'; if( sl.is('a') && sl.children().length > 0 ){ sl.css({ display : 'block' }); sl = sl.children(); } var ow = 'auto'; var oh = 'auto'; if( sl.data('originalWidth') ){ if( typeof sl.data('originalWidth') == 'number' ){ ow = parseInt( sl.data('originalWidth') ) * ls.g.ratio; }else if( sl.data('originalWidth').indexOf('%') != -1 ){ ow = sl.data('originalWidth'); } } if( sl.data('originalHeight') ){ if( typeof sl.data('originalHeight') == 'number' ){ oh = parseInt( sl.data('originalHeight') ) * ls.g.ratio; }else if( sl.data('originalHeight').indexOf('%') != -1 ){ oh = sl.data('originalHeight'); } } // padding var opl = sl.data('originalPaddingLeft') ? parseInt( sl.data('originalPaddingLeft') ) * ls.g.ratio : 0; var opr = sl.data('originalPaddingRight') ? parseInt( sl.data('originalPaddingRight') ) * ls.g.ratio : 0; var opt = sl.data('originalPaddingTop') ? parseInt( sl.data('originalPaddingTop') ) * ls.g.ratio : 0; var opb = sl.data('originalPaddingBottom') ? parseInt( sl.data('originalPaddingBottom') ) * ls.g.ratio : 0; // border var obl = sl.data('originalBorderLeft') ? parseInt( sl.data('originalBorderLeft') ) * ls.g.ratio : 0; var obr = sl.data('originalBorderRight') ? parseInt( sl.data('originalBorderRight') ) * ls.g.ratio : 0; var obt = sl.data('originalBorderTop') ? parseInt( sl.data('originalBorderTop') ) * ls.g.ratio : 0; var obb = sl.data('originalBorderBottom') ? parseInt( sl.data('originalBorderBottom') ) * ls.g.ratio : 0; // font var ofs = sl.data('originalFontSize'); var olh = sl.data('originalLineHeight'); // NEW FEATURE v3.0 added "normal" responsive mode with image and font resizing // NEW FEATURE v3.5 added responsiveUnder if( ls.g.responsiveMode || ls.o.responsiveUnder > 0 ){ if( sl.is('img') && !sl.hasClass('ls-bg') && sl.attr('src') ){ sl.css({ width: 'auto', height: 'auto' }); // IMPROVEMENT v4.5.0 Images can have now starting width / height if( ( ow == 0 || ow == 'auto' ) && typeof oh == 'number' && oh != 0 ){ ow = ( oh / sl.height() ) * sl.width(); } if( ( oh == 0 || oh == 'auto' ) && typeof ow == 'number' && ow != 0 ){ oh = ( ow / sl.width() ) * sl.height(); } if( ow == 'auto'){ ow = sl.width() * ls.g.ratio; } if( oh == 'auto'){ oh = sl.height() * ls.g.ratio; } sl.css({ width : ow, height : oh }); } if( !sl.is('img') ){ sl.css({ width : ow, height : oh, 'font-size' : parseInt(ofs) * ls.g.ratio +'px', 'line-height' : parseInt(olh) * ls.g.ratio + 'px' }); } if( sl.is('div') && sl.find('iframe').data('videoSrc') ){ var videoIframe = sl.find('iframe'); videoIframe.attr('width', parseInt( videoIframe.data('originalWidth') ) * ls.g.ratio ).attr('height', parseInt( videoIframe.data('originalHeight') ) * ls.g.ratio ); sl.css({ width : parseInt( videoIframe.data('originalWidth') ) * ls.g.ratio, height : parseInt( videoIframe.data('originalHeight') ) * ls.g.ratio }); } sl.css({ padding : opt + 'px ' + opr + 'px ' + opb + 'px ' + opl + 'px ', borderLeftWidth : obl + 'px', borderRightWidth : obr + 'px', borderTopWidth : obt + 'px', borderBottomWidth : obb + 'px' }); } // If it is NOT a bg sublayer if( !sl.hasClass('ls-bg') ){ var sl2 = sl; if( sl.parent().is('a') ){ sl = sl.parent(); } // NEW FEATURE v3.5 sublayerContainer var slC = 0; if( ls.o.layersContainer ){ slC = ls.o.layersContainer > 0 ? ( ls.g.sliderWidth() - ls.o.layersContainer ) / 2 : 0; }else if( ls.o.sublayerContainer ){ slC = ls.o.sublayerContainer > 0 ? ( ls.g.sliderWidth() - ls.o.sublayerContainer ) / 2 : 0; } slC = slC < 0 ? 0 : slC; // (RE)positioning sublayer (left property) if( ol.indexOf('%') != -1 ){ sl.css({ left : ls.g.sliderWidth() / 100 * parseInt(ol) - sl2.width() / 2 - opl - obl }); }else if( slC > 0 || ls.g.responsiveMode || ls.o.responsiveUnder > 0 ){ sl.css({ left : slC + parseInt(ol) * ls.g.ratio }); } // (RE)positioning sublayer (top property) if( ot.indexOf('%') != -1 ){ sl.css({ top : ls.g.sliderHeight() / 100 * parseInt(ot) - sl2.height() / 2 - opt - obt }); }else if( ls.g.responsiveMode || ls.o.responsiveUnder > 0 ){ sl.css({ top : parseInt(ot) * ls.g.ratio }); } }else{ var inner = $(el).find('.ls-inner'); sl.css({ width : 'auto', height : 'auto' }); // IE11下高宽实际高宽获取不对(概率事件),F12工具调试时,高宽获取没问题. // 解决办法:获取正确的高宽 ow = sl.width(); oh = sl.height(); ow = sl.data('ls-img-real-width') ? sl.data('ls-img-real-width') : ow; oh = sl.data('ls-img-real-height') ? sl.data('ls-img-real-height') : oh; // $('body').prepend(new Date().getTime() + " " + sl.attr('src') + ' makeResponsive size: width=' + sl.width() + '; height=' + sl.height() + "
" ); // IMPROVEMENT v4.5.0 Resizing smaller background images in full width mode as well to fill the whole slide var or = ls.g.ratio; if( ls.g.sliderOriginalWidth.indexOf('%') != -1 ){ if( ls.g.sliderWidth() > ow ){ or = ls.g.sliderWidth() / ow; if( ls.g.sliderHeight() > oh * or ){ or = ls.g.sliderHeight() / oh; } }else if( ls.g.sliderHeight() > oh ){ or = ls.g.sliderHeight() / oh; if( ls.g.sliderWidth() > ow * or ){ or = ls.g.sliderWidth() / ow; } } } sl.css({ width : ow * or, height : oh * or, marginLeft : inner.width() / 2 - ow * or / 2, marginTop : inner.height() / 2 - oh * or / 2 }); // $('#w2 span:eq(0)').html( ( inner.width() / 2 ) - Math.round( ow * or / 2 ) ); // $('body').prepend(new Date().getTime() + " " + sl.attr('src') + ' size real: width=' + ow + '; height=' + oh + "
"); } }); layer.css({ display: 'none', visibility: 'visible' }); // Resizing shadow ls.resizeShadow(); callback(); $(this).dequeue(); }; // Resizing shadow ls.resizeShadow = function(){ if( ls.g.shadowImg ){ var resizeShadow = function(){ if( ls.g.shadowImg.height() > 0 ){ if( ls.g.shadowBtmMod > 0 ){ ls.g.shadow.css({ height: ls.g.shadowImg.height() / 2 }); }else{ ls.g.shadow.css({ height: ls.g.shadowImg.height(), marginTop: - ls.g.shadowImg.height() / 2 }); } }else{ setTimeout(function(){ resizeShadow(); },50); } }; resizeShadow(); } }; // Resizing the slider ls.resizeSlider = function(){ if( ls.o.responsiveUnder > 0 ){ if( $(window).width() < ls.o.responsiveUnder ){ ls.g.responsiveMode = true; ls.g.sliderOriginalWidth = ls.o.responsiveUnder + 'px'; }else{ ls.g.responsiveMode = false; ls.g.sliderOriginalWidth = ls.g.sliderOriginalWidthRU; ls.g.ratio = 1; } } // NEW FEATURE v3.0 added "normal" responsive mode with image and font resizing if( ls.g.responsiveMode ){ var parent = $(el).parent(); // BUGFIX v4.0 there is no need to subtract the values of the left and right paddings of the container element! $(el).css({ width : parent.width() - parseInt($(el).css('padding-left')) - parseInt($(el).css('padding-right')) }); ls.g.ratio = $(el).width() / parseInt( ls.g.sliderOriginalWidth ); $(el).css({ height : ls.g.ratio * parseInt( ls.g.sliderOriginalHeight ) }); }else{ ls.g.ratio = 1; $(el).css({ width : ls.g.sliderOriginalWidth, height : ls.g.sliderOriginalHeight }); } // WP fullWidth mode (originally forceResponsive mode) if( $(el).closest('.ls-wp-fullwidth-container').length ){ $(el).closest('.ls-wp-fullwidth-helper').css({ height : $(el).outerHeight(true) }); $(el).closest('.ls-wp-fullwidth-container').css({ height : $(el).outerHeight(true) }); $(el).closest('.ls-wp-fullwidth-helper').css({ width : $(window).width(), left : - $(el).closest('.ls-wp-fullwidth-container').offset().left }); if( ls.g.sliderOriginalWidth.indexOf('%') != -1 ){ var percentWidth = parseInt( ls.g.sliderOriginalWidth ); var newWidth = $('body').width() / 100 * percentWidth - ( $(el).outerWidth() - $(el).width() ); $(el).width( newWidth ); } } $(el).find('.ls-inner, .ls-lt-container').css({ width : ls.g.sliderWidth(), height : ls.g.sliderHeight() }); // BUGFIX v2.0 fixed width problem if firstSlide is not 1 if( ls.g.curLayer && ls.g.nextLayer ){ ls.g.curLayer.css({ width : ls.g.sliderWidth(), height : ls.g.sliderHeight() }); ls.g.nextLayer.css({ width : ls.g.sliderWidth(), height : ls.g.sliderHeight() }); }else{ $(el).find('.ls-slide').css({ width : ls.g.sliderWidth(), height : ls.g.sliderHeight() }); } }; // NEW FEATURE v3.0 added responsive yourLogo ls.resizeYourLogo = function(){ ls.g.yourLogo.css({ width : ls.g.yourLogo.data( 'originalWidth' ) * ls.g.ratio, height : ls.g.yourLogo.data( 'originalHeight' ) * ls.g.ratio }); if( ls.g.ie78 ){ ls.g.yourLogo.css('display','block'); }else{ ls.g.yourLogo.fadeIn(300); } var oL = oR = oT = oB = 'auto'; if( ls.g.yourLogo.data( 'originalLeft' ) && ls.g.yourLogo.data( 'originalLeft' ).indexOf('%') != -1 ){ oL = ls.g.sliderWidth() / 100 * parseInt( ls.g.yourLogo.data( 'originalLeft' ) ) - ls.g.yourLogo.width() / 2 + parseInt( $(el).css('padding-left') ); }else{ oL = parseInt( ls.g.yourLogo.data( 'originalLeft' ) ) * ls.g.ratio; } if( ls.g.yourLogo.data( 'originalRight' ) && ls.g.yourLogo.data( 'originalRight' ).indexOf('%') != -1 ){ oR = ls.g.sliderWidth() / 100 * parseInt( ls.g.yourLogo.data( 'originalRight' ) ) - ls.g.yourLogo.width() / 2 + parseInt( $(el).css('padding-right') ); }else{ oR = parseInt( ls.g.yourLogo.data( 'originalRight' ) ) * ls.g.ratio; } if( ls.g.yourLogo.data( 'originalTop' ) && ls.g.yourLogo.data( 'originalTop' ).indexOf('%') != -1 ){ oT = ls.g.sliderHeight() / 100 * parseInt( ls.g.yourLogo.data( 'originalTop' ) ) - ls.g.yourLogo.height() / 2 + parseInt( $(el).css('padding-top') ); }else{ oT = parseInt( ls.g.yourLogo.data( 'originalTop' ) ) * ls.g.ratio; } if( ls.g.yourLogo.data( 'originalBottom' ) && ls.g.yourLogo.data( 'originalBottom' ).indexOf('%') != -1 ){ oB = ls.g.sliderHeight() / 100 * parseInt( ls.g.yourLogo.data( 'originalBottom' ) ) - ls.g.yourLogo.height() / 2 + parseInt( $(el).css('padding-bottom') ); }else{ oB = parseInt( ls.g.yourLogo.data( 'originalBottom' ) ) * ls.g.ratio; } ls.g.yourLogo.css({ left : oL, right : oR, top : oT, bottom : oB }); }; // NEW FEATURE v3.5 thumbnailNavigation ('always') // Resizing thumbnails ls.resizeThumb = function(){ ls.bottomNavSizeHelper('on'); var sliderW = ls.g.sliderOriginalWidth.indexOf('%') == -1 ? parseInt( ls.g.sliderOriginalWidth ) : ls.g.sliderWidth(); $(el).find('.ls-thumbnail-slide a').css({ width : parseInt( ls.o.tnWidth * ls.g.ratio ), height : parseInt( ls.o.tnHeight * ls.g.ratio ) }); $(el).find('.ls-thumbnail-slide a:last').css({ margin: 0 }); $(el).find('.ls-thumbnail-slide').css({ height : parseInt( ls.o.tnHeight * ls.g.ratio ) }); var tn = $(el).find('.ls-thumbnail'); var originalWidth = ls.o.tnContainerWidth.indexOf('%') == -1 ? parseInt( ls.o.tnContainerWidth ) : parseInt( sliderW / 100 * parseInt( ls.o.tnContainerWidth ) ); tn.css({ width : originalWidth * Math.floor( ls.g.ratio * 100 ) / 100 }); if( tn.width() > $(el).find('.ls-thumbnail-slide').width() ){ tn.css({ width : $(el).find('.ls-thumbnail-slide').width() }); } ls.bottomNavSizeHelper('off'); }; // Changing thumbnails ls.changeThumb = function(index){ var curIndex = index ? index : ls.g.nextLayerIndex; $(el).find('.ls-thumbnail-slide a:not(.ls-thumb-'+curIndex+')').children().each(function(){ $(this).removeClass('ls-thumb-active').stop().fadeTo(750,ls.o.tnInactiveOpacity/100); }); $(el).find('.ls-thumbnail-slide a.ls-thumb-'+curIndex).children().addClass('ls-thumb-active').stop().fadeTo(750,ls.o.tnActiveOpacity/100); }; // Scrolling thumbnails ls.scrollThumb = function(){ if( !$(el).find('.ls-thumbnail-slide-container').hasClass('ls-thumbnail-slide-hover') ){ var curThumb = $(el).find('.ls-thumb-active').length ? $(el).find('.ls-thumb-active').parent() : false; if( curThumb ){ var thumbCenter = curThumb.position().left + curThumb.width() / 2; var mL = $(el).find('.ls-thumbnail-slide-container').width() / 2 - thumbCenter; mL = mL < $(el).find('.ls-thumbnail-slide-container').width() - $(el).find('.ls-thumbnail-slide').width() ? $(el).find('.ls-thumbnail-slide-container').width() - $(el).find('.ls-thumbnail-slide').width() : mL; mL = mL > 0 ? 0 : mL; $(el).find('.ls-thumbnail-slide').animate({ marginLeft : mL }, 600 ); } } }; // IMPROVEMENT v4.1.3 Changed the working of some Thumbnail and Bottom Navigation features ls.bottomNavSizeHelper = function(val){ if( ls.o.hoverBottomNav && !$(el).hasClass('ls-hover') ){ switch(val){ case 'on': ls.g.thumbsWrapper.css({ visibility: 'hidden', display: 'block' }); break; case 'off': ls.g.thumbsWrapper.css({ visibility: 'visible', display: 'none' }); break; } } }; // Animating layers and sublayers ls.animate = function(){ /* GLOBAL (used by both old and new transitions ) */ // Changing variables // BUGFIX v4.6.0 If there is only one layer, there is no need to set ls.g.isAnimating to true if( $(el).find('.ls-slide').length > 1 ){ ls.g.isAnimating = true; } ls.g.isLoading = false; // Clearing timeouts clearTimeout( ls.g.slideTimer ); clearTimeout( ls.g.changeTimer ); ls.g.stopLayer = ls.g.curLayer; // Calling cbAnimStart callback function ls.o.cbAnimStart(ls.g); // NEW FEATURE v3.5 thumbnailNavigation ('always') if( ls.o.thumbnailNavigation == 'always' ){ // ChangeThumb ls.changeThumb(); // ScrollThumb if( !('ontouchstart' in window) ){ ls.scrollThumb(); } } // Adding .ls-animating class to next layer ls.g.nextLayer.addClass('ls-animating'); /* OLD layer transitions (version 3.x) */ // Setting position and styling of current and next layers var curLayerLeft = curLayerRight = curLayerTop = curLayerBottom = nextLayerLeft = nextLayerRight = nextLayerTop = nextLayerBottom = layerMarginLeft = layerMarginRight = layerMarginTop = layerMarginBottom = 'auto'; var curLayerWidth = nextLayerWidth = ls.g.sliderWidth(); var curLayerHeight = nextLayerHeight = ls.g.sliderHeight(); // Calculating direction var prevOrNext = ls.g.prevNext == 'prev' ? ls.g.curLayer : ls.g.nextLayer; var chooseDirection = prevOrNext.data('slidedirection') ? prevOrNext.data('slidedirection') : ls.o.slideDirection; // Setting the direction of sliding var slideDirection = ls.g.slideDirections[ls.g.prevNext][chooseDirection]; if( slideDirection == 'left' || slideDirection == 'right' ){ curLayerWidth = curLayerTop = nextLayerWidth = nextLayerTop = 0; layerMarginTop = 0; } if( slideDirection == 'top' || slideDirection == 'bottom' ){ curLayerHeight = curLayerLeft = nextLayerHeight = nextLayerLeft = 0; layerMarginLeft = 0; } switch(slideDirection){ case 'left': curLayerRight = nextLayerLeft = 0; layerMarginLeft = -ls.g.sliderWidth(); break; case 'right': curLayerLeft = nextLayerRight = 0; layerMarginLeft = ls.g.sliderWidth(); break; case 'top': curLayerBottom = nextLayerTop = 0; layerMarginTop = -ls.g.sliderHeight(); break; case 'bottom': curLayerTop = nextLayerBottom = 0; layerMarginTop = ls.g.sliderHeight(); break; } // Setting start positions and styles of layers ls.g.curLayer.css({ left : curLayerLeft, right : curLayerRight, top : curLayerTop, bottom : curLayerBottom }); ls.g.nextLayer.css({ width : nextLayerWidth, height : nextLayerHeight, left : nextLayerLeft, right : nextLayerRight, top : nextLayerTop, bottom : nextLayerBottom }); // Creating variables for the OLD transitions of CURRENT LAYER // BUGFIX v1.6 fixed some wrong parameters of current layer // BUGFIX v1.7 fixed using of delayout of current layer var curDelay = ls.g.curLayer.data('delayout') ? parseInt(ls.g.curLayer.data('delayout')) : ls.o.delayOut; var curDuration = ls.g.curLayer.data('durationout') ? parseInt(ls.g.curLayer.data('durationout')) : ls.o.durationOut; var curEasing = ls.g.curLayer.data('easingout') ? ls.g.curLayer.data('easingout') : ls.o.easingOut; // Creating variables for the OLD transitions of NEXT LAYER var nextDelay = ls.g.nextLayer.data('delayin') ? parseInt(ls.g.nextLayer.data('delayin')) : ls.o.delayIn; var nextDuration = ls.g.nextLayer.data('durationin') ? parseInt(ls.g.nextLayer.data('durationin')) : ls.o.durationIn; var nextEasing = ls.g.nextLayer.data('easingin') ? ls.g.nextLayer.data('easingin') : ls.o.easingIn; var curLayer = function(){ // BUGFIX v1.6 added an additional delaytime to current layer to fix the '1px gap' bug // BUGFIX v3.0 modified from curDuration / 80 to curDuration / 15 ls.g.curLayer.delay( curDelay + curDuration / 15).animate({ width : curLayerWidth, height : curLayerHeight }, curDuration, curEasing,function(){ curLayerCallback(); }); }; var curLayerCallback = function(){ // Stopping current sublayer animations if needed (they are not visible at this point). ls.g.stopLayer.find(' > *[class*="ls-l"]').each(function(){ if( $(this).data('tr') ){ $(this).data('tr').kill(); } $(this).css({ filter: 'none' }); }); // FIXED v4.0 Calling cbAnimStop callback function before changing layer indexes ls.o.cbAnimStop(ls.g); // Setting current layer ls.g.curLayer = ls.g.nextLayer; ls.g.curLayerIndex = ls.g.nextLayerIndex; $(el).find('.ls-slide:eq(' + ( ls.g.curLayerIndex - 1 ) + ') .asl-txt-typewriter').each(function(item,index){ var typeSpeed = $(this).data('typespeed'); $(this).typewriter(typeSpeed); $(this).removeClass('typewriterNone') // console.log(777) }); // NEW FEATURE v5.0.0 Lazy-load (preloading here the images of the next layer) if( ls.o.imgPreload && ls.o.lazyLoad ){ var preLayerIndex = ls.g.curLayerIndex == ls.g.layersNum ? 1 : ls.g.curLayerIndex + 1; $(el).find('.ls-slide').eq(preLayerIndex-1).find('img:not(.ls-preloaded)').each(function(){ $(this).load(function(){ $(this).addClass('ls-preloaded'); }).error(function(){ var imgURL = $(this).data('src').substring($(this).data('src').lastIndexOf("/") + 1, $(this).data('src').length); if( window.console ){ console.log('LayerSlider error:\r\n\r\nIt seems like the URL of the image or background image "'+imgURL+'" is pointing to a wrong location and it cannot be loaded. Please check the URLs of all your images used in the slider.'); }else{ alert('LayerSlider error:\r\n\r\nIt seems like the URL of the image or background image "'+imgURL+'" is pointing to a wrong location and it cannot be loaded. Please check the URLs of all your images used in the slider.'); } $(this).addClass('ls-not-preloaded'); }).attr('src', $(this).data('src')); }); } // Changing some css classes $(el).find('.ls-slide').removeClass('ls-active'); $(el).find('.ls-slide:eq(' + ( ls.g.curLayerIndex - 1 ) + ')').addClass('ls-active').removeClass('ls-animating'); $(el).find('.ls-bottom-slidebuttons a').removeClass('ls-nav-active'); $(el).find('.ls-bottom-slidebuttons a:eq('+( ls.g.curLayerIndex - 1 )+')').addClass('ls-nav-active'); // Setting timer if needed if( ls.g.autoSlideshow ){ ls.timer(); } // Changing variables ls.g.isAnimating = false; if( ls.g.resize == true ){ ls.makeResponsive( ls.g.curLayer, function(){ ls.g.resize = false; }); } }; var curSubLayers = function(sublayersDurationOut){ ls.g.curLayer.find(' > *[class*="ls-l"]').each(function(){ if( !$(this).data('transitiontype') ){ ls.transitionType( $(this) ); } // BUGFIX v5.1.0 Removing ls-videohack class before starting transition $(this).removeClass('ls-videohack'); var curSubSlideDir = $(this).data('slidedirection') ? $(this).data('slidedirection') : slideDirection; var lml, lmt; switch(curSubSlideDir){ case 'left': lml = -ls.g.sliderWidth(); lmt = 0; break; case 'right': lml = ls.g.sliderWidth(); lmt = 0; break; case 'top': lmt = -ls.g.sliderHeight(); lml = 0; break; case 'bottom': lmt = ls.g.sliderHeight(); lml = 0; break; case 'fade': lmt = 0; lml = 0; break; } // NEW FEATURE v1.6 added slideoutdirection to sublayers // NEW FEATURES 5.0.0 added axis-free transitions with offsetx and offsety properties if( $(this).data('transitiontype') === 'new' ){ var curSubSlideOutDir = 'new'; }else{ var curSubSlideOutDir = $(this).data('slideoutdirection') ? $(this).data('slideoutdirection') : false; } switch(curSubSlideOutDir){ case 'left': lml = ls.g.sliderWidth(); lmt = 0; break; case 'right': lml = -ls.g.sliderWidth(); lmt = 0; break; case 'top': lmt = ls.g.sliderHeight(); lml = 0; break; case 'bottom': lmt = -ls.g.sliderHeight(); lml = 0; break; case 'fade': lmt = 0; lml = 0; break; case 'new': if( $(this).data('offsetxout') ){ if( $(this).data('offsetxout') === 'left' ){ lml = ls.g.sliderWidth(); }else if( $(this).data('offsetxout') === 'right' ){ lml = -ls.g.sliderWidth(); }else{ lml = -parseInt( $(this).data('offsetxout') ); } }else{ lml = -ls.lt.offsetXOut; } if( $(this).data('offsetyout') ){ if( $(this).data('offsetyout') === 'top' ){ lmt = ls.g.sliderHeight(); }else if( $(this).data('offsetyout') === 'bottom' ){ lmt = -ls.g.sliderHeight(); }else{ lmt = -parseInt( $(this).data('offsetyout') ); } }else{ lmt = -ls.lt.offsetYOut; } break; } // NEW FEATURES v4.5.0 Rotating & Scaling sublayers // BUGFIX v4.5.5 changing the default value from 0 to 'none' (because of old jQuery, 1.7.2) // NEW FEATURES v5.0.0 Added SkewX, SkewY, ScaleX, ScaleY, RotateX & RotateY transitions var curSubRotate = curSubRotateX = curSubRotateY = curSubScale = curSubSkewX = curSubSkewY = curSubScaleX = curSubScaleY = 'none'; // if( !ls.g.ie78 && ls.g.enableCSS3 ){ curSubRotate = $(this).data('rotateout') ? $(this).data('rotateout') : ls.lt.rotateOut; curSubRotateX = $(this).data('rotatexout') ? $(this).data('rotatexout') : ls.lt.rotateXOut; curSubRotateY = $(this).data('rotateyout') ? $(this).data('rotateyout') : ls.lt.rotateYOut; curSubScale = $(this).data('scaleout') ? $(this).data('scaleout') : ls.lt.scaleOut; curSubSkewX = $(this).data('skewxout') ? $(this).data('skewxout') : ls.lt.skewXOut; curSubSkewY = $(this).data('skewyout') ? $(this).data('skewyout') : ls.lt.skewYOut; if( curSubScale === 1 ){ curSubScaleX = $(this).data('scalexout') ? $(this).data('scalexout') : ls.lt.scaleXOut; curSubScaleY = $(this).data('scaleyout') ? $(this).data('scaleyout') : ls.lt.scaleYOut; }else{ curSubScaleX = curSubScaleY = curSubScale; } var too = $(this).data('transformoriginout') ? $(this).data('transformoriginout').split(' ') : ls.lt.transformOriginOut; for(var t =0;t $(this).outerHeight() ? $(this).outerWidth() : $(this).outerHeight(); var modX = parseInt( curSubRotate ) === 0 ? $(this).outerWidth() : wh; var modY = parseInt( curSubRotate ) === 0 ? $(this).outerHeight() : wh; if( ( curSubPLevel === -1 && curSubSlideOutDir !== 'new' ) || ( $(this).data('offsetxout') === 'left' || $(this).data('offsetxout') === 'right' ) ){ if( lml < 0 ){ lml = - ( ls.g.sliderWidth() - endLeft + ( curSubScaleX / 2 - .5 ) * modX + 100 ); }else if( lml > 0 ){ lml = endLeft + ( curSubScaleX / 2 + .5 ) * modX + 100; } }else{ lml = lml * ls.g.ratio; } if( ( curSubPLevel === -1 && curSubSlideOutDir !== 'new' ) || ( $(this).data('offsetyout') === 'top' || $(this).data('offsetyout') === 'bottom' ) ){ if( lmt < 0 ){ lmt = - ( ls.g.sliderHeight() - endTop + ( curSubScaleY / 2 - .5 ) * modY + 100 ); }else if( lmt > 0 ){ lmt = endTop + ( curSubScaleY / 2 + .5 ) * modY + 100; } }else{ lmt = lmt * ls.g.ratio; } if( curSubPLevel === -1 || curSubSlideOutDir === 'new' ){ var curSubPar = 1; }else{ var curSubParMod = ls.g.curLayer.data('parallaxout') ? parseInt(ls.g.curLayer.data('parallaxout')) : ls.o.parallaxOut; var curSubPar = curSubPLevel * curSubParMod; } if( $(this).data('transitiontype') === 'new' ){ var deO = ls.lt.delayOut; var duO = ls.lt.durationOut; var eO = ls.lt.easingOut; }else{ var deO = ls.o.delayOut; var duO = ls.o.durationOut; var eO = ls.o.easingOut; } var curSubDelay = $(this).data('delayout') ? parseInt($(this).data('delayout')) : deO; var curSubTime = $(this).data('durationout') ? parseInt($(this).data('durationout')) : duO; var curSubEasing = $(this).data('easingout') ? $(this).data('easingout') : eO; // On new layer transitions, all sublayer will be slide / fade out in 500ms without any delays if(sublayersDurationOut){ curSubDelay = 0; curSubTime = sublayersDurationOut; // curSubEasing = 'easeInExpo'; } // Clearing showUntilTimers if( $(this).data('showUntilTimer') ){ clearTimeout( $(this).data('showUntilTimer') ); } var css = { visibility : 'hidden' }; var el = $(this); var transition = { rotation : curSubRotate, rotationX : curSubRotateX, rotationY : curSubRotateY, skewX : curSubSkewX, skewY : curSubSkewY, scaleX : curSubScaleX, scaleY : curSubScaleY, x : -lml * curSubPar, y : -lmt * curSubPar, delay : curSubDelay/1000, ease : lsConvertEasing( curSubEasing ), onComplete : function(){ el.css( css ); } }; if( curSubSlideOutDir == 'fade' || ( !curSubSlideOutDir && curSubSlideDir === 'fade' ) || ( $(this).data('fadeout') !== 'false' && $(this).data('transitiontype') === 'new' ) ){ transition['opacity'] = 0; css['opacity'] = $(this).data( 'originalOpacity' ); } if( $(this).data('tr') ){ $(this).data('tr').kill(); } TweenLite.set( $(this)[0],{ transformOrigin : curSubTransformOrigin, transformPerspective : curSubPerspective }); $(this).data('tr', TweenLite.to($(this)[0],curSubTime/1000,transition) ); // $(this).stop(true,false).delay( curSubDelay ).animate( transition, curSubTime, curSubEasing,function(){ // $(this).css( css ); // }); }); }; var nextLayer = function(){ ls.g.nextLayer.delay( curDelay + nextDelay ).animate({ width : ls.g.sliderWidth(), height : ls.g.sliderHeight() }, nextDuration, nextEasing ); }; var nextSubLayers = function(){ if( ls.g.totalDuration ){ curDelay = 0; } // Needed for the Timeline if( typeof ls.o.cbTimeLineStart === 'function' ){ ls.o.cbTimeLineStart(ls.g, curDelay+nextDelay ); } ls.g.nextLayer.find(' > *[class*="ls-l"]').each(function(){ // Replacing global parameters with unique if need // NEW FEATURES 5.0.0 added axis-free transitions with offsetx and offsety properties if( !$(this).data('transitiontype') ){ ls.transitionType( $(this) ); } if( $(this).data('transitiontype') === 'new' ){ var nextSubSlideDir = 'new'; }else{ var nextSubSlideDir = $(this).data('slidedirection') ? $(this).data('slidedirection') : slideDirection; } var lml, lmt; switch(nextSubSlideDir){ case 'left': lml = -ls.g.sliderWidth(); lmt = 0; break; case 'right': lml = ls.g.sliderWidth(); lmt = 0; break; case 'top': lmt = -ls.g.sliderHeight(); lml = 0; break; case 'bottom': lmt = ls.g.sliderHeight(); lml = 0; break; case 'fade': lmt = 0; lml = 0; break; case 'new': if( $(this).data('offsetxin') ){ if( $(this).data('offsetxin') === 'left' ){ lml = -ls.g.sliderWidth(); }else if( $(this).data('offsetxin') === 'right' ){ lml = ls.g.sliderWidth(); }else{ lml = parseInt( $(this).data('offsetxin') ); } }else{ lml = ls.lt.offsetXIn; } if( $(this).data('offsetyin') ){ if( $(this).data('offsetyin') === 'top' ){ lmt = -ls.g.sliderHeight(); }else if( $(this).data('offsetyin') === 'bottom' ){ lmt = ls.g.sliderHeight(); }else{ lmt = parseInt( $(this).data('offsetyin') ); } }else{ lmt = ls.lt.offsetYIn; } break; } // NEW FEATURE v4.5.0 Rotating & Scaling sublayers // BUGFIX v4.5.5 changing the default value from 0 to 'none' (because of old jQuery, 1.7.2) // NEW FEATURES v5.0.0 Added SkewX, SkewY, ScaleX, ScaleY, RotateX & RotateY transitions var nextSubRotate = nextSubRotateX = nextSubRotateY = nextSubScale = nextSubSkewX = nextSubSkewY = nextSubScaleX = nextSubScaleY = 'none'; // if( !ls.g.ie78 && ls.g.enableCSS3 ){ nextSubRotate = $(this).data('rotatein') ? $(this).data('rotatein') : ls.lt.rotateIn; nextSubRotateX = $(this).data('rotatexin') ? $(this).data('rotatexin') : ls.lt.rotateXIn; nextSubRotateY = $(this).data('rotateyin') ? $(this).data('rotateyin') : ls.lt.rotateYIn; nextSubScale = $(this).data('scalein') ? $(this).data('scalein') : ls.lt.scaleIn; nextSubSkewX = $(this).data('skewxin') ? $(this).data('skewxin') : ls.lt.skewXIn; nextSubSkewY = $(this).data('skewyin') ? $(this).data('skewyin') : ls.lt.skewYIn; if( nextSubScale === 1 ){ nextSubScaleX = $(this).data('scalexin') ? $(this).data('scalexin') : ls.lt.scaleXIn; nextSubScaleY = $(this).data('scaleyin') ? $(this).data('scaleyin') : ls.lt.scaleYIn; }else{ nextSubScaleX = nextSubScaleY = nextSubScale; } var toi = $(this).data('transformoriginin') ? $(this).data('transformoriginin').split(' ') : ls.lt.transformOriginIn; for(var t =0;t $(this).outerHeight() ? $(this).outerWidth() : $(this).outerHeight(); var modX = parseInt( nextSubRotate ) === 0 ? $(this).outerWidth() : wh; var modY = parseInt( nextSubRotate ) === 0 ? $(this).outerHeight() : wh; // console.log( modX, $(this).outerWidth(), $(this).width(), $(this).height(), $(this)[0].style.width, $(this).outerHeight(), wh ); if( ( nextSubPLevel === -1 && nextSubSlideDir !== 'new' ) || ( $(this).data('offsetxin') === 'left' || $(this).data('offsetxin') === 'right' ) ){ if( lml < 0 ){ lml = - ( endLeft + ( nextSubScaleX / 2 + .5 ) * modX + 100 ); }else if( lml > 0 ){ lml = ls.g.sliderWidth() - endLeft + ( nextSubScaleX / 2 - .5 ) * modX + 100; } }else{ lml = lml * ls.g.ratio; } if( ( nextSubPLevel === -1 && nextSubSlideDir !== 'new' ) || ( $(this).data('offsetyin') === 'top' || $(this).data('offsetyin') === 'bottom' ) ){ if( lmt < 0 ){ lmt = - ( endTop + ( nextSubScaleY / 2 + .5 ) * modY + 100 ); }else if( lmt > 0 ){ lmt = ls.g.sliderHeight() - endTop + ( nextSubScaleY / 2 - .5 ) * modY + 100; } }else{ lmt = lmt * ls.g.ratio; } if( nextSubPLevel === -1 || nextSubSlideDir === 'new'){ var nextSubPar = 1; }else{ var nextSubParMod = ls.g.nextLayer.data('parallaxin') ? parseInt(ls.g.nextLayer.data('parallaxin')) : ls.o.parallaxIn; var nextSubPar = nextSubPLevel * nextSubParMod; } if( $(this).data('transitiontype') === 'new' ){ var deI = ls.lt.delayIn; var duI = ls.lt.durationIn; var eI = ls.lt.easingIn; }else{ var deI = ls.o.delayIn; var duI = ls.o.durationIn; var eI = ls.o.easingIn; } var nextSubDelay = $(this).data('delayin') ? parseInt($(this).data('delayin')) : deI; var nextSubTime = $(this).data('durationin') ? parseInt($(this).data('durationin')) : duI; var nextSubEasing = $(this).data('easingin') ? $(this).data('easingin') : eI; var cursub = $(this); var nextSubCallback = function(){ // BUGFIX v5.1.0 Removing transition property from video layers if( cursub.hasClass('ls-video-layer') ){ cursub.addClass('ls-videohack'); } // NEW FEATURE v2.0 autoPlayVideos if( ls.o.autoPlayVideos == true ){ cursub.find('.ls-videopreview, video, audio').click(); } // NEW FEATURE v3.0 showUntil sublayers if( cursub.data('showuntil') > 0 ){ // IMPROVEMENT v4.5.0 sublayerShowUntil will be called anly if necessary cursub.data('showUntilTimer', setTimeout(function(){ ls.sublayerShowUntil( cursub ); }, cursub.data('showuntil') )); } }; $(this).css({ marginLeft : 0, marginTop : 0 }); var css = { scaleX : nextSubScaleX, scaleY : nextSubScaleY, skewX : nextSubSkewX, skewY : nextSubSkewY, rotation : nextSubRotate, rotationX : nextSubRotateX, rotationY : nextSubRotateY, visibility : 'visible', x : lml * nextSubPar, y : lmt * nextSubPar }; var transition = { rotation : 0, rotationX : 0, rotationY : 0, skewX : 0, skewY : 0, scaleX : 1, scaleY : 1, ease : lsConvertEasing( nextSubEasing ), delay : nextSubDelay/1000, x : 0, y : 0, onComplete : function(){ nextSubCallback(); } }; if( nextSubSlideDir.indexOf('fade') != -1 || ( $(this).data('fadein') !== 'false' && $(this).data('transitiontype') === 'new' ) ){ css['opacity'] = 0; transition['opacity'] = $(this).data( 'originalOpacity' ); } // $(this).css( css ); // $(this).stop().delay( curDelay + nextDelay + nextSubDelay ).animate( transition, nextSubTime, nextSubEasing, function(){ // if( ls.g.ie78 & $(this).data( 'originalOpacity') === 1 ){ // $(this).get(0).style.removeAttribute('filter'); // } // nextSubCallback(); // }); if( $(this).data('tr') ){ $(this).data('tr').kill(); } TweenLite.set( $(this)[0],{ transformPerspective : nextSubPerspective, transformOrigin : nextSubTransformOrigin }); $(this).data('tr', TweenLite.fromTo($(this)[0],nextSubTime/1000,css,transition) ); }); }; /* NEW FEATURE v4.0 2D & 3D Layer Transitions */ // Selecting ONE transition (random) // If the browser doesn't support CSS3 3D, 2D fallback mode will be used instead // In this case, if user didn't specify any 2D transitions, a random will be selected var selectTransition = function(){ // if the browser supports CSS3 3D and user specified at least one of 3D transitions if( lsSupport3D( $(el) ) && ( ls.g.nextLayer.data('transition3d') || ls.g.nextLayer.data('customtransition3d') ) ){ if( ls.g.nextLayer.data('transition3d') && ls.g.nextLayer.data('customtransition3d') ){ var rnd = Math.floor(Math.random() * 2); var rndT = [['3d',ls.g.nextLayer.data('transition3d')],['custom3d',ls.g.nextLayer.data('customtransition3d')]]; getTransitionType(rndT[rnd][0],rndT[rnd][1]); }else if( ls.g.nextLayer.data('transition3d') ){ getTransitionType('3d',ls.g.nextLayer.data('transition3d')); }else{ getTransitionType('custom3d',ls.g.nextLayer.data('customtransition3d')); } }else{ if( ls.g.nextLayer.data('transition2d') && ls.g.nextLayer.data('customtransition2d') ){ var rnd = Math.floor(Math.random() * 2); var rndT = [['2d',ls.g.nextLayer.data('transition2d')],['custom2d',ls.g.nextLayer.data('customtransition2d')]]; getTransitionType(rndT[rnd][0],rndT[rnd][1]); }else if( ls.g.nextLayer.data('transition2d') ){ getTransitionType('2d',ls.g.nextLayer.data('transition2d')); }else if( ls.g.nextLayer.data('customtransition2d') ){ getTransitionType('custom2d',ls.g.nextLayer.data('customtransition2d')); }else{ getTransitionType('2d','1'); } } }; // Needed by the demo page var selectCustomTransition = function(){ if( lsSupport3D( $(el) ) && LSCustomTransition.indexOf('3d') != -1 ){ getTransitionType('3d',LSCustomTransition.split(':')[1]); }else{ if( LSCustomTransition.indexOf('3d') != -1){ getTransitionType('2d','all'); }else{ getTransitionType('2d',LSCustomTransition.split(':')[1]); } } }; // Choosing layer transition type (2d, 3d, or both) var getTransitionType = function(type,transitionlist){ var tr = type.indexOf('custom') == -1 ? ls.t : ls.ct; var tt = '3d', lt, number; if( type.indexOf('2d') != -1 ){ tt = '2d'; } if( transitionlist.indexOf('last') != -1 ){ number = tr['t'+tt].length-1; lt = 'last'; }else if( transitionlist.indexOf('all') != -1){ number = Math.floor(Math.random() * lsCountProp(tr['t'+tt]) ); lt = 'random from all'; }else{ var t = transitionlist.split(','); var l = t.length; number = parseInt(t[Math.floor(Math.random() * l)])-1; lt = 'random from specified'; } slideTransition(tt,tr['t'+tt][number]); // $('.test').html('Originals:

t3D: '+ls.g.nextLayer.data('transition3d')+'
t2D: '+ls.g.nextLayer.data('transition2d')+'
custom3D: '+ls.g.nextLayer.data('customtransition3d')+'
custom2D: '+ls.g.nextLayer.data('customtransition2d')+'

Support 3D: '+lsSupport3D( $(el) )+'

Selected transition:

Type: '+type+' ('+lt+')
Number in transition list: '+(number+1)+'
Name of the transition: '+tr['t'+tt][number]['name']); }; // The slideTransition function var slideTransition = function(type,prop){ var inner = $(el).find('.ls-inner'); // sublayersDurationOut - for future usage var sublayersDurationOut = ls.g.curLayer.find('*[class*="ls-l"]').length > 0 ? 1000 : 0; // Detecting a carousel transition - Transition name must have the carousel string var carousel = prop.name.toLowerCase().indexOf('carousel') == -1 ? false : true; // Detecting a crossfade transition - Transition name must have the crossfad string var crossfade = prop.name.toLowerCase().indexOf('crossfad') == -1 ? false : true; // Calculating cols and rows var cols = typeof(prop.cols); var rows = typeof(prop.rows); switch( cols ){ case 'number': cols = prop.cols; break; case 'string': cols = Math.floor( Math.random() * ( parseInt( prop.cols.split(',')[1] ) - parseInt( prop.cols.split(',')[0] ) + 1) ) + parseInt( prop.cols.split(',')[0] ); break; default: cols = Math.floor( Math.random() * ( prop.cols[1] - prop.cols[0] + 1) ) + prop.cols[0]; break; } switch( rows ){ case 'number': rows = prop.rows; break; case 'string': rows = Math.floor( Math.random() * ( parseInt( prop.rows.split(',')[1] ) - parseInt( prop.rows.split(',')[0] ) + 1) ) + parseInt( prop.rows.split(',')[0] ); break; default: rows = Math.floor( Math.random() * ( prop.rows[1] - prop.rows[0] + 1) ) + prop.rows[0]; break; } if( ( ls.g.isMobile() == true && ls.o.optimizeForMobile == true ) || ( ls.g.ie78 && ls.o.optimizeForIE78 == true ) ){ // Reducing cols in three steps if( cols >= 15 ){ cols = 7; }else if( cols >= 5 ){ cols = 4; }else if( cols >= 4 ){ cols = 3; }else if( cols > 2 ){ cols = 2; } // Reducing rows in three steps if( rows >= 15 ){ rows = 7; }else if( rows >= 5 ){ rows = 4; }else if( rows >= 4 ){ rows = 3; }else if( rows > 2 ){ rows = 2; } // Reducing more :) if( rows > 2 && cols > 2 ){ rows = 2; if( cols > 4){ cols = 4; } } } var tileWidth = $(el).find('.ls-inner').width() / cols; var tileHeight = $(el).find('.ls-inner').height() / rows; // Creating HTML markup for layer transitions if( !ls.g.ltContainer ){ ls.g.ltContainer = $('
').addClass('ls-lt-container').addClass('ls-overflow-hidden').css({ width : inner.width(), height : inner.height() }).prependTo( inner ); }else{ ls.g.ltContainer.stop(true,true).empty().css({ display : 'block', width : inner.width(), height : inner.height() }); } // Setting size var restW = inner.width() - Math.floor(tileWidth) * cols; var restH = inner.height() - Math.floor(tileHeight) * rows; var tileSequence = []; // IMPROVEMENT v4.1.3 Array-randomizer is now a local function // Randomize array function tileSequence.randomize = function() { var i = this.length, j, tempi, tempj; if ( i == 0 ) return false; while ( --i ) { j = Math.floor( Math.random() * ( i + 1 ) ); tempi = this[i]; tempj = this[j]; this[i] = tempj; this[j] = tempi; } return this; } for(var ts=0; ts').addClass('ls-curtiles').appendTo( ls.g.ltContainer ); ls.g.nextTiles = $('
').addClass('ls-nexttiles').appendTo( ls.g.ltContainer ); } var pn = ls.g.prevNext; // Creating cuboids for 3d or tiles for 2d transition (cols * rows) for(var tiles=0; tiles < cols * rows; tiles++){ var rW = tiles%cols == 0 ? restW : 0; var rH = tiles > (rows-1)*cols-1 ? restH : 0; var tile = $('
').addClass('ls-lt-tile').css({ width : Math.floor(tileWidth) + rW, height : Math.floor(tileHeight) + rH }).appendTo( ls.g.ltContainer ); var curTile, nextTile; // If current transition is a 3d transition if( type == '3d' ){ tile.addClass('ls-3d-container'); var W = Math.floor(tileWidth) + rW; var H = Math.floor(tileHeight) + rH; var D; if( prop.animation.direction == 'horizontal' ){ if( Math.abs(prop.animation.transition.rotateY) > 90 && prop.tile.depth != 'large' ){ D = Math.floor( W / 7 ) + rW; }else{ D = W; } }else{ if( Math.abs(prop.animation.transition.rotateX) > 90 && prop.tile.depth != 'large' ){ D = Math.floor( H / 7 ) + rH; }else{ D = H; } } var W2 = W/2; var H2 = H/2; var D2 = D/2; // createCuboids function will append cuboids with their style settings to their container // BUGFIX v5.1.2 the prefixless transform must be the last property var createCuboids = function(c,a,w,h,tx,ty,tz,rx,ry){ $('
').addClass(c).css({ width: w, height: h, '-o-transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1) translate(50%, 50%)', '-ms-transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1) translate(50%, 50%)', '-moz-transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1) translate(50%, 50%)', '-webkit-transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1) translate(50%, 50%)', 'transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1) translate(50%, 50%)' }).appendTo(a); }; createCuboids('ls-3d-box',tile,0,0,0,0,-D2,0,0); var backRotX = 0 var topRotX = 0 var bottomRotX = 0 if( prop.animation.direction == 'vertical' && Math.abs(prop.animation.transition.rotateX) > 90){ createCuboids('ls-3d-back',tile.find('.ls-3d-box'),W,H,-W2,-H2,-D2,180,0); }else{ createCuboids('ls-3d-back',tile.find('.ls-3d-box'),W,H,-W2,-H2,-D2,0,180); } createCuboids('ls-3d-bottom',tile.find('.ls-3d-box'),W,D,-W2,H2-D2,0,-90,0); createCuboids('ls-3d-top',tile.find('.ls-3d-box'),W,D,-W2,-H2-D2,0,90,0); createCuboids('ls-3d-front',tile.find('.ls-3d-box'),W,H,-W2,-H2,D2,0,0); createCuboids('ls-3d-left',tile.find('.ls-3d-box'),D,H,-W2-D2,-H2,0,0,-90); createCuboids('ls-3d-right',tile.find('.ls-3d-box'),D,H,W2-D2,-H2,0,0,90); curTile = tile.find('.ls-3d-front'); if( prop.animation.direction == 'horizontal' ){ if( Math.abs(prop.animation.transition.rotateY) > 90 ){ nextTile = tile.find('.ls-3d-back'); }else{ nextTile = tile.find('.ls-3d-left, .ls-3d-right'); } }else{ if( Math.abs(prop.animation.transition.rotateX) > 90 ){ nextTile = tile.find('.ls-3d-back'); }else{ nextTile = tile.find('.ls-3d-top, .ls-3d-bottom'); } } // Animating cuboids var curCubDelay = tileSequence[tiles] * prop.tile.delay; var curCub = ls.g.ltContainer.find('.ls-3d-container:eq('+tiles+') .ls-3d-box'); var tl = new TimelineLite(); if( prop.before && prop.before.transition ){ prop.before.transition.delay = prop.before.transition.delay ? (prop.before.transition.delay + curCubDelay)/1000 : curCubDelay/1000; tl.to( curCub[0],prop.before.duration/1000,lsConvertTransition( prop.before.transition, prop.before.easing )); }else{ prop.animation.transition.delay = prop.animation.transition.delay ? (prop.animation.transition.delay + curCubDelay)/1000 : curCubDelay/1000; } tl.to( curCub[0],prop.animation.duration/1000,lsConvertTransition( prop.animation.transition, prop.animation.easing )); if( prop.after ){ if( !prop.after.transition ){ prop.after.transition = {}; } tl.to( curCub[0],prop.after.duration/1000,lsConvertTransition( prop.after.transition, prop.after.easing, 'after' )); } }else{ // If current transition is a 2d transition var T1 = L1 = T2 = L2 = 'auto'; var O1 = O2 = 1; if( prop.transition.direction == 'random' ){ var dir = ['top','bottom','right','left']; var direction = dir[Math.floor(Math.random() * dir.length )]; }else{ var direction = prop.transition.direction; } // IMPROVEMENT v4.5.0 Reversing animation directions if slider is moving backwards if( prop.name.toLowerCase().indexOf('mirror') != -1 && tiles%2 == 0 ){ if( pn == 'prev' ){ pn = 'next'; }else{ pn = 'prev'; } } if( pn == 'prev' ){ switch( direction ){ case 'top': direction = 'bottom'; break; case 'bottom': direction = 'top'; break; case 'left': direction = 'right'; break; case 'right': direction = 'left'; break; case 'topleft': direction = 'bottomright'; break; case 'topright': direction = 'bottomleft'; break; case 'bottomleft': direction = 'topright'; break; case 'bottomright': direction = 'topleft'; break; } } switch( direction ){ case 'top': T1 = T2 = -tile.height(); L1 = L2 = 0; break; case 'bottom': T1 = T2 = tile.height(); L1 = L2 = 0; break; case 'left': T1 = T2 = 0; L1 = L2 = -tile.width(); break; case 'right': T1 = T2 = 0; L1 = L2 = tile.width(); break; case 'topleft': T1 = tile.height(); T2 = 0; L1 = tile.width(); L2 = 0; break; case 'topright': T1 = tile.height(); T2 = 0; L1 = - tile.width(); L2 = 0; break; case 'bottomleft': T1 = - tile.height(); T2 = 0; L1 = tile.width(); L2 = 0; break; case 'bottomright': T1 = - tile.height(); T2 = 0; L1 = - tile.width(); L2 = 0; break; } ls.g.scale2D = prop.transition.scale ? prop.transition.scale : 1; if( carousel == true && ls.g.scale2D != 1 ){ T1 = T1 / 2; T2 = T2 / 2; L1 = L1 / 2; L2 = L2 / 2; } // Selecting the type of the transition // if( !ls.g.ie78 || ( ls.g.ie78 && !ls.o.optimizeForIE78 ) || ( ls.g.ie78 && ls.o.optimizeForIE78 == true && prop.name.toLowerCase().indexOf('crossfade') != -1 ) ){ switch( prop.transition.type ){ case 'fade': T1 = T2 = L1 = L2 = 0; O1 = 0; O2 = 1; break; case 'mixed': O1 = 0; O2 = 1; if( ls.g.scale2D == 1 ){ T2 = L2 = 0; } break; } // } // IMPROVEMENT v4.5.0 Implemented Rotation and Scale into 2D Transitions if((( prop.transition.rotate || prop.transition.rotateX || prop.transition.rotateY ) || ls.g.scale2D != 1 ) && !ls.g.ie78 && prop.transition.type != 'slide' ){ tile.css({ overflow : 'visible' }); }else{ tile.css({ overflow : 'hidden' }); } if( carousel == true){ ls.g.curTiles.css({ overflow: 'visible' }); }else{ ls.g.curTiles.css({ overflow: 'hidden' }); } if( crossfade == true || prop.transition.type == 'slide' || carousel == true ){ var tileInCur = tile.appendTo( ls.g.curTiles ); var tileInNext = tile.clone().appendTo( ls.g.nextTiles ); curTile = $('
').addClass('ls-curtile').appendTo( tileInCur ); }else{ var tileInNext = tile.appendTo( ls.g.nextTiles ); } nextTile = $('
').addClass('ls-nexttile').appendTo( tileInNext ).css({ top : -T1, left : -L1, dispay : 'block', opacity : O1 }); // Animating tiles var curTileDelay = tileSequence[tiles] * prop.tile.delay; // IMPROVEMENT v4.5.0 Implemented various types of rotations into 2D Transitions var r = prop.transition.rotate ? prop.transition.rotate : 0; var rX = prop.transition.rotateX ? prop.transition.rotateX : 0; var rY = prop.transition.rotateY ? prop.transition.rotateY : 0; // Reversing rotation degrees if slider is moving backwards if( pn == 'prev' ){ r = -r; rX = -rX; rY = -rY; } TweenLite.fromTo(nextTile[0],prop.transition.duration/1000,{ rotation : r, rotationX : rX, rotationY : rY, scale : ls.g.scale2D },{ delay : curTileDelay / 1000, top : 0, left : 0, opacity : O2, rotation : 0, rotationX : 0, rotationY : 0, scale : 1, ease : lsConvertEasing( prop.transition.easing ) }); // IMPROVEMENT v5.0.0 Smart crossfading for semi-transparent PNG and different size JPG backgrounds if( crossfade == true && ( nextBG.length < 1 || ( nextBG.length > 0 && ( nextBG.attr('src').toLowerCase().indexOf('png') != -1 || ( nextBG.width() < ls.g.sliderWidth() || nextBG.height() < ls.g.sliderHeight() ) ) ) ) ){ TweenLite.to(curTile[0],prop.transition.duration/1000,{ delay : curTileDelay / 1000, opacity : 0, ease : lsConvertEasing( prop.transition.easing ) }); } if( ( prop.transition.type == 'slide' || carousel == true ) && prop.name.toLowerCase().indexOf('mirror') == -1 ){ var r2 = 0; if( r != 0 ){ r2 = -r; } TweenLite.to(curTile[0],prop.transition.duration/1000,{ delay : curTileDelay / 1000, top : T2, left : L2, rotation : r2, scale : ls.g.scale2D, opacity: O1, ease : lsConvertEasing( prop.transition.easing ) }); } } // Appending the background images of current and next layers into the tiles on both of 2d & 3d transitions // BUGFIX v5.0.0 added Math.floor to prevent '1px bug' under Safari and Firefox if( curBG.length ){ if( type == '3d' || ( type == '2d' && ( crossfade == true || prop.transition.type == 'slide' || carousel == true ) ) ){ curTile.append($('').attr({'src':curBG.attr('src'),'alt':curBG.attr('alt')}).css({ width : curBG[0].style.width, height : curBG[0].style.height, marginLeft : parseFloat(curBG.css('margin-left')) - parseFloat(tile.position().left), marginTop : parseFloat(curBG.css('margin-top')) - parseFloat(tile.position().top) })); }else if( ls.g.curTiles.children().length == 0 ){ ls.g.curTiles.append($('').attr({'src':curBG.attr('src'),'alt':curBG.attr('alt')}).css({ width : curBG[0].style.width, height : curBG[0].style.height, marginLeft : parseFloat(curBG.css('margin-left')), marginTop : parseFloat(curBG.css('margin-top')) })); } } if( nextBG.length ){ nextTile.append($('').attr({'src':nextBG.attr('src'),'alt':nextBG.attr('alt')} ).css({ width : nextBG[0].style.width, height : nextBG[0].style.height, marginLeft : parseFloat(nextBG.css('margin-left')) - parseFloat(tile.position().left), marginTop : parseFloat(nextBG.css('margin-top')) - parseFloat(tile.position().top) })); } } // Storing current and next layer elements in a local variable (needed by setTimeout functions in some cases) var curLayer = ls.g.curLayer; var nextLayer = ls.g.nextLayer; // Hiding the background image of the current and next layers (immediately) setTimeout(function(){ curLayer.find('.ls-bg').css({ visibility : 'hidden' }); },50); nextLayer.find('.ls-bg').css({ visibility : 'hidden' }); ls.g.ltContainer.removeClass('ls-overflow-hidden'); // Sliding out the sublayers of the current layer // (immediately, delay out and duration out properties are not applied to the sublayers during the new layer transitions) curSubLayers(sublayersDurationOut); // Hiding current layer after its sublayers animated out setTimeout(function(){ curLayer.css({ width: 0 }); },sublayersDurationOut ); // Calculating next layer delay var nextLayerTimeShift = parseInt(nextLayer.data('timeshift')) ? parseInt(nextLayer.data('timeshift')) : 0; var nextLayerDelay = ls.g.totalDuration + nextLayerTimeShift > 0 ? ls.g.totalDuration + nextLayerTimeShift : 0; // Showing next layer and sliding sublayers of the next layer in after the current layer transition ended setTimeout(function(){ if( ls.g.resize == true ){ ls.g.ltContainer.empty(); curLayer.removeClass('ls-active'); ls.makeResponsive( nextLayer, function(){ ls.g.resize = false; }); } // Sliding in / fading in the sublayers of the next layer nextSubLayers(); // NEW FEATURE v4.6.0 Hiding background if the next layer has png BG or has no BG // BUGFIX v4.6.1 Changed some properties to prevent flickering if( nextLayer.find('.ls-bg').length < 1 || ( nextLayer.find('.ls-bg').length > 0 && nextLayer.find('.ls-bg').attr('src').toLowerCase().indexOf('png') != -1 ) ){ ls.g.ltContainer.delay(350).fadeOut(300,function(){ $(this).empty().show(); }); } // Displaying the next layer (immediately) nextLayer.css({ width : ls.g.sliderWidth(), height : ls.g.sliderHeight() }); }, nextLayerDelay ); // BUGFIX v5.0.1 Added a minimal value of ls.g.totalDuration // CHANGED in v5.1.0 due to a fading issue in carousel transition if( ls.g.totalDuration < 300 ){ ls.g.totalDuration = 1000; } // Changing visibility to visible of the background image of the next layer and overflow to hidden of .ls-lt-container after the transition and calling callback function setTimeout(function(){ ls.g.ltContainer.addClass('ls-overflow-hidden'); nextLayer.find('.asl-txt-typewriter').addClass('typewriterNone') nextLayer.addClass('ls-active'); if( nextLayer.find('.ls-bg').length ){ nextLayer.find('.ls-bg').css({ display : 'none', visibility : 'visible' }); if( ls.g.ie78 ){ nextLayer.find('.ls-bg').css('display','block'); //xuke 消除延迟 curLayerCallback(); setTimeout(function(){ //curLayerCallback(); },500); }else{ //xuke 消除延迟 curLayerCallback(); nextLayer.find('.ls-bg').fadeIn(500, function(){ //curLayerCallback(); }); } }else{ curLayerCallback(); } }, ls.g.totalDuration ); }; /* Selecting and running the transition */ var tType = ( ( ls.g.nextLayer.data('transition3d') || ls.g.nextLayer.data('transition2d') ) && ls.t ) || ( ( ls.g.nextLayer.data('customtransition3d') || ls.g.nextLayer.data('customtransition2d') ) && ls.ct ) ? 'new' : 'old'; if( !ls.g.nextLayer.data('transitiontype') ){ ls.transitionType( ls.g.nextLayer ); } if( ls.g.nextLayer.data('transitiontype') === 'new' ){ tType = 'new'; } if( ls.o.slideTransition ){ tType = 'forced'; } if( ls.o.animateFirstSlide && !ls.g.firstSlideAnimated ){ // BUGFIX v3.5 there is no need to animate 'current' layer if the following conditions are true // this fixes the sublayer animation direction bug if( ls.g.layersNum == 1 ){ var curDelay = 0; // IMPROVEMENT v4.1.0 Calling cbAnimStop(); function if only one layer is in the slider ls.o.cbAnimStop(ls.g); }else{ var nextLayerTimeShift = parseInt(ls.g.nextLayer.data('timeshift')) ? parseInt(ls.g.nextLayer.data('timeshift')) : 0; var d = tType == 'new' ? 0 : curDuration; ls.g.t5 = setTimeout(function(){ curLayerCallback(); }, d + Math.abs(nextLayerTimeShift) ); } // curDelay must be 0! ls.g.totalDuration = true; // Animating SUBLAYERS of the first layer nextSubLayers(); // Displaying the first layer (immediately) ls.g.nextLayer.css({ width : ls.g.sliderWidth(), height : ls.g.sliderHeight() }); if( !ls.g.ie78 ){ ls.g.nextLayer.find('.ls-bg').css({ display : 'none' }).fadeIn(500); } ls.g.firstSlideAnimated = true; ls.g.isLoading = false; }else{ switch(tType){ // Old transitions (sliding layers) case 'old': ls.g.totalDuration = false; // BUGFIX v4.5.0 Removing elements from ls-lt-container is necessary if( ls.g.ltContainer ){ ls.g.ltContainer.empty(); } // Animating CURRENT LAYER and its SUBLAYERS curLayer(); curSubLayers(); // Animating NEXT LAYER and its SUBLAYERS nextLayer(); nextSubLayers(); break; // NEW FEATURE v4.0 2D & 3D Layer Transitions case 'new': if( typeof LSCustomTransition != 'undefined' ){ selectCustomTransition(); }else{ selectTransition(); } break; case 'forced': slideTransition( ls.o.slideTransition.type, ls.o.slideTransition.obj ); break; } } }; ls.transitionType = function( el ){ var ttype = el.data('ls') || ( !el.data('ls') && !el.data('slidedelay') && !el.data('slidedirection') && !el.data('slideoutdirection') && !el.data('delayin') && !el.data('delayout') && !el.data('durationin') && !el.data('durationout') && !el.data('showuntil') && !el.data('easingin') && !el.data('easingout') && !el.data('scalein') && !el.data('scaleout') && !el.data('rotatein') && !el.data('rotateout') ) ? 'new' : 'old'; el.data('transitiontype', ttype); }; ls.sublayerShowUntil = function( sublayer ){ if( !sublayer.data('transitiontype') ){ ls.transitionType( sublayer ); } // BUGFIX v5.1.0 Removing ls-videohack class before starting transition sublayer.removeClass('ls-videohack'); var prevOrNext = ls.g.curLayer; if( ls.g.prevNext != 'prev' && ls.g.nextLayer ){ prevOrNext = ls.g.nextLayer; } var chooseDirection = prevOrNext.data('slidedirection') ? prevOrNext.data('slidedirection') : ls.o.slideDirection; // Setting the direction of sliding var slideDirection = ls.g.slideDirections[ls.g.prevNext][chooseDirection]; var curSubSlideDir = sublayer.data('slidedirection') ? sublayer.data('slidedirection') : slideDirection; var lml, lmt; switch(curSubSlideDir){ case 'left': lml = -ls.g.sliderWidth(); lmt = 0; break; case 'right': lml = ls.g.sliderWidth(); lmt = 0; break; case 'top': lmt = -ls.g.sliderHeight(); lml = 0; break; case 'bottom': lmt = ls.g.sliderHeight(); lml = 0; break; case 'fade': lmt = 0; lml = 0; break; } // NEW FEATURE v1.6 added slideoutdirection to sublayers // NEW FEATURES 5.0.0 added axis-free transitions with offsetx and offsety properties if( sublayer.data('transitiontype') === 'new' ){ var curSubSlideOutDir = 'new'; }else{ var curSubSlideOutDir = sublayer.data('slideoutdirection') ? sublayer.data('slideoutdirection') : false; } switch(curSubSlideOutDir){ case 'left': lml = ls.g.sliderWidth(); lmt = 0; break; case 'right': lml = -ls.g.sliderWidth(); lmt = 0; break; case 'top': lmt = ls.g.sliderHeight(); lml = 0; break; case 'bottom': lmt = -ls.g.sliderHeight(); lml = 0; break; case 'fade': lmt = 0; lml = 0; break; case 'new': if( sublayer.data('offsetxout') ){ if( sublayer.data('offsetxout') === 'left' ){ lml = ls.g.sliderWidth(); }else if( sublayer.data('offsetxout') === 'right' ){ lml = -ls.g.sliderWidth(); }else{ lml = -parseInt( sublayer.data('offsetxout') ); } }else{ lml = -ls.lt.offsetXOut; } if( sublayer.data('offsetyout') ){ if( sublayer.data('offsetyout') === 'top' ){ lmt = ls.g.sliderHeight(); }else if( sublayer.data('offsetyout') === 'bottom' ){ lmt = -ls.g.sliderHeight(); }else{ lmt = -parseInt( sublayer.data('offsetyout') ); } }else{ lmt = -ls.lt.offsetYOut; } break; } // NEW FEATURE v4.5.0 Rotating & Scaling sublayers // BUGFIX v4.5.5 changing the default value from 0 to 'none' (because of old jQuery, 1.7.2) // NEW FEATURES v5.0.0 Added SkewX, SkewY, ScaleX, ScaleY, RotateX & RotateY transitions var curSubRotate = curSubRotateX = curSubRotateY = curSubScale = curSubSkewX = curSubSkewY = curSubScaleX = curSubScaleY = 'none'; // if( !ls.g.ie78 && ls.g.enableCSS3 ){ curSubRotate = sublayer.data('rotateout') ? sublayer.data('rotateout') : ls.lt.rotateOut; curSubRotateX = sublayer.data('rotatexout') ? sublayer.data('rotatexout') : ls.lt.rotateXOut; curSubRotateY = sublayer.data('rotateyout') ? sublayer.data('rotateyout') : ls.lt.rotateYOut; curSubScale = sublayer.data('scaleout') ? sublayer.data('scaleout') : ls.lt.scaleOut; curSubSkewX = sublayer.data('skewxout') ? sublayer.data('skewxout') : ls.lt.skewXOut; curSubSkewY = sublayer.data('skewyout') ? sublayer.data('skewyout') : ls.lt.skewYOut; if( curSubScale === 1 ){ curSubScaleX = sublayer.data('scalexout') ? sublayer.data('scalexout') : ls.lt.scaleXOut; curSubScaleY = sublayer.data('scaleyout') ? sublayer.data('scaleyout') : ls.lt.scaleYOut; }else{ curSubScaleX = curSubScaleY = curSubScale; } var too = sublayer.data('transformoriginout') ? sublayer.data('transformoriginout').split(' ') : ls.lt.transformOriginOut; for(var t =0;t sublayer.outerHeight() ? sublayer.outerWidth() : sublayer.outerHeight(); var modX = parseInt( curSubRotate ) === 0 ? sublayer.outerWidth() : wh; var modY = parseInt( curSubRotate ) === 0 ? sublayer.outerHeight() : wh; if( ( curSubPLevel === -1 && curSubSlideOutDir !== 'new' ) || ( sublayer.data('offsetxout') === 'left' || sublayer.data('offsetxout') === 'right' ) ){ if( lml < 0 ){ lml = - ( ls.g.sliderWidth() - endLeft + ( curSubScaleX / 2 - .5 ) * modX + 100 ); }else if( lml > 0 ){ lml = endLeft + ( curSubScaleX / 2 + .5 ) * modX + 100; } }else{ lml = lml * ls.g.ratio; } if( ( curSubPLevel === -1 && curSubSlideOutDir !== 'new' ) || ( sublayer.data('offsetyout') === 'top' || sublayer.data('offsetyout') === 'bottom' ) ){ if( lmt < 0 ){ lmt = - ( ls.g.sliderHeight() - endTop + ( curSubScaleY / 2 - .5 ) * modY + 100 ); }else if( lmt > 0 ){ lmt = endTop + ( curSubScaleY / 2 + .5 ) * modY + 100; } }else{ lmt = lmt * ls.g.ratio; } if( curSubPLevel === -1 || curSubSlideOutDir === 'new' ){ var curSubPar = 1; }else{ var curSubParMod = ls.g.curLayer.data('parallaxout') ? parseInt(ls.g.curLayer.data('parallaxout')) : ls.o.parallaxOut; var curSubPar = curSubPLevel * curSubParMod; } // var curSubDelay = parseInt( sublayer.data('showuntil') ); if( sublayer.data('transitiontype') === 'new' ){ var duO = ls.lt.durationOut; var eO = ls.lt.easingOut; }else{ var duO = ls.o.durationOut; var eO = ls.o.easingOut; } var curSubTime = sublayer.data('durationout') ? parseInt(sublayer.data('durationout')) : duO; var curSubEasing = sublayer.data('easingout') ? sublayer.data('easingout') : eO; var css = { visibility : 'hidden' }; var transition = { rotation : curSubRotate, rotationX : curSubRotateX, rotationY : curSubRotateY, skewX : curSubSkewX, skewY : curSubSkewY, scaleX : curSubScaleX, scaleY : curSubScaleY, x : -lml * curSubPar, y : -lmt * curSubPar, ease : lsConvertEasing( curSubEasing ), onComplete : function(){ sublayer.css( css ); } }; if( curSubSlideOutDir == 'fade' || ( !curSubSlideOutDir && curSubSlideDir == 'fade' ) || ( sublayer.data('fadeout') !== 'false' && sublayer.data('transitiontype') === 'new' ) ){ transition['opacity'] = 0; css['opacity'] = sublayer.data( 'originalOpacity' ); } TweenLite.set( sublayer[0],{ transformPerspective : curSubPerspective, transformOrigin : curSubTransformOrigin }); TweenLite.to(sublayer[0],curSubTime/1000,transition); // sublayer.stop(true,false).animate( transition, curSubTime, curSubEasing,function(){ // sublayer.css( css ); // }); }; // v3.6 Improved Debug Mode ls.debug = function(){ ls.d = { history : $('
'), // adds a H1 (title) aT : function(content){ $('

'+content+'

').appendTo( ls.d.history ); }, // adds an empty UL aeU : function(){ $('
    ').appendTo( ls.d.history ); }, // adds an UL with a LI aU : function(content){ $('
    • '+content+'
    ').appendTo( ls.d.history ); }, // adds a LI into the last UL aL : function(content){ $('
  • '+content+'
  • ').appendTo( ls.d.history.find('ul:last') ); }, // adds an UL into the last LI of the last UL aUU : function(content){ $('
      ').appendTo( ls.d.history.find('ul:last li:last') ); }, // adds a Function to the first LI inside the last UL aF : function(elem){ ls.d.history.find('ul:last li:last').hover( function(){ elem.css({ border: '2px solid red', marginTop : parseInt( elem.css('margin-top') ) - 2, marginLeft : parseInt( elem.css('margin-left') ) - 2 }); }, function(){ elem.css({ border: '0px', marginTop : parseInt( elem.css('margin-top') ) + 2, marginLeft : parseInt( elem.css('margin-left') ) + 2 }); } ); }, show : function(){ if( !$('body').find('.ls-debug-console').length ){ if( !ls.d.putData ){ // Init code ls.d.aT('Init code'); ls.d.aeU(); for( var prop in ls.o ){ ls.d.aL(prop+': ' + ls.o[prop] + ''); } // ls.d.aL('sliderOriginalWidth: ' + ls.g.sliderOriginalWidth + ''); // ls.d.aL('sliderOriginalHeight: ' + ls.g.sliderOriginalHeight + ''); // Slides, layers data ls.d.aT('LayerSlider Content'); ls.d.aU('Number of slides found: ' + $(el).find('.ls-slide').length + ''); $(el).find('.ls-inner .ls-slide, .ls-inner *[class*="ls-l"]').each(function(){ if( $(this).hasClass('ls-slide') ){ ls.d.aU('SLIDE ' + ( $(this).index() + 1 ) + ''); ls.d.aUU(); ls.d.aL('SLIDE ' + ( $(this).index() + 1 ) + ' properties:

      '); }else{ ls.d.aU('    Layer ( '+$(this).prop('tagName')+' )'); ls.d.aF($(this)); ls.d.aUU(); ls.d.aL(''+$(this).prop('tagName')+' layer properties:

      '); ls.d.aL('distance / class: '+$(this).attr('class')+''); } $.each( $(this).data(),function(name, val) { ls.d.aL( name +': ' + val + ''); }); }); ls.d.putData = true; } var dc = $('
      ').addClass('ls-debug-console').css({ position: 'fixed', zIndex: '10000000000', top: '10px', right: '10px', width: '300px', padding: '20px', background: 'black', 'border-radius': '10px', height: $(window).height() - 60, opacity: 0, marginRight: 150 }).appendTo( $('body') ).css({ marginRight: 0, opacity: .9 }).click(function(e){ if(e.shiftKey && e.altKey){ $(this).remove(); } }); var ds = $('
      ').css({ width: '100%', height: '100%', overflow: 'auto' }).appendTo( dc ); var dd = $('
      ').css({ width: '100%' }).appendTo( ds ).append( ls.d.history ); } }, hide : function(){ $('body').find('.ls-debug-console').remove(); } }; $(el).click(function(e){ if(e.shiftKey && e.altKey){ ls.d.show(); } }); }; // initializing ls.load(); }; var lsConvertEasing = function( e ){ var t; if( e.toLowerCase().indexOf('swing') !== -1 || e.toLowerCase().indexOf('linear') !== -1 ){ t = Linear.easeNone; }else if( e.toLowerCase().indexOf('easeinout') !== -1 ){ var ee = e.toLowerCase().split('easeinout')[1]; t = window[ee.charAt(0).toUpperCase() + ee.slice(1)].easeInOut; }else if( e.toLowerCase().indexOf('easeout') !== -1 ){ var ee = e.toLowerCase().split('easeout')[1]; t = window[ee.charAt(0).toUpperCase() + ee.slice(1)].easeOut; }else if( e.toLowerCase().indexOf('easein') !== -1 ){ var ee = e.toLowerCase().split('easein')[1]; t = window[ee.charAt(0).toUpperCase() + ee.slice(1)].easeIn; } return t; }; var lsConvertTransition = function( t, e, type, undef ){ if( typeof e === 'undefined' ){ var e = 'easeInOutQuart'; } var tt = {}; if( t.rotate !== undef ){ tt.rotation = t.rotate; } if( t.rotateY !== undef ){ tt.rotationY = t.rotateY; } if( t.rotateX !== undef ){ tt.rotationX = t.rotateX; } if( type === 'after' ){ tt.scaleX = tt.scaleY = tt.scaleZ = 1; }else if( t.scale3d !== undef ){ tt.scaleX = tt.scaleY = tt.scaleZ = t.scale3d; } if( t.delay ){ tt.delay = type === 'after' ? t.delay/1000 : t.delay; } tt.ease = lsConvertEasing( e ); return tt; }; // Support3D checks the CSS3 3D capability of the browser (based on the idea of Modernizr.js) var lsSupport3D = function( el ) { var testEl = $('
      '), s3d1 = false, s3d2 = false, properties = ['perspective', 'OPerspective', 'msPerspective', 'MozPerspective', 'WebkitPerspective']; transform = ['transformStyle','OTransformStyle','msTransformStyle','MozTransformStyle','WebkitTransformStyle']; for (var i = properties.length - 1; i >= 0; i--){ s3d1 = s3d1 ? s3d1 : testEl[0].style[properties[i]] != undefined; }; // preserve 3D test for (var i = transform.length - 1; i >= 0; i--){ testEl.css( 'transform-style', 'preserve-3d' ); s3d2 = s3d2 ? s3d2 : testEl[0].style[transform[i]] == 'preserve-3d'; }; // If browser has perspective capability and it is webkit, we must check it with this solution because Chrome can give false positive result if GPU acceleration is disabled if (s3d1 && testEl[0].style[properties[4]] != undefined){ testEl.attr('id','ls-test3d').appendTo( el ); s3d1 = testEl[0].offsetHeight === 3 && testEl[0].offsetLeft === 9; testEl.remove(); } return (s3d1 && s3d2); }; // Order array function var lsOrderArray = function(x,y,dir) { var i = []; if(dir=='forward'){ for( var a=0; a-1;a--){ for( var b=y-1; b>-1; b--){ i.push(a+b*x); } } } return i; }; // CountProp counts the properties in an object var lsCountProp = function(obj) { var count = 0; for(var prop in obj) { if(obj.hasOwnProperty(prop)){ ++count; } } return count; }; // We need the browser function (removed from jQuery 1.9) var lsBrowser = function(){ uaMatch = function( ua ) { ua = ua.toLowerCase(); var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || /(webkit)[ \/]([\w.]+)/.exec( ua ) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || /(msie) ([\w.]+)/.exec( ua ) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || []; return { browser: match[ 1 ] || "", version: match[ 2 ] || "0" }; }; var matched = uaMatch( navigator.userAgent ), browser = {}; if ( matched.browser ) { browser[ matched.browser ] = true; browser.version = matched.version; } if ( browser.chrome ) { browser.webkit = true; } else if ( browser.webkit ) { browser.safari = true; } return browser; }; lsPrefixes = function(obj, method){ var pfx = ['webkit', 'khtml', 'moz', 'ms', 'o', '']; var p = 0, m, t; while (p < pfx.length && !obj[m]) { m = method; if (pfx[p] == '') { m = m.substr(0,1).toLowerCase() + m.substr(1); } m = pfx[p] + m; t = typeof obj[m]; if (t != 'undefined') { pfx = [pfx[p]]; return (t == 'function' ? obj[m]() : obj[m]); } p++; } }; // Global parameters (Do not change these settings!) layerSlider.global = { version : '5.1.2', isMobile : function(){ if( navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/BlackBerry/i) || navigator.userAgent.match(/Windows Phone/i) ){ return true; }else{ return false; } }, isHideOn3D : function(el){ if( el.css('padding-bottom') == 'auto' || el.css('padding-bottom') == 'none' || el.css('padding-bottom') == 0 || el.css('padding-bottom') == '0px' ){ return true; }else{ return false; } }, // NEW FEATURE 4.0 CSS3 transitions // (beta, currently animating only the new 2D and 3D layer tranisitons with CSS3) // (2D layer transitions are working also with jQuery fallback mode) // cssTransitions : !lsBrowser().msie || ( lsBrowser().msie && lsBrowser().version > 9 ) ? true : false, ie78 : lsBrowser().msie && lsBrowser().version < 9 ? true : false, paused : false, pausedByVideo : false, autoSlideshow : false, isAnimating : false, layersNum : null, prevNext : 'next', slideTimer : null, sliderWidth : null, sliderHeight : null, slideDirections : { prev : { left : 'right', right : 'left', top : 'bottom', bottom : 'top' }, next : { left : 'left', right : 'right', top : 'top', bottom : 'bottom' } }, // Default delay time, fadeout and fadein durations of videoPreview images v : { d : 500, fo : 750, fi : 500 } }; // Layer Transition Defaults layerSlider.layerTransitions = { offsetXIn : 80, offsetYIn : 0, durationIn : 1000, delayIn : 0, easingIn : 'easeInOutQuint', fadeIn : true, rotateIn : 0, rotateXIn : 0, rotateYIn : 0, scaleIn : 1, scaleXIn : 1, scaleYIn : 1, skewXIn : 0, skewYIn : 0, transformOriginIn : ['50%','50%','0'], perspectiveIn : 500, offsetXOut : -80, offsetYOut : 0, durationOut : 400, showUntil : 0, easingOut : 'easeInOutQuint', fadeOut : true, rotateOut : 0, rotateXOut : 0, rotateYOut : 0, scaleOut : 1, scaleXOut : 1, scaleYOut : 1, skewXOut : 0, skewYOut : 0, transformOriginOut : ['50%','50%','0'], perspectiveOut : 500 }; layerSlider.slideTransitions = { slideDelay : 4000 // Time before the next slide will be loading. }; // Global settings (can be modified) layerSlider.options = { // Layout responsive : true, responsiveUnder : 0, layersContainer : 0, // Slideshow autoStart : true, pauseOnHover : true, firstSlide : 1, animateFirstSlide : true, loops : 0, forceLoopNum : true, twoWaySlideshow : false, randomSlideshow : false, // Appearance skin : 'v5', skinsPath : '/layerslider/skins/', globalBGColor : 'transparent', globalBGImage : false, // Navigation Area navPrevNext : true, navStartStop : true, navButtons : true, keybNav : true, touchNav : true, hoverPrevNext : true, hoverBottomNav : false, showBarTimer : false, showCircleTimer : true, // Thumbnail navigation thumbnailNavigation : 'hover', tnContainerWidth : '60%', tnWidth : 100, tnHeight : 60, tnActiveOpacity : 35, tnInactiveOpacity : 100, // Videos autoPlayVideos : true, autoPauseSlideshow : 'auto', youtubePreview : 'maxresdefault.jpg', // Preload imgPreload : true, lazyLoad : true, // YourLogo yourLogo : false, yourLogoStyle : 'left: -10px; top: -10px;', yourLogoLink : false, yourLogoTarget : '_self', // Optimize for IE7 and IE8 optimizeForMobile : true, optimizeForIE78 : true, // API functions cbInit : function(element){}, cbStart : function(data){}, cbStop : function(data){}, cbPause : function(data){}, cbAnimStart : function(data){}, cbAnimStop : function(data){}, cbPrev : function(data){}, cbNext : function(data){}, // !!! IMPORTANT !!! The following properties are deprecated from version 5.0.0 DO NOT USE THEM. // The slider will recognize these properties in the init code or if you add these properties into the style attribute of the layer // but we recommend you to use to new html5 data attribute (data-ls) with the new properties slideDelay : 4000, slideDirection : 'right', parallaxIn : .45, parallaxOut : .45, durationIn : 1000, durationOut : 1000, easingIn : 'easeInOutQuint', easingOut : 'easeInOutQuint', delayIn : 0, delayOut : 0 }; })(jQuery);