/* MOSTSLIDER /* © by Julian Handl /* MIT Licence */ /**** TO DO **** - rework autoplay and add option to stop autoplay on hover /***************/ (function ( $ ) { //DEFINE NAME ON THE FUNCTION $.fn.mostSlider = function( options ) { // GET THE OPTIONS var settings = $.extend({ // SET DEFAULT // ANIMATION // animation effect animation: "fade", // animation speed aniSpeed: 1000, // animation method / jQuery, css, auto aniMethod: "auto", // sets if animation method should consider a fallback if selected method is not supported aniFallback: true, // put slider image as background and center it - only avilable if metrics are set background_center: false, // SPEED // slide automatically autoPlay: true, // time between slide pauseTime: 3000, // METRICS // slider width and height metrics: { // RATIO // max width width: 0, // max height height: 0, }, // stay the same height during resize solidHeight: false, // NAVIGATION // use bullets as thumbnails thumbnails: false, // put thumbnailimage in background thumb_bg: false, // en/disable navigation navigation: true, // hide the arrows hideArrows: true, // FUNCTION // enable linking to slides via url linkable: false, // CONTENT // if content has transparancies transparancy: false, // specify the content class or animated content contentClass: "content", // proceed content animation StepByStey sbsContent: false, // time between each content animation step contentAniDelay: 300, // IMAGES // user different images for different slider sizes responsive_images: false, // breakpoint between mobile and tablet (min tablet) responsive_break_tablet: 481, // breakpoint between tablet and desktop (min desktop) responsive_break_desktop: 1024, // enable social button for each slide socialButtons: false, // url for social buttons socialUrl: "", // twitter id twitterID: "" }, options ); /*********************/ /***** VARIABLES *****/ /*********************/ //CACHE THE SLIDER ELEMENT var slider = this; //CACHE THE SLIDERS WIDTH var width = slider.width(); //SLIDERS CURRENT WIDTH var current_width = 0; //SLIDER RATION var ratio = settings.metrics.height / settings.metrics.width; //CACHE THE SLIDERs CHILDREN/SLIDES var children = slider.children(); //CACHE THE NUMBER OF CHILDREN/SLIDES var children_number = children.length; //CURRENT SLIDE var current = 1; //SLIDE DIRECTION var direction = "right"; //AUTOPLAY INTERVAL var autoplay; //CURRENTLY SLIDING var sliding = false; //INITIALISED? var initialised = false; //OLD IE BROWSER var oldIE = false; if ($('html').is('.ie6, .ie7, .ie8') || $('body').is('.ie6, .ie7, .ie8')) { oldIE = true; } // aniMethod Fallback and auto switch (settings.aniMethod){ case 'jQuery': settings.aniMethod = 'jQuery'; break; case 'css': if( (!$('html').hasClass('csstransitions')) && (settings.aniFallback == true) ){ settings.aniMethod = 'jQuery'; } break; case 'auto': if( $('html').hasClass('csstransitions') ){ settings.aniMethod = 'css'; } else{ settings.aniMethod = 'jQuery'; } break; } /*****************/ /***** INITS *****/ /*****************/ //LET THE SLIDER DIV FIT THE SLIDER-WRAPPER slider.css({"position": "relative","width": "100%","line-height": "0"}); //STYLE THE SLIDES AND SET A ID/INDEX slider.children().each(function(index){ // RESPONSIVE IMAGES if(settings.responsive_images = true){ var window_width = $(window).width(); $(this).find("img[data-responsive-images='true']").each(function(){ // DESKTOP if(window_width >= settings.responsive_break_desktop){ $(this).attr("src",$(this).attr("data-image-desktop")); } // TABLET else if(window_width >= settings.responsive_break_tablet){ $(this).attr("src",$(this).attr("data-image-tablet")); } }); } // CSS FOR SLIDES $(this).css({"width":"100%", "height":"auto", "line-height":"auto", "position":"absolute", "z-index":0, "display":"none", "overflow":"hidden"}).attr("id",index+1); // SPECIAL SETTINGS FOR CSS METHOD if(settings.aniMethod == 'css'){ if(settings.animation == 'fade'){ $(this).css({ 'opacity': 0, 'display': 'block', }); } } /*****************/ /* SPECIAL CASES */ /*****************/ //IFRAME (NOT FULLY WORKING) if($(this).is("iframe")){ $(this).css({ "width": slider.find("#1").width(), "height": slider.find("#1").height() }); } //SLIDE IS IMAGE $(this).find("> img:only-child").css({ "width":"100%", "height":"auto" }); //SLIDE IS IMAGE IN LINK $(this).find("> a > img:only-child").css({ "width":"100%", "height":"auto" }); // BACKGROUND IMAGES if($(this).find("img.portrait").length > 0){ $(this).find("img.portrait").css({ "width":"auto", "height":"100%" }); settings.transparancy = true } // BACKGROUND IMAGES if($(this).find("img.bg").length > 0){ // IF BACKGROUND CENTERING ACTIVE AND METRICS ARE SET (experimental) if(settings.background_center == true && (settings.metrics.width > 0 && settings.metrics.width != '') && (settings.metrics.height > 0 && settings.metrics.height != '')){ $(this).css({ "background-image": 'url(' + $(this).find("img.bg").attr('src') + ')', "background-repeat":"no-repeat", "background-position":"center center", "background-size":"cover", "-webkit-background-size":"cover", "-moz-background-size":"cover", "-o-background-size":"cover", }); if(oldIE){ $(this).css({ "filter":"progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + $(this).find("img.bg").attr('src') + ",sizingMethod='scale')", "-ms-filter": "\"progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + $(this).find("img.bg").attr('src') + ",sizingMethod='scale')\"", }); } $(this).find("img.bg").hide(); } // DEFAULT BG HANDLING else{ $(this).find("img.bg").css({ "width":"100%", "height":"auto" }); } } //SOCIAL BUTTONS if(settings.socialButtons == true){ // INSERT CONTAINER FOR SOCIAL BUTTONS $(this).prepend('
'); var data_social = "none"; if($(this).attr('data-social') != undefined){ data_social = $(this).attr('data-social'); } // FACEBOOK if(data_social.indexOf('facebook') >= 0 && settings.twitterID != ""){ var url = document.URL; var number = parseInt(index) + 1; if(url.indexOf('?') > 0){ url = url + "&slider=" + number; } else{ url = url + "?slider=" + number; } url = url.replace(/\:/g, '%3A').replace(/\//g, '%2F').replace(/\=/g, '%3D').replace(/\?/g, '%3F').replace(/\-/g, '%2D'); //slider.parent().prepend('
'); $(this).find(".social").prepend('
'); } // PINTEREST if(data_social.indexOf('pinterest') >= 0 && settings.socialUrl != "" && $(this).find(".pinterest").length == 1){ // URL OF SITE var url = settings.socialUrl.replace(/:/g,'%3A').replace(/\//g,'%2F'); // IMAGE OBJECT var img = $(this).find(".pinterest"); // ABSOLUTE URL TO IMAGE var src = img.get(0).src.replace(/:/g,'%3A').replace(/\//g,'%2F'); // IMAGE DESCRIPTION var description = img.attr('alt'); if(description == "undefined"){ description = ""; } // BILD LINK FOR PINTEREST $(this).find(".social").prepend('
'); } // TWITTER if(data_social.indexOf('twitter') >= 0 && settings.twitterID != ""){ var url = document.URL; var number = parseInt(index) + 1; if(url.indexOf('?') > 0 && url.search("slider=")>0){ slider_url = url.substr(url.search("slider="), 8) url = url.replace(slider_url,'slider=' + number); } else if(url.indexOf('?') > 0 && url.search("slider=") < 0){ url = url + "&slider=" + number; } else{ url = url + "?slider=" + number; } $(this).find(".social").prepend('
'); } } }); //SET WRAPER FOR SLIDE ANIMATION if(settings.animation == "slide"){ // WRAP SLIDES DIV WITH ANOTHER DIV THAT CONTAINS THE ABSOLUTE DIV. SO THUMBNAILS CAN BE POSITIONED CORRECTLY. slider.wrapInner('
'); } else{ slider.wrapInner('
'); } // VERY SERIOUS BUSINESS HERE! MAGIC MAGIC MAGIC! THINK TWICE BEFORE TOUCHING // SET SLIDER HEIGHT // IF SET, DO NOTHING, IF NOT SET, SET TO FIRST CHILD this.init = function(){ slider.css("display","block"); if((settings.metrics.width > 0) && (settings.metrics.height > 0)){ if((slider.width() < settings.metrics.width) && (settings.solidHeight == false)){ var tmp = ratio*slider.width(); slider.find("#slides").css("height",tmp).children().css("height",tmp); if(settings.animation == "slide"){ slider.css("height",tmp); } } else{ slider.find("#slides").css("height",settings.metrics.height).children().css("height",settings.metrics.height); } } else{ var tmp = slider.find("#slides #1").height(); slider.css("height",tmp).find("#slides").css("height",tmp); } initialised = true; current_width = slider.width(); } // RESIZING $(window).resize(function(){ // DETECT IF SLIDER NEEDS TO BE RESIZED if( current_width != slider.width() ){ if((settings.metrics.width > 0) && (settings.metrics.height > 0)){ if((slider.width() < settings.metrics.width) && (settings.solidHeight == false)){ var new_height = ratio*slider.width(); slider.find("#slides").css("height",new_height).children().css("height",new_height); } else{ slider.find("#slides").css("height",settings.metrics.height).children().css("height",settings.metrics.height); } } else{ var new_height = slider.find("#slides #1").height(); slider.css("height",new_height).find("#slides").css("height",new_height); } } }); // SERIOUS BUSINESS ENDING HERE //STYLE THE INNER EFFECT ELEMENTS slider.find(".center").each(function(){ $(this).css("display:","inline-block"); }); slider.find(".fade").each(function(){ $(this).css({ "opacity": 0, "margin": 0, }); }); slider.find(".from-top").each(function(){ $(this).css({ "opacity": 0, "margin-top": "-20px", }); }); slider.find(".from-bottom").each(function(){ $(this).css({ "opacity": 0, "margin-top": "20px", }); }); slider.find(".from-left").each(function(){ $(this).css({ "opacity": 0, "margin-left": "-30px", "margin-right": "30px", }); }); slider.find(".from-right").each(function(){ $(this).css({ "opacity": 0, "margin-left": "30px", }); }); /*******************/ /***** INSERTS *****/ /*******************/ // NAVIGATION if(settings.navigation == true){ //INSERT BULLETS slider.append('
'); for (var i=1;i<=children_number;i++){ if(settings.thumbnails == true){ if(settings.thumb_bg == true){ slider.find("#bullets").append('
'); } else{ slider.find("#bullets").append('
'); } } else{ slider.find("#bullets").append('
'); } if(i==1){ $('#bullets > #1').addClass("selected"); } } // INSERT ARROWS slider.prepend('