(function ($) { "use strict"; $.fn.pbTouchSlider = function (options) { var slider_Opts = $.extend({ slider_Wrap: '', // Assign a unique ID to the div.o-sliderContainer slider_Item: '.o-slider--item', // Single Item slider_Drag: true, // Your choise.. to dragIt or not to dragIt..this is the question... auto: false, autoTime: 6000, slider_Dots: { // Wanna see dots or not? class: '.o-slider-pagination', enabled: true, preview: true }, slider_Arrows: { // Wanna see Arrows or not? class: '.o-slider-arrows', enabled: true }, slider_Threshold: 25, // Percentage of dragX before go to next/prev slider slider_Speed: 1000, slider_Ease: 'cubic-bezier(0.5, 0, 0.5, 1)', // see http://cubic-bezier.com/ slider_Breakpoints: { // Kind of media queries ( can add more if you know how to do it :D and if you need ) default: { height: 500 // height on desktop }, tablet: { height: 400, // height on tablet media: 1024 // tablet breakpoint }, smartphone: { height: 300, // height on smartphone media: 768 // smartphone breakpoint } } }, options); /*:::::::: LOADER ::::::::*/ var loaderHtml = '
' + '
' + '
' + '
' + '
' + '
' + '
'; $(slider_Opts.slider_Wrap).each(function () { $(this).append(loaderHtml); }); function loader(visibility) { var thisLoader = $(slider_Opts.slider_Wrap + ' .loaderWrap'); if (visibility === true) $(thisLoader).show(); else $(thisLoader).hide(); } /*:::::::: RESPONSIVE ::::::::*/ function setResponsive() { var VW = document.documentElement.clientWidth; if (VW >= slider_Opts.slider_Breakpoints.tablet.media) { $(pbSlider.slider_Wrap + '.o-sliderContainer,' + pbSlider.slider_Wrap + ' ' + pbSlider.slider_Item).css({ height: slider_Opts.slider_Breakpoints.default.height }); } else if (VW >= slider_Opts.slider_Breakpoints.smartphone.media) { $(pbSlider.slider_Wrap + '.o-sliderContainer,' + pbSlider.slider_Wrap + ' ' + pbSlider.slider_Item).css({ height: slider_Opts.slider_Breakpoints.tablet.height }); } else { $(pbSlider.slider_Wrap + '.o-sliderContainer,' + pbSlider.slider_Wrap + ' ' + pbSlider.slider_Item).css({ height: slider_Opts.slider_Breakpoints.smartphone.height }); } } $(window).resize(function () { setResponsive(); }); /*:::::::: OBJECT SLIDER ::::::::*/ var pbSlider = {}; pbSlider.slider_Wrap = slider_Opts.slider_Wrap; pbSlider.slider_Item = slider_Opts.slider_Item; pbSlider.slider_Dots = slider_Opts.slider_Dots; pbSlider.slider_Threshold = slider_Opts.slider_Threshold; pbSlider.slider_Active = 0; pbSlider.slider_A = 0; pbSlider.slider_B = 0; pbSlider.slider_Count = 0; pbSlider.slider_NavWrap = '
'; pbSlider.slider_NavPagination = ''; pbSlider.slider_NavArrows = ''; /*:::::::: APPEND ANIMATION ::::::::*/ $('head').append( '' ); /*:::::::: ONlOAD STUFF ::::::::*/ $(window).on('load', function () { $(pbSlider.slider_Item).each(function () { var bg = $(this).attr('data-image'); $(this).css({ 'background-image': 'url(' + bg + ')' }); }); setTimeout(function () { loader(false); }, 1000); $(pbSlider.slider_Wrap + ' .o-slider-controls').addClass('isVisible'); $(pbSlider.slider_Draggable).addClass('isVisible'); setResponsive(); }); /*:::::::: INIT ::::::::*/ pbSlider.pbInit = function (selector) { pbSlider.slider_Draggable = selector; pbSlider.slider_Count = $(pbSlider.slider_Wrap).find(pbSlider.slider_Item).length; $(selector).css('width', pbSlider.slider_Count * 100 + '%'); $(pbSlider.slider_Item).css({ 'width': 100 / pbSlider.slider_Count + '%' }); var incrSlides = 0; $(pbSlider.slider_Wrap).find(pbSlider.slider_Item).each(function () { $(this).attr('data-id', 'slide-' + (incrSlides++)); }); if (slider_Opts.slider_Arrows.enabled === true || slider_Opts.slider_Dots.enabled === true) { $(pbSlider.slider_Wrap).append(pbSlider.slider_NavWrap); } if (slider_Opts.slider_Arrows.enabled === true) { $(pbSlider.slider_Wrap).append(pbSlider.slider_NavArrows); } if (slider_Opts.slider_Dots.enabled === true) { var incrPagination = 0; $(pbSlider.slider_Wrap).append(pbSlider.slider_NavPagination); for (incrPagination; incrPagination < pbSlider.slider_Count; incrPagination++) { var activeStatus = incrPagination === pbSlider.slider_Active ? ' class="isActive"' : ''; var div = '
' var gotoSlide = 'data-increase="' + [incrPagination] + '"'; var background = $(pbSlider.slider_Wrap).find("[data-id='slide-" + incrPagination + "']").attr('data-image'); //background = background.replace('url(','').replace(')','').replace(/\"/gi, ""); if (slider_Opts.slider_Dots.preview === true) { $(pbSlider.slider_Wrap).find(pbSlider.slider_Dots.class) .append( '
  • ' + '' + '
  • '); } else { $(pbSlider.slider_Wrap).find(pbSlider.slider_Dots.class) .append('
  • ' + div + '
  • '); } } } setTimeout(function () { $(pbSlider.slider_Item + '[data-id=slide-' + pbSlider.slider_Active + ']').addClass('isActive'); }, 400); /*:::::::: HAMMER => see http://hammerjs.github.io/ ::::::::*/ if (slider_Opts.slider_Drag === true) { $(pbSlider.slider_Draggable).addClass('isDraggable'); var stuff4hammer = document.querySelector(pbSlider.slider_Wrap); var hammerOpts = { dragLockToAxis: true, dragBlockHorizontal: true, touchAction: 'pan-x', cssProps: { userSelect: true } } var hammertime = new Hammer(stuff4hammer, hammerOpts); hammertime.on('pan', function (e) { e.preventDefault(); var percentage = 100 / pbSlider.slider_Count * e.deltaX / window.innerWidth; var percentageCalc = percentage - 100 / pbSlider.slider_Count * pbSlider.slider_Active; var notDraggable = $(e.target).find('.slider-textWrap').length; if (pbSlider.slider_Active != pbSlider.slider_Count - 1 && pbSlider.slider_Active != 0) { $(pbSlider.slider_Wrap).find(pbSlider.slider_Item).addClass('isMoving'); } $(pbSlider.slider_Draggable).css({ 'perspective': '1000px', 'backface-visibility': 'hidden', 'transform': 'translateX( ' + percentageCalc + '% )' }); if (e.isFinal) { if (e.velocityX > 1) { pbSlider.pbGoslide(pbSlider.slider_Active - 1); } else if (e.velocityX < -1) { pbSlider.pbGoslide(pbSlider.slider_Active + 1); } else { if (percentage <= -(pbSlider.slider_Threshold / pbSlider.slider_Count)) { pbSlider.pbGoslide(pbSlider.slider_Active + 1); } else if (percentage >= (pbSlider.slider_Threshold / pbSlider.slider_Count)) { pbSlider.pbGoslide(pbSlider.slider_Active - 1); } else { pbSlider.pbGoslide(pbSlider.slider_Active); } } } }); } $(pbSlider.slider_Wrap + ' .o-slider-pagination li').on('click', function () { var this_data = $(this).attr('data-increase'); if (!$(this).hasClass('isActive')) { pbSlider.pbGoslide(this_data); } //console.log( pbSlider.slider_Active) //console.log(this_data + ' / ' + pbSlider.slider_Active ); }); $(pbSlider.slider_Wrap + ' .o-slider-prev').addClass('isDisabled'); $(pbSlider.slider_Wrap + ' .o-slider-arrows li').on('click', function () { if ($(this).hasClass('o-slider-next')) { pbSlider.pbGoslide(pbSlider.slider_Active + 1); } else { pbSlider.pbGoslide(pbSlider.slider_Active - 1); } console.log(pbSlider.slider_Active) }); }; /*:::::::: SLIDER ENGINE ::::::::*/ pbSlider.pbGoslide = function (number) { $(pbSlider.slider_Wrap + ' .o-slider-arrows li').removeClass('isDisabled'); if (number < 0) { pbSlider.slider_Active = 0; } else if (number > pbSlider.slider_Count - 1) { pbSlider.slider_Active = pbSlider.slider_Count - 1; } else { pbSlider.slider_Active = number; } if (pbSlider.slider_Active >= pbSlider.slider_Count - 1) { var firstS = $(pbSlider.slider_Wrap).find(pbSlider.slider_Item).first(); $(pbSlider.slider_Wrap + ' .o-slider-next').addClass('isDisabled'); } else if (pbSlider.slider_Active <= 0) { $(pbSlider.slider_Wrap + ' .o-slider-prev').addClass('isDisabled'); } else { $(pbSlider.slider_Wrap + ' .o-slider-arrows li').removeClass('isDisabled'); } if (pbSlider.slider_Active != pbSlider.slider_Count - 1 && pbSlider.slider_Active != 0) { $(pbSlider.slider_Wrap).find(pbSlider.slider_Item).addClass('isMoving'); } $(pbSlider.slider_Draggable).addClass('isAnimate'); var percentage = -(100 / pbSlider.slider_Count) * pbSlider.slider_Active; $(pbSlider.slider_Draggable).css({ 'perspective': '1000px', 'backface-visibility': 'hidden', 'transform': 'translateX( ' + percentage + '% )' }); clearTimeout(pbSlider.timer); pbSlider.timer = setTimeout(function () { $(pbSlider.slider_Wrap).find(pbSlider.slider_Draggable).removeClass('isAnimate'); $(pbSlider.slider_Wrap).find(pbSlider.slider_Item).removeClass('isActive').removeClass('isMoving'); $(pbSlider.slider_Wrap).find(pbSlider.slider_Item + '[data-id=slide-' + pbSlider.slider_Active + ']').addClass('isActive'); $(pbSlider.slider_Wrap + ' .o-slider--item img').css('transform', 'translateX(0px )'); }, slider_Opts.slider_Speed); if (slider_Opts.slider_Dots.enabled === true) { var sliderDots = $(pbSlider.slider_Wrap).find(pbSlider.slider_Dots.class + ' > *'); var increase = 0; for (increase; increase < sliderDots.length; increase++) { var className = increase == pbSlider.slider_Active ? 'isActive' : ''; $(pbSlider.slider_Wrap).find(sliderDots[increase]).removeClass('isActive').addClass(className); $(pbSlider.slider_Wrap).find(sliderDots[increase]).children().removeClass('isActive').addClass(className); } setTimeout(function () { $(pbSlider.slider_Wrap).find(sliderDots).children().removeClass('isActive'); }, 500); } pbSlider.slider_Active = Number(pbSlider.slider_Active); }; pbSlider.auto = function () { pbSlider.autoTimer = setInterval(function () { //console.log($('#pbSlider0').children().eq(pbSlider.slider_Active).children()[0].duration) //console.log($('#pbSlider0').children().eq(pbSlider.slider_Active).children()[0].currentTime) //console.log($('#pbSlider0').children().eq(pbSlider.slider_Active).children()[0].tagName) if ($('#pbSlider0').children().eq(pbSlider.slider_Active).children()[0].tagName == 'VIDEO') { if (pbSlider.slider_B == 0) { $('.o-slider-pagination').children().eq(pbSlider.slider_Active).children().css({ 'width': '0%' }) } pbSlider.slider_B = pbSlider.slider_B + 1 var currentTime = $('#pbSlider0').children().eq(pbSlider.slider_Active).children()[0].currentTime var duration = $('#pbSlider0').children().eq(pbSlider.slider_Active).children()[0].duration var a = currentTime / duration; var b = (a * 100).toFixed(0) + "%"; $('.o-slider-pagination').children().eq(pbSlider.slider_Active).children().css({ 'width': b }) //$('.o-slider-pagination').children().siblings()[0].css({'width':'0%'}) //console.log($('.o-slider-pagination').html()) } else { pbSlider.slider_A = pbSlider.slider_A + 1 $('.o-slider-pagination').children().eq(pbSlider.slider_Active).children().css({ 'width': '100%' }) } if (parseInt(b) > 97) { if (pbSlider.slider_Active >= pbSlider.slider_Count - 1) { pbSlider.pbGoslide(0); pbSlider.slider_B = 0 } else { $(pbSlider.slider_Wrap + ' .o-slider-next').trigger('click'); pbSlider.slider_B = 0 } } if (pbSlider.slider_A >= (slider_Opts.autoTime / 10)) { if (pbSlider.slider_Active >= pbSlider.slider_Count - 1) { pbSlider.pbGoslide(0); pbSlider.slider_A = 0; } else { $(pbSlider.slider_Wrap + ' .o-slider-next').trigger('click'); pbSlider.slider_A = 0; } } //document.getElementById('hyTime').style.width=b; }, 10); } if (slider_Opts.auto === true) { pbSlider.auto(); } pbSlider.pbInit(this); }; }(jQuery));