{"version":3,"file":"/pc/all/libs/jquery.fullPage.js.map","sources":["/pc/all/libs/jquery.fullPage.js"],"sourcesContent":["/**\n * fullPage 2.6.5\n * https://github.com/alvarotrigo/fullPage.js\n * MIT licensed\n *\n * Copyright (C) 2015 alvarotrigo.com - A project by Alvaro Trigo\n */\n(function(global, factory) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], function($) {\n return factory($, global, global.document, global.Math);\n });\n } else if (typeof exports !== 'undefined') {\n module.exports = factory(require('jquery'), global, global.document, global.Math);\n } else {\n factory(jQuery, global, global.document, global.Math);\n }\n})(typeof window !== 'undefined' ? window : this, function($, window, document, Math, undefined) {\n 'use strict';\n\n // keeping central set of classnames and selectors\n var WRAPPER = 'fullpage-wrapper';\n var WRAPPER_SEL = '.' + WRAPPER;\n\n // slimscroll\n var SCROLLABLE = 'fp-scrollable';\n var SCROLLABLE_SEL = '.' + SCROLLABLE;\n var SLIMSCROLL_BAR_SEL = '.slimScrollBar';\n var SLIMSCROLL_RAIL_SEL = '.slimScrollRail';\n\n // util\n var RESPONSIVE = 'fp-responsive';\n var NO_TRANSITION = 'fp-notransition';\n var DESTROYED = 'fp-destroyed';\n var ENABLED = 'fp-enabled';\n var VIEWING_PREFIX = 'fp-viewing';\n var ACTIVE = 'active';\n var ACTIVE_SEL = '.' + ACTIVE;\n\n // section\n var SECTION_DEFAULT_SEL = '.section';\n var SECTION = 'fp-section';\n var SECTION_SEL = '.' + SECTION;\n var SECTION_ACTIVE_SEL = SECTION_SEL + ACTIVE_SEL;\n var SECTION_FIRST_SEL = SECTION_SEL + ':first';\n var SECTION_LAST_SEL = SECTION_SEL + ':last';\n var TABLE_CELL = 'fp-tableCell';\n var TABLE_CELL_SEL = '.' + TABLE_CELL;\n\n // section nav\n var SECTION_NAV = 'fp-nav';\n var SECTION_NAV_SEL = '#' + SECTION_NAV;\n var SECTION_NAV_TOOLTIP = 'fp-tooltip';\n var SHOW_ACTIVE_TOOLTIP = 'fp-show-active';\n\n // slide\n var SLIDE_DEFAULT_SEL = '.slide';\n var SLIDE = 'fp-slide';\n var SLIDE_SEL = '.' + SLIDE;\n var SLIDE_ACTIVE_SEL = SLIDE_SEL + ACTIVE_SEL;\n var SLIDES_WRAPPER = 'fp-slides';\n var SLIDES_WRAPPER_SEL = '.' + SLIDES_WRAPPER;\n var SLIDES_CONTAINER = 'fp-slidesContainer';\n var SLIDES_CONTAINER_SEL = '.' + SLIDES_CONTAINER;\n var TABLE = 'fp-table';\n\n // slide nav\n var SLIDES_NAV = 'fp-slidesNav';\n var SLIDES_NAV_SEL = '.' + SLIDES_NAV;\n var SLIDES_NAV_LINK_SEL = SLIDES_NAV_SEL + ' a';\n var SLIDES_ARROW = 'fp-controlArrow';\n var SLIDES_ARROW_SEL = '.' + SLIDES_ARROW;\n var SLIDES_PREV = 'fp-prev';\n var SLIDES_PREV_SEL = '.' + SLIDES_PREV;\n var SLIDES_ARROW_PREV = SLIDES_ARROW + ' ' + SLIDES_PREV;\n var SLIDES_ARROW_PREV_SEL = SLIDES_ARROW_SEL + SLIDES_PREV_SEL;\n var SLIDES_NEXT = 'fp-next';\n var SLIDES_NEXT_SEL = '.' + SLIDES_NEXT;\n var SLIDES_ARROW_NEXT = SLIDES_ARROW + ' ' + SLIDES_NEXT;\n var SLIDES_ARROW_NEXT_SEL = SLIDES_ARROW_SEL + SLIDES_NEXT_SEL;\n\n var $window = $(window);\n var $document = $(document);\n var containerInView = 0;//容器在视口内高度\n $.fn.fullpage = function(options) {\n\n // common jQuery objects\n var $htmlBody = $('html, body');\n var $body = $('body');\n\n var FP = $.fn.fullpage;\n // Create some defaults, extending them with any options that were provided\n options = $.extend({\n //navigation\n menu: false,\n anchors:[],\n navigation: false,\n navigationPosition: 'right',\n navigationTooltips: [],//导航文字\n showActiveTooltip: false,\n slidesNavigation: false,\n slidesNavPosition: 'bottom',\n scrollBar: false,\n navigationText: [],\n //scrolling\n css3: true,\n scrollingSpeed: 700,\n autoScrolling: true,\n fitToSection: true,\n easing: 'easeInOutCubic',\n easingcss3: 'ease',\n loopBottom: false,\n loopTop: false,\n loopHorizontal: true,\n continuousVertical: false,\n normalScrollElements: null,\n scrollOverflow: false,\n touchSensitivity: 5,\n normalScrollElementTouchThreshold: 5,\n\n //Accessibility\n keyboardScrolling: true,\n animateAnchor: true,\n recordHistory: true,\n\n //design\n controlArrows: true,\n controlArrowColor: '#fff',\n verticalCentered: true,\n resize: false,\n sectionsColor : [],\n paddingTop: 0,\n paddingBottom: 0,\n fixedElements: null,\n responsive: 0,\n autoHeight: false, //自动高度,不整屏滚动\n //Custom selectors\n sectionSelector: SECTION_DEFAULT_SEL,\n slideSelector: SLIDE_DEFAULT_SEL,\n\n\n //events\n afterLoad: null,\n onLeave: null,\n afterRender: null,\n afterResize: null,\n afterReBuild: null,\n afterSlideLoad: null,\n onSlideLeave: null\n }, options);\n\n displayWarnings();\n\n\n //easeInOutCubic animation included in the plugin\n $.extend($.easing,{ easeInOutCubic: function (x, t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t*t + b;return c/2*((t-=2)*t*t + 2) + b;}});\n\n //TO BE REMOVED in future versions. Maintained temporaly for backwards compatibility.\n $.extend($.easing,{ easeInQuart: function (x, t, b, c, d) { return c*(t/=d)*t*t*t + b; }});\n\n /**\n * Sets the autoScroll option.\n * It changes the scroll bar visibility and the history of the site as a result.\n */\n FP.setAutoScrolling = function(value, type){\n setVariableState('autoScrolling', value, type);\n\n var element = $(SECTION_ACTIVE_SEL);\n\n if(options.autoScrolling && !options.scrollBar){\n $htmlBody.css({\n 'overflow' : 'hidden',\n 'height' : '100%'\n });\n\n FP.setRecordHistory(options.recordHistory, 'internal');\n\n //for IE touch devices\n container.css({\n '-ms-touch-action': 'none',\n 'touch-action': 'none'\n });\n\n if(element.length){\n //moving the container up\n silentScroll(element.position().top);\n }\n\n }else{\n $htmlBody.css({\n 'overflow' : 'visible',\n 'height' : 'initial'\n });\n\n FP.setRecordHistory(false, 'internal');\n\n //for IE touch devices\n container.css({\n '-ms-touch-action': '',\n 'touch-action': ''\n });\n\n silentScroll(0);\n\n //scrolling the page to the section with no animation\n if (element.length) {\n $htmlBody.scrollTop(element.position().top);\n }\n }\n\n };\n\n /**\n * Defines wheter to record the history for each hash change in the URL.\n */\n FP.setRecordHistory = function(value, type){\n setVariableState('recordHistory', value, type);\n };\n\n /**\n * Defines the scrolling speed\n */\n FP.setScrollingSpeed = function(value, type){\n setVariableState('scrollingSpeed', value, type);\n };\n\n /**\n * Sets fitToSection\n */\n FP.setFitToSection = function(value, type){\n setVariableState('fitToSection', value, type);\n };\n\n /**\n * Adds or remove the possiblity of scrolling through sections by using the mouse wheel or the trackpad.\n */\n FP.setMouseWheelScrolling = function (value){\n if(value){\n addMouseWheelHandler();\n }else{\n removeMouseWheelHandler();\n }\n };\n\n /**\n * Adds or remove the possiblity of scrolling through sections by using the mouse wheel/trackpad or touch gestures.\n * Optionally a second parameter can be used to specify the direction for which the action will be applied.\n *\n * @param directions string containing the direction or directions separated by comma.\n */\n FP.setAllowScrolling = function (value, directions){\n if(typeof directions != 'undefined'){\n directions = directions.replace(/ /g,'').split(',');\n\n $.each(directions, function (index, direction){\n setIsScrollable(value, direction);\n });\n }\n else if(value){\n FP.setMouseWheelScrolling(true);\n addTouchHandler();\n }else{\n FP.setMouseWheelScrolling(false);\n removeTouchHandler();\n }\n };\n\n /**\n * Adds or remove the possiblity of scrolling through sections by using the keyboard arrow keys\n */\n FP.setKeyboardScrolling = function (value){\n options.keyboardScrolling = value;\n };\n\n /**\n * Moves the page up one section.\n */\n FP.moveSectionUp = function(){\n var prev = $(SECTION_ACTIVE_SEL).prev(SECTION_SEL);\n\n //looping to the bottom if there's no more sections above\n if (!prev.length && (options.loopTop || options.continuousVertical)) {\n prev = $(SECTION_SEL).last();\n }\n\n if (prev.length) {\n scrollPage(prev, null, true);\n }\n };\n\n /**\n * Moves the page down one section.\n */\n FP.moveSectionDown = function (){\n var next = $(SECTION_ACTIVE_SEL).next(SECTION_SEL);\n\n //looping to the top if there's no more sections below\n if(!next.length &&\n (options.loopBottom || options.continuousVertical)){\n next = $(SECTION_SEL).first();\n }\n\n if(next.length){\n scrollPage(next, null, false);\n }\n };\n\n /**\n * Moves the page to the given section and slide with no animation.\n * Anchors or index positions can be used as params.\n */\n FP.silentMoveTo = function(sectionAnchor, slideAnchor){\n FP.setScrollingSpeed (0, 'internal');\n FP.moveTo(sectionAnchor, slideAnchor)\n FP.setScrollingSpeed (originals.scrollingSpeed, 'internal');\n };\n\n /**\n * Moves the page to the given section and slide.\n * Anchors or index positions can be used as params.\n */\n FP.moveTo = function (sectionAnchor, slideAnchor){\n var destiny = getSectionByAnchor(sectionAnchor);\n\n if (typeof slideAnchor !== 'undefined'){\n scrollPageAndSlide(sectionAnchor, slideAnchor);\n }else if(destiny.length > 0){\n scrollPage(destiny);\n }\n };\n\n /**\n * Slides right the slider of the active section.\n */\n FP.moveSlideRight = function(){\n moveSlide('next');\n };\n\n /**\n * Slides left the slider of the active section.\n */\n FP.moveSlideLeft = function(){\n moveSlide('prev');\n };\n\n /**\n * When resizing is finished, we adjust the slides sizes and positions\n */\n FP.reBuild = function(resizing){\n if(container.hasClass(DESTROYED)){ return; } //nothing to do if the plugin was destroyed\n\n isResizing = true;\n\n var windowsWidth = $window.width();\n windowsHeight = $window.height(); //updating global var\n\n //text resizing\n if (options.resize) {\n resizeMe(windowsHeight, windowsWidth);\n }\n\n $(SECTION_SEL).each(function(){\n var slidesWrap = $(this).find(SLIDES_WRAPPER_SEL);\n var slides = $(this).find(SLIDE_SEL);\n\n //adjusting the height of the table-cell for IE and Firefox\n if(options.verticalCentered){\n $(this).find(TABLE_CELL_SEL).css('height', getTableHeight($(this)) + 'px');\n }\n\n $(this).css('height', windowsHeight + 'px');\n\n //resizing the scrolling divs\n if(options.scrollOverflow){\n if(slides.length){\n slides.each(function(){\n createSlimScrolling($(this));\n });\n }else{\n createSlimScrolling($(this));\n }\n }\n\n //adjusting the position fo the FULL WIDTH slides...\n if (slides.length > 1) {\n landscapeScroll(slidesWrap, slidesWrap.find(SLIDE_ACTIVE_SEL));\n }\n });\n\n var activeSection = $(SECTION_ACTIVE_SEL);\n var sectionIndex = activeSection.index(SECTION_SEL);\n\n //isn't it the first section?\n if(sectionIndex){\n //adjusting the position for the current section\n FP.silentMoveTo(sectionIndex + 1);\n }\n\n isResizing = false;\n $.isFunction( options.afterResize ) && resizing && options.afterResize.call(container);\n $.isFunction( options.afterReBuild ) && !resizing && options.afterReBuild.call(container);\n };\n\n //flag to avoid very fast sliding for landscape sliders\n var slideMoving = false;\n\n var isTouchDevice = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/);\n var isTouch = (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0) || (navigator.maxTouchPoints));\n var container = $(this);\n var windowsHeight = $window.height();\n var isResizing = false;\n var lastScrolledDestiny;\n var lastScrolledSlide;\n var canScroll = true;\n var scrollings = [];\n var nav;\n var controlPressed;\n var isScrollAllowed = { 'up':true, 'down':true, 'left':true, 'right':true };\n var originals = $.extend(true, {}, options); //deep copy\n\n if($(this).length){\n container.css({\n 'height': '100%',\n 'position': 'relative'\n });\n\n //adding a class to recognize the container internally in the code\n container.addClass(WRAPPER);\n $('html').addClass(ENABLED);\n }\n //trying to use fullpage without a selector?\n else{\n showError('error', 'Error! Fullpage.js needs to be initialized with a selector. For example: $(\\'#myContainer\\').fullpage();');\n }\n\n //if css3 is not supported, it will use jQuery animations\n if(options.css3){\n options.css3 = support3d();\n }\n\n FP.setAllowScrolling(true);\n container.removeClass(DESTROYED); //in case it was destroyed before initilizing it again\n\n\n //adding internal class names to void problem with common ones\n $(options.sectionSelector).each(function(){\n $(this).addClass(SECTION);\n });\n $(options.slideSelector).each(function(){\n $(this).addClass(SLIDE);\n });\n\n //creating the navigation dots\n if (options.navigation) {\n addVerticalNavigation();\n }\n\n //styling the sections\n $(SECTION_SEL).each(function(index){\n var that = $(this);\n var slides = $(this).find(SLIDE_SEL);\n var numSlides = slides.length;\n\n //if no active section is defined, the 1st one will be the default one\n if(!index && $(SECTION_ACTIVE_SEL).length === 0) {\n $(this).addClass(ACTIVE);\n }\n\n !options.autoHeight && $(this).css('height', windowsHeight + 'px');//非自动高度,就用整屏\n\n if(options.paddingTop){\n $(this).css('padding-top', options.paddingTop);\n }\n\n if(options.paddingBottom){\n $(this).css('padding-bottom', options.paddingBottom);\n }\n\n if (typeof options.sectionsColor[index] !== 'undefined') {\n $(this).css('background-color', options.sectionsColor[index]);\n }\n\n if (typeof options.anchors[index] !== 'undefined') {\n $(this).attr('data-anchor', options.anchors[index]);\n\n //activating the menu / nav element on load\n if($(this).hasClass(ACTIVE)){\n activateMenuAndNav(options.anchors[index], index);\n }\n }\n\n // if there's any slide\n if (numSlides > 0) {\n var sliderWidth = numSlides * 100;\n var slideWidth = 100 / numSlides;\n\n slides.wrapAll('
');\n slides.parent().wrap('
');\n\n $(this).find(SLIDES_CONTAINER_SEL).css('width', sliderWidth + '%');\n\n if(options.controlArrows && numSlides > 1){\n createSlideArrows($(this));\n }\n\n if(options.slidesNavigation){\n addSlidesNavigation($(this), numSlides);\n }\n\n slides.each(function(index) {\n $(this).css('width', slideWidth + '%');\n\n if(options.verticalCentered){\n addTableClass($(this));\n }\n });\n\n var startingSlide = that.find(SLIDE_ACTIVE_SEL);\n\n //if the slide won#t be an starting point, the default will be the first one\n if(!startingSlide.length){\n slides.eq(0).addClass(ACTIVE);\n }\n\n //is there a starting point for a non-starting section?\n else{\n silentLandscapeScroll(startingSlide);\n }\n\n }else{\n if(options.verticalCentered){\n addTableClass($(this));\n }\n }\n\n }).promise().done(function(){\n FP.setAutoScrolling(options.autoScrolling, 'internal');\n\n //the starting point is a slide?\n var activeSlide = $(SECTION_ACTIVE_SEL).find(SLIDE_ACTIVE_SEL);\n\n //the active section isn't the first one? Is not the first slide of the first section? Then we load that section/slide by default.\n if( activeSlide.length && ($(SECTION_ACTIVE_SEL).index(SECTION_SEL) !== 0 || ($(SECTION_ACTIVE_SEL).index(SECTION_SEL) === 0 && activeSlide.index() !== 0))){\n silentLandscapeScroll(activeSlide);\n }\n\n //fixed elements need to be moved out of the plugin container due to problems with CSS3.\n if(options.fixedElements && options.css3){\n $(options.fixedElements).appendTo($body);\n }\n\n //vertical centered of the navigation + first bullet active\n if(options.navigation){\n nav.css('margin-top', '-' + (nav.height()/2) + 'px');\n nav.find('li').eq($(SECTION_ACTIVE_SEL).index(SECTION_SEL)).find('a').addClass(ACTIVE);\n }\n\n //moving the menu outside the main container if it is inside (avoid problems with fixed positions when using CSS3 tranforms)\n if(options.menu && options.css3 && $(options.menu).closest(WRAPPER_SEL).length){\n $(options.menu).appendTo($body);\n }\n\n if(options.scrollOverflow){\n if(document.readyState === 'complete'){\n createSlimScrollingHandler();\n }\n //after DOM and images are loaded\n $window.on('load', createSlimScrollingHandler);\n }else{\n afterRenderActions();\n }\n\n responsive();\n\n //for animateAnchor:false\n if(!options.animateAnchor){\n //getting the anchor link in the URL and deleting the `#`\n var value = window.location.hash.replace('#', '').split('/');\n var destiny = value[0];\n\n if(destiny.length){\n var section = $('[data-anchor=\"'+destiny+'\"]');\n\n if(section.length){\n if(options.autoScrolling){\n silentScroll(section.position().top);\n }\n else{\n silentScroll(0);\n\n //scrolling the page to the section with no animation\n $htmlBody.scrollTop(section.position().top);\n }\n activateMenuAndNav(destiny, null);\n\n $.isFunction( options.afterLoad ) && options.afterLoad.call( section, destiny, (section.index(SECTION_SEL) + 1));\n\n //updating the active class\n section.addClass(ACTIVE).siblings().removeClass(ACTIVE);\n }\n }\n }\n\n //setting the class for the body element\n setBodyClass();\n\n $window.on('load', function() {\n scrollToAnchor();\n });\n\n });\n\n\n /**\n * Creates the control arrows for the given section\n */\n function createSlideArrows(section){\n section.find(SLIDES_WRAPPER_SEL).after('
');\n\n if(options.controlArrowColor!='#fff'){\n section.find(SLIDES_ARROW_NEXT_SEL).css('border-color', 'transparent transparent transparent '+options.controlArrowColor);\n section.find(SLIDES_ARROW_PREV_SEL).css('border-color', 'transparent '+ options.controlArrowColor + ' transparent transparent');\n }\n\n if(!options.loopHorizontal){\n section.find(SLIDES_ARROW_PREV_SEL).hide();\n }\n }\n\n /**\n * Creates a vertical navigation bar.\n */\n function addVerticalNavigation(){\n $body.append('
    ');\n nav = $(SECTION_NAV_SEL);\n\n nav.addClass(function() {\n return options.showActiveTooltip ? SHOW_ACTIVE_TOOLTIP + ' ' + options.navigationPosition : options.navigationPosition;\n });\n\n for (var i = 0; i < $(SECTION_SEL).length; i++) {\n var link = '';\n if (options.anchors.length) {\n link = options.anchors[i];\n }\n\n var li = '
  • ';\n //增加导航文字\n if (options.navigationText && Array.isArray(options.navigationText) && options.navigationText.length > 0){\n li = '
  • ' + options.navigationText[i] + '';\n }\n // Only add tooltip if needed (defined by user)\n var tooltip = options.navigationTooltips[i];\n\n if (typeof tooltip !== 'undefined' && tooltip !== '') {\n li += '
    ' + tooltip + '
    ';\n }\n\n li += '
  • ';\n\n nav.find('ul').append(li);\n }\n }\n\n /**\n * Creates the slim scroll scrollbar for the sections and slides inside them.\n */\n function createSlimScrollingHandler(){\n $(SECTION_SEL).each(function(){\n var slides = $(this).find(SLIDE_SEL);\n\n if(slides.length){\n slides.each(function(){\n createSlimScrolling($(this));\n });\n }else{\n createSlimScrolling($(this));\n }\n\n });\n afterRenderActions();\n }\n\n /**\n * Actions and callbacks to fire afterRender\n */\n function afterRenderActions(){\n var section = $(SECTION_ACTIVE_SEL);\n\n //to solve a bug with slimScroll vendor #1037, #553\n section.find('.fp-scrollable').mouseover();\n\n $.isFunction( options.afterLoad ) && options.afterLoad.call(section, section.data('anchor'), (section.index(SECTION_SEL) + 1));\n $.isFunction( options.afterRender ) && options.afterRender.call( this);\n }\n\n var scrollId;\n var scrollId2;\n var isScrolling = false;\n\n //when scrolling...\n $window.on('scroll', scrollHandler);\n\n function scrollHandler(){\n var currentSection;\n\n if(!options.autoScrolling || options.scrollBar){\n var currentScroll = $window.scrollTop();\n var visibleSectionIndex = 0;\n var initial = Math.abs(currentScroll - document.querySelectorAll(SECTION_SEL)[0].offsetTop);\n\n //taking the section which is showing more content in the viewport\n var sections = document.querySelectorAll(SECTION_SEL);\n for (var i = 0; i < sections.length; ++i) {\n var section = sections[i];\n\n var current = Math.abs(currentScroll - section.offsetTop);\n\n if(current < initial){\n visibleSectionIndex = i;\n initial = current;\n }\n }\n\n //geting the last one, the current one on the screen\n currentSection = $(sections).eq(visibleSectionIndex);\n }\n\n if(!options.autoScrolling || options.scrollBar){\n //executing only once the first time we reach the section\n if(!currentSection.hasClass(ACTIVE)){\n isScrolling = true;\n var leavingSection = $(SECTION_ACTIVE_SEL);\n var leavingSectionIndex = leavingSection.index(SECTION_SEL) + 1;\n var yMovement = getYmovement(currentSection);\n var anchorLink = currentSection.data('anchor');\n var sectionIndex = currentSection.index(SECTION_SEL) + 1;\n var activeSlide = currentSection.find(SLIDE_ACTIVE_SEL);\n\n if(activeSlide.length){\n var slideAnchorLink = activeSlide.data('anchor');\n var slideIndex = activeSlide.index();\n }\n\n if(canScroll){\n currentSection.addClass(ACTIVE).siblings().removeClass(ACTIVE);\n\n $.isFunction( options.onLeave ) && options.onLeave.call( leavingSection, leavingSectionIndex, sectionIndex, yMovement);\n\n $.isFunction( options.afterLoad ) && options.afterLoad.call( currentSection, anchorLink, sectionIndex);\n\n activateMenuAndNav(anchorLink, sectionIndex - 1);\n\n if(options.anchors.length){\n //needed to enter in hashChange event when using the menu with anchor links\n lastScrolledDestiny = anchorLink;\n\n setState(slideIndex, slideAnchorLink, anchorLink, sectionIndex);\n }\n }\n\n //small timeout in order to avoid entering in hashChange event when scrolling is not finished yet\n clearTimeout(scrollId);\n scrollId = setTimeout(function(){\n isScrolling = false;\n }, 100);\n }\n\n if(options.fitToSection){\n //for the auto adjust of the viewport to fit a whole section\n clearTimeout(scrollId2);\n\n scrollId2 = setTimeout(function(){\n if(canScroll){\n //allows to scroll to an active section and\n //if the section is already active, we prevent firing callbacks\n if($(SECTION_ACTIVE_SEL).is(currentSection)){\n isResizing = true;\n }\n scrollPage(currentSection);\n isResizing = false;\n }\n }, 1000);\n }\n }\n }\n\n\n /**\n * Determines whether the active section or slide is scrollable through and scrolling bar\n */\n function isScrollable(activeSection){\n //if there are landscape slides, we check if the scrolling bar is in the current one or not\n if(activeSection.find(SLIDES_WRAPPER_SEL).length){\n return activeSection.find(SLIDE_ACTIVE_SEL).find(SCROLLABLE_SEL);\n }\n\n return activeSection.find(SCROLLABLE_SEL);\n }\n\n /**\n * Determines the way of scrolling up or down:\n * by 'automatically' scrolling a section or by using the default and normal scrolling.\n */\n function scrolling(type, scrollable){\n if (!isScrollAllowed[type]){\n return;\n }\n var check, scrollSection;\n\n if(type == 'down'){\n check = 'bottom';\n scrollSection = FP.moveSectionDown;\n }else{\n check = 'top';\n scrollSection = FP.moveSectionUp;\n }\n\n if(scrollable.length > 0 ){\n //is the scrollbar at the start/end of the scroll?\n if(isScrolled(check, scrollable)){\n scrollSection();\n }else{\n return true;\n }\n }else{\n // moved up/down\n scrollSection();\n }\n }\n\n\n var touchStartY = 0;\n var touchStartX = 0;\n var touchEndY = 0;\n var touchEndX = 0;\n\n /* Detecting touch events\n\n * As we are changing the top property of the page on scrolling, we can not use the traditional way to detect it.\n * This way, the touchstart and the touch moves shows an small difference between them which is the\n * used one to determine the direction.\n */\n function touchMoveHandler(event){\n var e = event.originalEvent;\n\n // additional: if one of the normalScrollElements isn't within options.normalScrollElementTouchThreshold hops up the DOM chain\n if (!checkParentForNormalScrollElement(event.target) && isReallyTouch(e) ) {\n\n if(options.autoScrolling){\n //preventing the easing on iOS devices\n event.preventDefault();\n }\n\n var activeSection = $(SECTION_ACTIVE_SEL);\n var scrollable = isScrollable(activeSection);\n\n if (canScroll && !slideMoving) { //if theres any #\n var touchEvents = getEventsPage(e);\n\n touchEndY = touchEvents.y;\n touchEndX = touchEvents.x;\n\n //if movement in the X axys is greater than in the Y and the currect section has slides...\n if (activeSection.find(SLIDES_WRAPPER_SEL).length && Math.abs(touchStartX - touchEndX) > (Math.abs(touchStartY - touchEndY))) {\n\n //is the movement greater than the minimum resistance to scroll?\n if (Math.abs(touchStartX - touchEndX) > ($window.width() / 100 * options.touchSensitivity)) {\n if (touchStartX > touchEndX) {\n if(isScrollAllowed.right){\n FP.moveSlideRight(); //next\n }\n } else {\n if(isScrollAllowed.left){\n FP.moveSlideLeft(); //prev\n }\n }\n }\n }\n\n //vertical scrolling (only when autoScrolling is enabled)\n else if(options.autoScrolling){\n\n //is the movement greater than the minimum resistance to scroll?\n if (Math.abs(touchStartY - touchEndY) > ($window.height() / 100 * options.touchSensitivity)) {\n if (touchStartY > touchEndY) {\n scrolling('down', scrollable);\n } else if (touchEndY > touchStartY) {\n scrolling('up', scrollable);\n }\n }\n }\n }\n }\n\n }\n\n /**\n * recursive function to loop up the parent nodes to check if one of them exists in options.normalScrollElements\n * Currently works well for iOS - Android might need some testing\n * @param {Element} el target element / jquery selector (in subsequent nodes)\n * @param {int} hop current hop compared to options.normalScrollElementTouchThreshold\n * @return {boolean} true if there is a match to options.normalScrollElements\n */\n function checkParentForNormalScrollElement (el, hop) {\n hop = hop || 0;\n var parent = $(el).parent();\n\n if (hop < options.normalScrollElementTouchThreshold &&\n parent.is(options.normalScrollElements) ) {\n return true;\n } else if (hop == options.normalScrollElementTouchThreshold) {\n return false;\n } else {\n return checkParentForNormalScrollElement(parent, ++hop);\n }\n }\n\n /**\n * As IE >= 10 fires both touch and mouse events when using a mouse in a touchscreen\n * this way we make sure that is really a touch event what IE is detecting.\n */\n function isReallyTouch(e){\n //if is not IE || IE is detecting `touch` or `pen`\n return typeof e.pointerType === 'undefined' || e.pointerType != 'mouse';\n }\n\n /**\n * Handler for the touch start event.\n */\n function touchStartHandler(event){\n var e = event.originalEvent;\n\n //stopping the auto scroll to adjust to a section\n if(options.fitToSection){\n $htmlBody.stop();\n }\n\n if(isReallyTouch(e)){\n var touchEvents = getEventsPage(e);\n touchStartY = touchEvents.y;\n touchStartX = touchEvents.x;\n }\n }\n\n /**\n * Gets the average of the last `number` elements of the given array.\n */\n function getAverage(elements, number){\n var sum = 0;\n\n //taking `number` elements from the end to make the average, if there are not enought, 1\n var lastElements = elements.slice(Math.max(elements.length - number, 1));\n\n for(var i = 0; i < lastElements.length; i++){\n sum = sum + lastElements[i];\n }\n\n return Math.ceil(sum/number);\n }\n\n /**\n * Detecting mousewheel scrolling\n *\n * http://blogs.sitepointstatic.com/examples/tech/mouse-wheel/index.html\n * http://www.sitepoint.com/html5-javascript-mouse-wheel/\n */\n var prevTime = new Date().getTime();\n\n function MouseWheelHandler(e) {\n var curTime = new Date().getTime();\n\n //autoscrolling and not zooming?\n if(options.autoScrolling && !controlPressed){\n // cross-browser wheel delta\n e = window.event || e;\n var value = e.wheelDelta || -e.deltaY || -e.detail;\n var delta = Math.max(-1, Math.min(1, value));\n\n //Limiting the array to 150 (lets not waist memory!)\n if(scrollings.length > 149){\n scrollings.shift();\n }\n\n //keeping record of the previous scrollings\n scrollings.push(Math.abs(value));\n\n //preventing to scroll the site on mouse wheel when scrollbar is present\n if(options.scrollBar){\n e.preventDefault ? e.preventDefault() : e.returnValue = false;\n }\n\n var activeSection = $(SECTION_ACTIVE_SEL);\n var scrollable = isScrollable(activeSection);\n\n //time difference between the last scroll and the current one\n var timeDiff = curTime-prevTime;\n prevTime = curTime;\n\n //haven't they scrolled in a while?\n //(enough to be consider a different scrolling action to scroll another section)\n if(timeDiff > 200){\n //emptying the array, we dont care about old scrollings for our averages\n scrollings = [];\n }\n\n if(canScroll){\n var averageEnd = getAverage(scrollings, 10);\n var averageMiddle = getAverage(scrollings, 70);\n var isAccelerating = averageEnd >= averageMiddle;\n\n //to avoid double swipes...\n if(isAccelerating){\n //scrolling down?\n if (delta < 0) {\n scrolling('down', scrollable);\n\n //scrolling up?\n }else {\n scrolling('up', scrollable);\n }\n }\n }\n\n return false;\n }\n\n if(options.fitToSection){\n //stopping the auto scroll to adjust to a section\n $htmlBody.stop();\n }\n }\n\n /**\n * Slides a slider to the given direction.\n */\n function moveSlide(direction){\n var activeSection = $(SECTION_ACTIVE_SEL);\n var slides = activeSection.find(SLIDES_WRAPPER_SEL);\n\n // more than one slide needed and nothing should be sliding\n if (!slides.length || slideMoving) {\n return;\n }\n\n var currentSlide = slides.find(SLIDE_ACTIVE_SEL);\n var destiny = null;\n\n if(direction === 'prev'){\n destiny = currentSlide.prev(SLIDE_SEL);\n }else{\n destiny = currentSlide.next(SLIDE_SEL);\n }\n\n //isn't there a next slide in the secuence?\n if(!destiny.length){\n //respect loopHorizontal settin\n if (!options.loopHorizontal) return;\n\n if(direction === 'prev'){\n destiny = currentSlide.siblings(':last');\n }else{\n destiny = currentSlide.siblings(':first');\n }\n }\n\n slideMoving = true;\n\n landscapeScroll(slides, destiny);\n }\n\n /**\n * Maintains the active slides in the viewport\n * (Because he `scroll` animation might get lost with some actions, such as when using continuousVertical)\n */\n function keepSlidesPosition(){\n $(SLIDE_ACTIVE_SEL).each(function(){\n silentLandscapeScroll($(this), 'internal');\n });\n }\n\n /**\n * Scrolls the site to the given element and scrolls to the slide if a callback is given.\n */\n function scrollPage(element, callback, isMovementUp){\n var dest = element.position();\n if(typeof dest === 'undefined'){ return; } //there's no element to scroll, leaving the function\n\n //local variables\n var v = {\n element: element,\n callback: callback,\n isMovementUp: isMovementUp,\n dest: dest,\n dtop: dest.top,\n yMovement: getYmovement(element),\n anchorLink: element.data('anchor'),\n sectionIndex: element.index(SECTION_SEL),\n activeSlide: element.find(SLIDE_ACTIVE_SEL),\n activeSection: $(SECTION_ACTIVE_SEL),\n leavingSection: $(SECTION_ACTIVE_SEL).index(SECTION_SEL) + 1,\n\n //caching the value of isResizing at the momment the function is called\n //because it will be checked later inside a setTimeout and the value might change\n localIsResizing: isResizing\n };\n\n //quiting when destination scroll is the same as the current one\n if((v.activeSection.is(element) && !isResizing) || (options.scrollBar && $window.scrollTop() === v.dtop)){ return; }\n\n if(v.activeSlide.length){\n var slideAnchorLink = v.activeSlide.data('anchor');\n var slideIndex = v.activeSlide.index();\n }\n\n // If continuousVertical && we need to wrap around\n if (options.autoScrolling && options.continuousVertical && typeof (v.isMovementUp) !== \"undefined\" &&\n ((!v.isMovementUp && v.yMovement == 'up') || // Intending to scroll down but about to go up or\n (v.isMovementUp && v.yMovement == 'down'))) { // intending to scroll up but about to go down\n\n v = createInfiniteSections(v);\n }\n\n element.addClass(ACTIVE).siblings().removeClass(ACTIVE);\n\n //preventing from activating the MouseWheelHandler event\n //more than once if the page is scrolling\n canScroll = false;\n\n setState(slideIndex, slideAnchorLink, v.anchorLink, v.sectionIndex);\n\n //callback (onLeave) if the site is not just resizing and readjusting the slides\n $.isFunction(options.onLeave) && !v.localIsResizing && options.onLeave.call(v.activeSection, v.leavingSection, (v.sectionIndex + 1), v.yMovement);\n if (options.autoHeight){\n //容器在视口内高度\n !containerInView && (containerInView = window.innerHeight - container.offset().top);\n //.nav-content为需要垂直居中显示的内容, .nav-content到section的距离+section到容器的距离就是居中内容到容器的距离-容器距离一半+居中内容一半,就使内容垂直居中\n v.dtop = ( v.element.find(\".nav-content\").position().top + v.element.position().top ) - containerInView/2 + v.element.find(\".nav-content\").height()/2;\n v.dtop -= 50;\n if ($(container).children()[0] == v.element[0] || v.dtop <= 0){ //第一个section\n v.dtop = 0;\n } else if ($(container).children().last()[0] == v.element[0]){ //最后一个section\n v.dtop = container.height() - containerInView;\n } else if (v.dtop + containerInView >= container.height()){\n v.dtop = container.height() - containerInView;\n }\n }\n performMovement(v);\n\n //flag to avoid callingn `scrollPage()` twice in case of using anchor links\n lastScrolledDestiny = v.anchorLink;\n\n //avoid firing it twice (as it does also on scroll)\n activateMenuAndNav(v.anchorLink, v.sectionIndex);\n }\n\n /**\n * Performs the movement (by CSS3 or by jQuery)\n */\n function performMovement(v){\n // using CSS3 translate functionality\n if (options.css3 && options.autoScrolling && !options.scrollBar) {\n\n var translate3d = 'translate3d(0px, -' + v.dtop + 'px, 0px)';\n transformContainer(translate3d, true);\n\n //even when the scrollingSpeed is 0 there's a little delay, which might cause the\n //scrollingSpeed to change in case of using silentMoveTo();\n if(options.scrollingSpeed){\n setTimeout(function () {\n afterSectionLoads(v);\n }, options.scrollingSpeed);\n }else{\n afterSectionLoads(v);\n }\n }\n\n // using jQuery animate\n else{\n var scrollSettings = getScrollSettings(v);\n\n $(scrollSettings.element).animate(\n scrollSettings.options,\n options.scrollingSpeed, options.easing).promise().done(function () { //only one single callback in case of animating `html, body`\n afterSectionLoads(v);\n });\n }\n }\n\n /**\n * Gets the scrolling settings depending on the plugin autoScrolling option\n */\n function getScrollSettings(v){\n var scroll = {};\n\n if(options.autoScrolling && !options.scrollBar){\n scroll.options = { 'top': -v.dtop};\n scroll.element = WRAPPER_SEL;\n }else{\n scroll.options = { 'scrollTop': v.dtop};\n scroll.element = 'html, body';\n }\n\n return scroll;\n }\n\n /**\n * Adds sections before or after the current one to create the infinite effect.\n */\n function createInfiniteSections(v){\n // Scrolling down\n if (!v.isMovementUp) {\n // Move all previous sections to after the active section\n $(SECTION_ACTIVE_SEL).after(v.activeSection.prevAll(SECTION_SEL).get().reverse());\n }\n else { // Scrolling up\n // Move all next sections to before the active section\n $(SECTION_ACTIVE_SEL).before(v.activeSection.nextAll(SECTION_SEL));\n }\n\n // Maintain the displayed position (now that we changed the element order)\n silentScroll($(SECTION_ACTIVE_SEL).position().top);\n\n // Maintain the active slides visible in the viewport\n keepSlidesPosition();\n\n // save for later the elements that still need to be reordered\n v.wrapAroundElements = v.activeSection;\n\n // Recalculate animation variables\n v.dest = v.element.position();\n v.dtop = v.dest.top;\n v.yMovement = getYmovement(v.element);\n\n return v;\n }\n\n /**\n * Fix section order after continuousVertical changes have been animated\n */\n function continuousVerticalFixSectionOrder (v) {\n // If continuousVertical is in effect (and autoScrolling would also be in effect then),\n // finish moving the elements around so the direct navigation will function more simply\n if (!v.wrapAroundElements || !v.wrapAroundElements.length) {\n return;\n }\n\n if (v.isMovementUp) {\n $(SECTION_FIRST_SEL).before(v.wrapAroundElements);\n }\n else {\n $(SECTION_LAST_SEL).after(v.wrapAroundElements);\n }\n\n silentScroll($(SECTION_ACTIVE_SEL).position().top);\n\n // Maintain the active slides visible in the viewport\n keepSlidesPosition();\n }\n\n\n /**\n * Actions to do once the section is loaded\n */\n function afterSectionLoads (v){\n continuousVerticalFixSectionOrder(v);\n\n v.element.find('.fp-scrollable').mouseover();\n\n //callback (afterLoad) if the site is not just resizing and readjusting the slides\n $.isFunction(options.afterLoad) && !v.localIsResizing && options.afterLoad.call(v.element, v.anchorLink, (v.sectionIndex + 1));\n\n canScroll = true;\n\n $.isFunction(v.callback) && v.callback.call(this);\n }\n\n /**\n * Scrolls to the anchor in the URL when loading the site\n */\n function scrollToAnchor(){\n //getting the anchor link in the URL and deleting the `#`\n var value = window.location.hash.replace('#', '').split('/');\n var section = value[0];\n var slide = value[1];\n\n if(section){ //if theres any #\n scrollPageAndSlide(section, slide);\n }\n }\n\n //detecting any change on the URL to scroll to the given anchor link\n //(a way to detect back history button as we play with the hashes on the URL)\n $window.on('hashchange', hashChangeHandler);\n\n function hashChangeHandler(){\n if(!isScrolling){\n var value = window.location.hash.replace('#', '').split('/');\n var section = value[0];\n var slide = value[1];\n\n if(section.length){\n //when moving to a slide in the first section for the first time (first time to add an anchor to the URL)\n var isFirstSlideMove = (typeof lastScrolledDestiny === 'undefined');\n var isFirstScrollMove = (typeof lastScrolledDestiny === 'undefined' && typeof slide === 'undefined' && !slideMoving);\n\n /*in order to call scrollpage() only once for each destination at a time\n It is called twice for each scroll otherwise, as in case of using anchorlinks `hashChange`\n event is fired on every scroll too.*/\n if ((section && section !== lastScrolledDestiny) && !isFirstSlideMove || isFirstScrollMove || (!slideMoving && lastScrolledSlide != slide )) {\n scrollPageAndSlide(section, slide);\n }\n }\n }\n }\n\n /**\n * Sliding with arrow keys, both, vertical and horizontal\n */\n $document.keydown(keydownHandler);\n\n //to prevent scrolling while zooming\n $document.keyup(function(e){\n controlPressed = e.ctrlKey;\n });\n\n var keydownId;\n function keydownHandler(e) {\n clearTimeout(keydownId);\n controlPressed = e.ctrlKey;\n\n var activeElement = $(document.activeElement);\n\n if(!activeElement.is('textarea') && !activeElement.is('input') && !activeElement.is('select') &&\n options.keyboardScrolling && options.autoScrolling){\n var keyCode = e.which;\n\n //preventing the scroll with arrow keys & spacebar & Page Up & Down keys\n var keyControls = [40, 38, 32, 33, 34];\n if($.inArray(keyCode, keyControls) > -1){\n e.preventDefault();\n }\n\n keydownId = setTimeout(function(){\n onkeydown(e);\n },150);\n }\n }\n\n /**\n * Keydown event\n */\n function onkeydown(e){\n var shiftPressed = e.shiftKey;\n switch (e.which) {\n //up\n case 38:\n case 33:\n FP.moveSectionUp();\n break;\n\n //down\n case 32: //spacebar\n if(shiftPressed){\n FP.moveSectionUp();\n break;\n }\n case 40:\n case 34:\n FP.moveSectionDown();\n break;\n\n //Home\n case 36:\n FP.moveTo(1);\n break;\n\n //End\n case 35:\n FP.moveTo( $(SECTION_SEL).length );\n break;\n\n //left\n case 37:\n FP.moveSlideLeft();\n break;\n\n //right\n case 39:\n FP.moveSlideRight();\n break;\n\n default:\n return; // exit this handler for other keys\n }\n }\n\n //binding the mousemove when the mouse's middle button is released\n container.mousedown(function(e){\n //middle button\n if (e.which == 2){\n oldPageY = e.pageY;\n container.on('mousemove', mouseMoveHandler);\n }\n });\n\n //unbinding the mousemove when the mouse's middle button is released\n container.mouseup(function(e){\n //middle button\n if (e.which == 2){\n container.off('mousemove');\n }\n });\n\n /**\n * Detecting the direction of the mouse movement.\n * Used only for the middle button of the mouse.\n */\n var oldPageY = 0;\n function mouseMoveHandler(e){\n // moving up\n if(canScroll){\n if (e.pageY < oldPageY){\n FP.moveSectionUp();\n\n // moving downw\n }else if(e.pageY > oldPageY){\n FP.moveSectionDown();\n }\n }\n oldPageY = e.pageY;\n }\n\n /**\n * Scrolls to the section when clicking the navigation bullet\n */\n $document.on('click touchstart', SECTION_NAV_SEL + ' a', function(e){\n e.preventDefault();\n var index = $(this).parent().index();\n scrollPage($(SECTION_SEL).eq(index));\n });\n\n /**\n * Scrolls the slider to the given slide destination for the given section\n */\n $document.on('click touchstart', SLIDES_NAV_LINK_SEL, function(e){\n e.preventDefault();\n var slides = $(this).closest(SECTION_SEL).find(SLIDES_WRAPPER_SEL);\n var destiny = slides.find(SLIDE_SEL).eq($(this).closest('li').index());\n\n landscapeScroll(slides, destiny);\n });\n\n /**\n * Applying normalScroll elements.\n * Ignoring the scrolls over the specified selectors.\n */\n if(options.normalScrollElements){\n $document.on('mouseenter', options.normalScrollElements, function () {\n FP.setMouseWheelScrolling(false);\n });\n\n $document.on('mouseleave', options.normalScrollElements, function(){\n FP.setMouseWheelScrolling(true);\n });\n }\n\n /**\n * Scrolling horizontally when clicking on the slider controls.\n */\n $(SECTION_SEL).on('click touchstart', SLIDES_ARROW_SEL, function() {\n if ($(this).hasClass(SLIDES_PREV)) {\n if(isScrollAllowed.left){\n FP.moveSlideLeft();\n }\n } else {\n if(isScrollAllowed.right){\n FP.moveSlideRight();\n }\n }\n });\n\n /**\n * Scrolls horizontal sliders.\n */\n function landscapeScroll(slides, destiny){\n var destinyPos = destiny.position();\n var slideIndex = destiny.index();\n var section = slides.closest(SECTION_SEL);\n var sectionIndex = section.index(SECTION_SEL);\n var anchorLink = section.data('anchor');\n var slidesNav = section.find(SLIDES_NAV_SEL);\n var slideAnchor = getSlideAnchor(destiny);\n\n //caching the value of isResizing at the momment the function is called\n //because it will be checked later inside a setTimeout and the value might change\n var localIsResizing = isResizing;\n\n if(options.onSlideLeave){\n var prevSlide = section.find(SLIDE_ACTIVE_SEL);\n var prevSlideIndex = prevSlide.index();\n var xMovement = getXmovement(prevSlideIndex, slideIndex);\n\n //if the site is not just resizing and readjusting the slides\n if(!localIsResizing && xMovement!=='none'){\n $.isFunction( options.onSlideLeave ) && options.onSlideLeave.call( prevSlide, anchorLink, (sectionIndex + 1), prevSlideIndex, xMovement);\n }\n }\n\n destiny.addClass(ACTIVE).siblings().removeClass(ACTIVE);\n\n if(!options.loopHorizontal && options.controlArrows){\n //hidding it for the fist slide, showing for the rest\n section.find(SLIDES_ARROW_PREV_SEL).toggle(slideIndex!==0);\n\n //hidding it for the last slide, showing for the rest\n section.find(SLIDES_ARROW_NEXT_SEL).toggle(!destiny.is(':last-child'));\n }\n\n //only changing the URL if the slides are in the current section (not for resize re-adjusting)\n if(section.hasClass(ACTIVE)){\n setState(slideIndex, slideAnchor, anchorLink, sectionIndex);\n }\n\n var afterSlideLoads = function(){\n //if the site is not just resizing and readjusting the slides\n if(!localIsResizing){\n $.isFunction( options.afterSlideLoad ) && options.afterSlideLoad.call( destiny, anchorLink, (sectionIndex + 1), slideAnchor, slideIndex);\n }\n //letting them slide again\n slideMoving = false;\n };\n\n if(options.css3){\n var translate3d = 'translate3d(-' + Math.round(destinyPos.left) + 'px, 0px, 0px)';\n\n addAnimation(slides.find(SLIDES_CONTAINER_SEL), options.scrollingSpeed>0).css(getTransforms(translate3d));\n\n setTimeout(function(){\n afterSlideLoads();\n }, options.scrollingSpeed, options.easing);\n }else{\n slides.animate({\n scrollLeft : Math.round(destinyPos.left)\n }, options.scrollingSpeed, options.easing, function() {\n\n afterSlideLoads();\n });\n }\n\n slidesNav.find(ACTIVE_SEL).removeClass(ACTIVE);\n slidesNav.find('li').eq(slideIndex).find('a').addClass(ACTIVE);\n }\n\n //when resizing the site, we adjust the heights of the sections, slimScroll...\n $window.resize(resizeHandler);\n\n var previousHeight = windowsHeight;\n var resizeId;\n function resizeHandler(){\n //checking if it needs to get responsive\n responsive();\n\n // rebuild immediately on touch devices\n if (isTouchDevice) {\n var activeElement = $(document.activeElement);\n\n //if the keyboard is NOT visible\n if (!activeElement.is('textarea') && !activeElement.is('input') && !activeElement.is('select')) {\n var currentHeight = $window.height();\n\n //making sure the change in the viewport size is enough to force a rebuild. (20 % of the window to avoid problems when hidding scroll bars)\n if( Math.abs(currentHeight - previousHeight) > (20 * Math.max(previousHeight, currentHeight) / 100) ){\n FP.reBuild(true);\n previousHeight = currentHeight;\n }\n }\n }else{\n //in order to call the functions only when the resize is finished\n //http://stackoverflow.com/questions/4298612/jquery-how-to-call-resize-event-only-once-its-finished-resizing\n clearTimeout(resizeId);\n\n resizeId = setTimeout(function(){\n FP.reBuild(true);\n }, 350);\n }\n }\n\n /**\n * Checks if the site needs to get responsive and disables autoScrolling if so.\n * A class `fp-responsive` is added to the plugin's container in case the user wants to use it for his own responsive CSS.\n */\n function responsive(){\n if(options.responsive){\n var isResponsive = container.hasClass(RESPONSIVE);\n if ($window.width() < options.responsive ){\n if(!isResponsive){\n FP.setAutoScrolling(false, 'internal');\n FP.setFitToSection(false, 'internal');\n $(SECTION_NAV_SEL).hide();\n container.addClass(RESPONSIVE);\n }\n }else if(isResponsive){\n FP.setAutoScrolling(originals.autoScrolling, 'internal');\n FP.setFitToSection(originals.autoScrolling, 'internal');\n $(SECTION_NAV_SEL).show();\n container.removeClass(RESPONSIVE);\n }\n }\n }\n\n /**\n * Adds transition animations for the given element\n */\n function addAnimation(element){\n var transition = 'all ' + options.scrollingSpeed + 'ms ' + options.easingcss3;\n\n element.removeClass(NO_TRANSITION);\n return element.css({\n '-webkit-transition': transition,\n 'transition': transition\n });\n }\n\n /**\n * Remove transition animations for the given element\n */\n function removeAnimation(element){\n return element.addClass(NO_TRANSITION);\n }\n\n /**\n * Resizing of the font size depending on the window size as well as some of the images on the site.\n */\n function resizeMe(displayHeight, displayWidth) {\n //Standard dimensions, for which the body font size is correct\n var preferredHeight = 825;\n var preferredWidth = 900;\n\n if (displayHeight < preferredHeight || displayWidth < preferredWidth) {\n var heightPercentage = (displayHeight * 100) / preferredHeight;\n var widthPercentage = (displayWidth * 100) / preferredWidth;\n var percentage = Math.min(heightPercentage, widthPercentage);\n var newFontSize = percentage.toFixed(2);\n\n $body.css('font-size', newFontSize + '%');\n } else {\n $body.css('font-size', '100%');\n }\n }\n\n /**\n * Activating the website navigation dots according to the given slide name.\n */\n function activateNavDots(name, sectionIndex){\n if(options.navigation){\n $(SECTION_NAV_SEL).find(ACTIVE_SEL).removeClass(ACTIVE);\n if(name){\n $(SECTION_NAV_SEL).find('a[href=\"#' + name + '\"]').addClass(ACTIVE);\n }else{\n $(SECTION_NAV_SEL).find('li').eq(sectionIndex).find('a').addClass(ACTIVE);\n }\n }\n }\n\n /**\n * Activating the website main menu elements according to the given slide name.\n */\n function activateMenuElement(name){\n if(options.menu){\n $(options.menu).find(ACTIVE_SEL).removeClass(ACTIVE);\n $(options.menu).find('[data-menuanchor=\"'+name+'\"]').addClass(ACTIVE);\n }\n }\n\n function activateMenuAndNav(anchor, index){\n activateMenuElement(anchor);\n activateNavDots(anchor, index);\n }\n\n /**\n * Return a boolean depending on whether the scrollable element is at the end or at the start of the scrolling\n * depending on the given type.\n */\n function isScrolled(type, scrollable){\n if(type === 'top'){\n return !scrollable.scrollTop();\n }else if(type === 'bottom'){\n return scrollable.scrollTop() + 1 + scrollable.innerHeight() >= scrollable[0].scrollHeight;\n }\n }\n\n /**\n * Retuns `up` or `down` depending on the scrolling movement to reach its destination\n * from the current section.\n */\n function getYmovement(destiny){\n var fromIndex = $(SECTION_ACTIVE_SEL).index(SECTION_SEL);\n var toIndex = destiny.index(SECTION_SEL);\n if( fromIndex == toIndex){\n return 'none';\n }\n if(fromIndex > toIndex){\n return 'up';\n }\n return 'down';\n }\n\n /**\n * Retuns `right` or `left` depending on the scrolling movement to reach its destination\n * from the current slide.\n */\n function getXmovement(fromIndex, toIndex){\n if( fromIndex == toIndex){\n return 'none';\n }\n if(fromIndex > toIndex){\n return 'left';\n }\n return 'right';\n }\n\n\n function createSlimScrolling(element){\n //needed to make `scrollHeight` work under Opera 12\n element.css('overflow', 'hidden');\n\n //in case element is a slide\n var section = element.closest(SECTION_SEL);\n var scrollable = element.find(SCROLLABLE_SEL);\n var contentHeight;\n\n //if there was scroll, the contentHeight will be the one in the scrollable section\n if(scrollable.length){\n contentHeight = scrollable.get(0).scrollHeight;\n }else{\n contentHeight = element.get(0).scrollHeight;\n if(options.verticalCentered){\n contentHeight = element.find(TABLE_CELL_SEL).get(0).scrollHeight;\n }\n }\n\n var scrollHeight = windowsHeight - parseInt(section.css('padding-bottom')) - parseInt(section.css('padding-top'));\n\n //needs scroll?\n if ( contentHeight > scrollHeight) {\n //was there already an scroll ? Updating it\n if(scrollable.length){\n scrollable.css('height', scrollHeight + 'px').parent().css('height', scrollHeight + 'px');\n }\n //creating the scrolling\n else{\n if(options.verticalCentered){\n element.find(TABLE_CELL_SEL).wrapInner('
    ');\n }else{\n element.wrapInner('
    ');\n }\n\n element.find(SCROLLABLE_SEL).slimScroll({\n allowPageScroll: true,\n height: scrollHeight + 'px',\n size: '10px',\n alwaysVisible: true\n });\n }\n }\n\n //removing the scrolling when it is not necessary anymore\n else{\n removeSlimScroll(element);\n }\n\n //undo\n element.css('overflow', '');\n }\n\n function removeSlimScroll(element){\n element.find(SCROLLABLE_SEL).children().first().unwrap().unwrap();\n element.find(SLIMSCROLL_BAR_SEL).remove();\n element.find(SLIMSCROLL_RAIL_SEL).remove();\n }\n\n function addTableClass(element){\n if (options.autoHeight){\n element.addClass(TABLE).wrapInner('
    ');\n } else {\n element.addClass(TABLE).wrapInner('
    ');\n }\n }\n\n function getTableHeight(element){\n var sectionHeight = windowsHeight;\n\n if(options.paddingTop || options.paddingBottom){\n var section = element;\n if(!section.hasClass(SECTION)){\n section = element.closest(SECTION_SEL);\n }\n\n var paddings = parseInt(section.css('padding-top')) + parseInt(section.css('padding-bottom'));\n sectionHeight = (windowsHeight - paddings);\n }\n\n return sectionHeight;\n }\n\n /**\n * Adds a css3 transform property to the container class with or without animation depending on the animated param.\n */\n function transformContainer(translate3d, animated){\n if(animated){\n addAnimation(container);\n }else{\n removeAnimation(container);\n }\n\n container.css(getTransforms(translate3d));\n\n //syncronously removing the class after the animation has been applied.\n setTimeout(function(){\n container.removeClass(NO_TRANSITION);\n },10);\n }\n\n /**\n * Gets a section by its anchor / index\n */\n function getSectionByAnchor(sectionAnchor){\n //section\n var section = $(SECTION_SEL + '[data-anchor=\"'+sectionAnchor+'\"]');\n if(!section.length){\n section = $(SECTION_SEL).eq( (sectionAnchor -1) );\n }\n\n return section;\n }\n\n /**\n * Gets a slide inside a given section by its anchor / index\n */\n function getSlideByAnchor(slideAnchor, section){\n var slides = section.find(SLIDES_WRAPPER_SEL);\n var slide = slides.find(SLIDE_SEL + '[data-anchor=\"'+slideAnchor+'\"]');\n\n if(!slide.length){\n slide = slides.find(SLIDE_SEL).eq(slideAnchor);\n }\n\n return slide;\n }\n\n /**\n * Scrolls to the given section and slide anchors\n */\n function scrollPageAndSlide(destiny, slide){\n var section = getSectionByAnchor(destiny);\n\n //default slide\n if (typeof slide === 'undefined') {\n slide = 0;\n }\n\n //we need to scroll to the section and then to the slide\n if (destiny !== lastScrolledDestiny && !section.hasClass(ACTIVE)){\n scrollPage(section, function(){\n scrollSlider(section, slide);\n });\n }\n //if we were already in the section\n else{\n scrollSlider(section, slide);\n }\n }\n\n /**\n * Scrolls the slider to the given slide destination for the given section\n */\n function scrollSlider(section, slideAnchor){\n if(typeof slideAnchor !== 'undefined'){\n var slides = section.find(SLIDES_WRAPPER_SEL);\n var destiny = getSlideByAnchor(slideAnchor, section);\n\n if(destiny.length){\n landscapeScroll(slides, destiny);\n }\n }\n }\n\n /**\n * Creates a landscape navigation bar with dots for horizontal sliders.\n */\n function addSlidesNavigation(section, numSlides){\n section.append('
      ');\n var nav = section.find(SLIDES_NAV_SEL);\n\n //top or bottom\n nav.addClass(options.slidesNavPosition);\n\n for(var i=0; i< numSlides; i++){\n nav.find('ul').append('
    • ');\n }\n\n //centering it\n nav.css('margin-left', '-' + (nav.width()/2) + 'px');\n\n nav.find('li').first().find('a').addClass(ACTIVE);\n }\n\n\n /**\n * Sets the state of the website depending on the active section/slide.\n * It changes the URL hash when needed and updates the body class.\n */\n function setState(slideIndex, slideAnchor, anchorLink, sectionIndex){\n var sectionHash = '';\n\n if(options.anchors.length){\n\n //isn't it the first slide?\n if(slideIndex){\n if(typeof anchorLink !== 'undefined'){\n sectionHash = anchorLink;\n }\n\n //slide without anchor link? We take the index instead.\n if(typeof slideAnchor === 'undefined'){\n slideAnchor = slideIndex;\n }\n\n lastScrolledSlide = slideAnchor;\n setUrlHash(sectionHash + '/' + slideAnchor);\n\n //first slide won't have slide anchor, just the section one\n }else if(typeof slideIndex !== 'undefined'){\n lastScrolledSlide = slideAnchor;\n setUrlHash(anchorLink);\n }\n\n //section without slides\n else{\n setUrlHash(anchorLink);\n }\n }\n\n setBodyClass();\n }\n\n /**\n * Sets the URL hash.\n */\n function setUrlHash(url){\n if(options.recordHistory){\n location.hash = url;\n }else{\n //Mobile Chrome doesn't work the normal way, so... lets use HTML5 for phones :)\n if(isTouchDevice || isTouch){\n history.replaceState(undefined, undefined, '#' + url);\n }else{\n var baseUrl = window.location.href.split('#')[0];\n window.location.replace( baseUrl + '#' + url );\n }\n }\n }\n\n /**\n * Gets the anchor for the given slide. Its index will be used if there's none.\n */\n function getSlideAnchor(slide){\n var slideAnchor = slide.data('anchor');\n var slideIndex = slide.index();\n\n //Slide without anchor link? We take the index instead.\n if(typeof slideAnchor === 'undefined'){\n slideAnchor = slideIndex;\n }\n\n return slideAnchor;\n }\n\n /**\n * Sets a class for the body of the page depending on the active section / slide\n */\n function setBodyClass(){\n var section = $(SECTION_ACTIVE_SEL);\n var slide = section.find(SLIDE_ACTIVE_SEL);\n\n var sectionAnchor = section.data('anchor');\n var slideAnchor = getSlideAnchor(slide);\n\n var sectionIndex = section.index(SECTION_SEL);\n\n var text = String(sectionIndex);\n\n if(options.anchors.length){\n text = sectionAnchor;\n }\n\n if(slide.length){\n text = text + '-' + slideAnchor;\n }\n\n //changing slash for dash to make it a valid CSS style\n text = text.replace('/', '-').replace('#','');\n\n //removing previous anchor classes\n var classRe = new RegExp('\\\\b\\\\s?' + VIEWING_PREFIX + '-[^\\\\s]+\\\\b', \"g\");\n $body[0].className = $body[0].className.replace(classRe, '');\n\n //adding the current anchor\n $body.addClass(VIEWING_PREFIX + '-' + text);\n }\n\n /**\n * Checks for translate3d support\n * @return boolean\n * http://stackoverflow.com/questions/5661671/detecting-transform-translate3d-support\n */\n function support3d() {\n var el = document.createElement('p'),\n has3d,\n transforms = {\n 'webkitTransform':'-webkit-transform',\n 'OTransform':'-o-transform',\n 'msTransform':'-ms-transform',\n 'MozTransform':'-moz-transform',\n 'transform':'transform'\n };\n\n // Add it to the body to get the computed style.\n document.body.insertBefore(el, null);\n\n for (var t in transforms) {\n if (el.style[t] !== undefined) {\n el.style[t] = 'translate3d(1px,1px,1px)';\n has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]);\n }\n }\n\n document.body.removeChild(el);\n\n return (has3d !== undefined && has3d.length > 0 && has3d !== 'none');\n }\n\n /**\n * Removes the auto scrolling action fired by the mouse wheel and trackpad.\n * After this function is called, the mousewheel and trackpad movements won't scroll through sections.\n */\n function removeMouseWheelHandler(){\n if (document.addEventListener) {\n document.removeEventListener('mousewheel', MouseWheelHandler, false); //IE9, Chrome, Safari, Oper\n document.removeEventListener('wheel', MouseWheelHandler, false); //Firefox\n } else {\n document.detachEvent('onmousewheel', MouseWheelHandler); //IE 6/7/8\n }\n }\n\n /**\n * Adds the auto scrolling action for the mouse wheel and trackpad.\n * After this function is called, the mousewheel and trackpad movements will scroll through sections\n */\n function addMouseWheelHandler(){\n if (document.addEventListener) {\n document.addEventListener('mousewheel', MouseWheelHandler, false); //IE9, Chrome, Safari, Oper\n document.addEventListener('wheel', MouseWheelHandler, false); //Firefox\n } else {\n document.attachEvent('onmousewheel', MouseWheelHandler); //IE 6/7/8\n }\n }\n\n /**\n * Adds the possibility to auto scroll through sections on touch devices.\n */\n function addTouchHandler(){\n if(isTouchDevice || isTouch){\n //Microsoft pointers\n var MSPointer = getMSPointer();\n\n $(WRAPPER_SEL).off('touchstart ' + MSPointer.down).on('touchstart ' + MSPointer.down, touchStartHandler);\n $(WRAPPER_SEL).off('touchmove ' + MSPointer.move).on('touchmove ' + MSPointer.move, touchMoveHandler);\n }\n }\n\n /**\n * Removes the auto scrolling for touch devices.\n */\n function removeTouchHandler(){\n if(isTouchDevice || isTouch){\n //Microsoft pointers\n var MSPointer = getMSPointer();\n\n $(WRAPPER_SEL).off('touchstart ' + MSPointer.down);\n $(WRAPPER_SEL).off('touchmove ' + MSPointer.move);\n }\n }\n\n /*\n * Returns and object with Microsoft pointers (for IE<11 and for IE >= 11)\n * http://msdn.microsoft.com/en-us/library/ie/dn304886(v=vs.85).aspx\n */\n function getMSPointer(){\n var pointer;\n\n //IE >= 11 & rest of browsers\n if(window.PointerEvent){\n pointer = { down: 'pointerdown', move: 'pointermove'};\n }\n\n //IE < 11\n else{\n pointer = { down: 'MSPointerDown', move: 'MSPointerMove'};\n }\n\n return pointer;\n }\n\n /**\n * Gets the pageX and pageY properties depending on the browser.\n * https://github.com/alvarotrigo/fullPage.js/issues/194#issuecomment-34069854\n */\n function getEventsPage(e){\n var events = [];\n\n events.y = (typeof e.pageY !== 'undefined' && (e.pageY || e.pageX) ? e.pageY : e.touches[0].pageY);\n events.x = (typeof e.pageX !== 'undefined' && (e.pageY || e.pageX) ? e.pageX : e.touches[0].pageX);\n\n //in touch devices with scrollBar:true, e.pageY is detected, but we have to deal with touch events. #1008\n if(isTouch && isReallyTouch(e)){\n events.y = e.touches[0].pageY;\n events.x = e.touches[0].pageX;\n }\n\n return events;\n }\n\n /**\n * Slides silently (with no animation) the active slider to the given slide.\n */\n function silentLandscapeScroll(activeSlide, noCallbacks){\n FP.setScrollingSpeed (0, 'internal');\n\n if(typeof noCallbacks !== 'undefined'){\n //preventing firing callbacks afterSlideLoad etc.\n isResizing = true;\n }\n\n landscapeScroll(activeSlide.closest(SLIDES_WRAPPER_SEL), activeSlide);\n\n if(typeof noCallbacks !== 'undefined'){\n isResizing = false;\n }\n\n FP.setScrollingSpeed(originals.scrollingSpeed, 'internal');\n }\n\n /**\n * Scrolls silently (with no animation) the page to the given Y position.\n */\n function silentScroll(top){\n if(options.scrollBar){\n container.scrollTop(top);\n }\n else if (options.css3) {\n var translate3d = 'translate3d(0px, -' + top + 'px, 0px)';\n transformContainer(translate3d, false);\n }\n else {\n container.css('top', -top);\n }\n }\n\n /**\n * Returns the cross-browser transform string.\n */\n function getTransforms(translate3d){\n return {\n '-webkit-transform': translate3d,\n '-moz-transform': translate3d,\n '-ms-transform':translate3d,\n 'transform': translate3d\n };\n }\n\n /**\n * Allowing or disallowing the mouse/swipe scroll in a given direction. (not for keyboard)\n */\n function setIsScrollable(value, direction){\n switch (direction){\n case 'up': isScrollAllowed.up = value; break;\n case 'down': isScrollAllowed.down = value; break;\n case 'left': isScrollAllowed.left = value; break;\n case 'right': isScrollAllowed.right = value; break;\n case 'all': FP.setAllowScrolling(value);\n }\n }\n\n /*\n * Destroys fullpage.js plugin events and optinally its html markup and styles\n */\n FP.destroy = function(all){\n FP.setAutoScrolling(false, 'internal');\n FP.setAllowScrolling(false);\n FP.setKeyboardScrolling(false);\n container.addClass(DESTROYED);\n\n $window\n .off('scroll', scrollHandler)\n .off('hashchange', hashChangeHandler)\n .off('resize', resizeHandler);\n\n $document\n .off('click', SECTION_NAV_SEL + ' a')\n .off('mouseenter', SECTION_NAV_SEL + ' li')\n .off('mouseleave', SECTION_NAV_SEL + ' li')\n .off('click', SLIDES_NAV_LINK_SEL)\n .off('mouseover', options.normalScrollElements)\n .off('mouseout', options.normalScrollElements);\n\n $(SECTION_SEL)\n .off('click', SLIDES_ARROW_SEL);\n\n //lets make a mess!\n if(all){\n destroyStructure();\n }\n };\n\n /*\n * Removes inline styles added by fullpage.js\n */\n function destroyStructure(){\n //reseting the `top` or `translate` properties to 0\n silentScroll(0);\n\n $(SECTION_NAV_SEL + ', ' + SLIDES_NAV_SEL + ', ' + SLIDES_ARROW_SEL).remove();\n\n //removing inline styles\n $(SECTION_SEL).css( {\n 'height': '',\n 'background-color' : '',\n 'padding': ''\n });\n\n $(SLIDE_SEL).css( {\n 'width': ''\n });\n\n container.css({\n 'height': '',\n 'position': '',\n '-ms-touch-action': '',\n 'touch-action': ''\n });\n\n //removing added classes\n $(SECTION_SEL + ', ' + SLIDE_SEL).each(function(){\n removeSlimScroll($(this));\n $(this).removeClass(TABLE + ' ' + ACTIVE);\n });\n\n removeAnimation(container);\n\n //Unwrapping content\n container.find(TABLE_CELL_SEL + ', ' + SLIDES_CONTAINER_SEL + ', ' + SLIDES_WRAPPER_SEL).each(function(){\n //unwrap not being use in case there's no child element inside and its just text\n $(this).replaceWith(this.childNodes);\n });\n\n //scrolling the page to the top with no animation\n $htmlBody.scrollTop(0);\n }\n\n /*\n * Sets the state for a variable with multiple states (original, and temporal)\n * Some variables such as `autoScrolling` or `recordHistory` might change automatically its state when using `responsive` or `autoScrolling:false`.\n * This function is used to keep track of both states, the original and the temporal one.\n * If type is not 'internal', then we assume the user is globally changing the variable.\n */\n function setVariableState(variable, value, type){\n options[variable] = value;\n if(type !== 'internal'){\n originals[variable] = value;\n }\n }\n\n /**\n * Displays warnings\n */\n function displayWarnings(){\n // Disable mutually exclusive settings\n if (options.continuousVertical &&\n (options.loopTop || options.loopBottom)) {\n options.continuousVertical = false;\n showError('warn', 'Option `loopTop/loopBottom` is mutually exclusive with `continuousVertical`; `continuousVertical` disabled');\n }\n if(options.continuousVertical && options.scrollBar){\n options.continuousVertical = false;\n showError('warn', 'Option `scrollBar` is mutually exclusive with `continuousVertical`; `continuousVertical` disabled');\n }\n\n //anchors can not have the same value as any element ID or NAME\n $.each(options.anchors, function(index, name){\n if($('#' + name).length || $('[name=\"'+name+'\"]').length ){\n showError('error', 'data-anchor tags can not have the same value as any `id` element on the site (or `name` element for IE).');\n }\n });\n }\n\n /**\n * Shows a message in the console of the given type.\n */\n function showError(type, text){\n console && console[type] && console[type]('fullPage: ' + text);\n }\n };\n});\n"],"names":["global","factory","define","amd","$","document","Math","exports","module","require","jQuery","window","this","undefined","WRAPPER","WRAPPER_SEL","SCROLLABLE","SCROLLABLE_SEL","SLIMSCROLL_BAR_SEL","SLIMSCROLL_RAIL_SEL","RESPONSIVE","NO_TRANSITION","DESTROYED","ENABLED","VIEWING_PREFIX","ACTIVE","ACTIVE_SEL","SECTION_DEFAULT_SEL","SECTION","SECTION_SEL","SECTION_ACTIVE_SEL","SECTION_FIRST_SEL","SECTION_LAST_SEL","TABLE_CELL","TABLE_CELL_SEL","SECTION_NAV","SECTION_NAV_SEL","SECTION_NAV_TOOLTIP","SHOW_ACTIVE_TOOLTIP","SLIDE_DEFAULT_SEL","SLIDE","SLIDE_SEL","SLIDE_ACTIVE_SEL","SLIDES_WRAPPER","SLIDES_WRAPPER_SEL","SLIDES_CONTAINER","SLIDES_CONTAINER_SEL","TABLE","SLIDES_NAV","SLIDES_NAV_SEL","SLIDES_NAV_LINK_SEL","SLIDES_ARROW","SLIDES_ARROW_SEL","SLIDES_PREV","SLIDES_PREV_SEL","SLIDES_ARROW_PREV","SLIDES_ARROW_PREV_SEL","SLIDES_NEXT","SLIDES_NEXT_SEL","SLIDES_ARROW_NEXT","SLIDES_ARROW_NEXT_SEL","$window","$document","containerInView","fn","fullpage","options","createSlideArrows","section","find","after","controlArrowColor","css","loopHorizontal","hide","addVerticalNavigation","$body","append","nav","addClass","showActiveTooltip","navigationPosition","i","length","link","anchors","li","navigationText","Array","isArray","tooltip","navigationTooltips","createSlimScrollingHandler","each","slides","createSlimScrolling","afterRenderActions","mouseover","isFunction","afterLoad","call","data","index","afterRender","scrollHandler","currentSection","autoScrolling","scrollBar","currentScroll","scrollTop","visibleSectionIndex","initial","abs","querySelectorAll","offsetTop","sections","current","eq","hasClass","isScrolling","leavingSection","leavingSectionIndex","yMovement","getYmovement","anchorLink","sectionIndex","activeSlide","slideAnchorLink","slideIndex","canScroll","siblings","removeClass","onLeave","activateMenuAndNav","lastScrolledDestiny","setState","clearTimeout","scrollId","setTimeout","fitToSection","scrollId2","is","isResizing","scrollPage","isScrollable","activeSection","scrolling","type","scrollable","isScrollAllowed","check","scrollSection","FP","moveSectionDown","moveSectionUp","isScrolled","touchMoveHandler","event","e","originalEvent","checkParentForNormalScrollElement","target","isReallyTouch","preventDefault","slideMoving","touchEvents","getEventsPage","touchEndY","y","touchEndX","x","touchStartX","touchStartY","width","touchSensitivity","right","moveSlideRight","left","moveSlideLeft","height","el","hop","parent","normalScrollElementTouchThreshold","normalScrollElements","pointerType","touchStartHandler","$htmlBody","stop","getAverage","elements","number","sum","lastElements","slice","max","ceil","MouseWheelHandler","curTime","Date","getTime","controlPressed","value","wheelDelta","deltaY","detail","delta","min","scrollings","shift","push","returnValue","timeDiff","prevTime","averageEnd","averageMiddle","isAccelerating","moveSlide","direction","currentSlide","destiny","prev","next","landscapeScroll","keepSlidesPosition","silentLandscapeScroll","element","callback","isMovementUp","dest","position","v","dtop","top","localIsResizing","continuousVertical","createInfiniteSections","autoHeight","innerHeight","container","offset","children","last","performMovement","css3","translate3d","transformContainer","scrollingSpeed","afterSectionLoads","scrollSettings","getScrollSettings","animate","easing","promise","done","scroll","before","nextAll","prevAll","get","reverse","silentScroll","wrapAroundElements","continuousVerticalFixSectionOrder","scrollToAnchor","location","hash","replace","split","slide","scrollPageAndSlide","hashChangeHandler","isFirstSlideMove","isFirstScrollMove","lastScrolledSlide","keydownHandler","keydownId","ctrlKey","activeElement","keyboardScrolling","keyCode","which","keyControls","inArray","onkeydown","shiftPressed","shiftKey","moveTo","mouseMoveHandler","pageY","oldPageY","destinyPos","closest","slidesNav","slideAnchor","getSlideAnchor","onSlideLeave","prevSlide","prevSlideIndex","xMovement","getXmovement","controlArrows","toggle","afterSlideLoads","afterSlideLoad","round","addAnimation","getTransforms","scrollLeft","resizeHandler","responsive","isTouchDevice","currentHeight","previousHeight","reBuild","resizeId","isResponsive","setAutoScrolling","setFitToSection","originals","show","transition","easingcss3","-webkit-transition","removeAnimation","resizeMe","displayHeight","displayWidth","preferredHeight","preferredWidth","heightPercentage","widthPercentage","percentage","newFontSize","toFixed","activateNavDots","name","navigation","activateMenuElement","menu","anchor","scrollHeight","fromIndex","toIndex","contentHeight","verticalCentered","windowsHeight","parseInt","wrapInner","slimScroll","allowPageScroll","size","alwaysVisible","removeSlimScroll","first","unwrap","remove","addTableClass","getTableHeight","sectionHeight","paddingTop","paddingBottom","paddings","animated","getSectionByAnchor","sectionAnchor","getSlideByAnchor","scrollSlider","addSlidesNavigation","numSlides","slidesNavPosition","sectionHash","setUrlHash","setBodyClass","url","recordHistory","isTouch","history","replaceState","baseUrl","href","text","String","classRe","RegExp","className","support3d","has3d","createElement","transforms","webkitTransform","OTransform","msTransform","MozTransform","transform","body","insertBefore","t","style","getComputedStyle","getPropertyValue","removeChild","removeMouseWheelHandler","addEventListener","removeEventListener","detachEvent","addMouseWheelHandler","attachEvent","addTouchHandler","MSPointer","getMSPointer","off","down","on","move","removeTouchHandler","pointer","PointerEvent","events","pageX","touches","noCallbacks","setScrollingSpeed","-webkit-transform","-moz-transform","-ms-transform","setIsScrollable","up","setAllowScrolling","destroyStructure","background-color","padding","-ms-touch-action","touch-action","replaceWith","childNodes","setVariableState","variable","displayWarnings","loopTop","loopBottom","showError","console","extend","slidesNavigation","scrollOverflow","animateAnchor","resize","sectionsColor","fixedElements","sectionSelector","slideSelector","afterResize","afterReBuild","easeInOutCubic","b","c","d","easeInQuart","overflow","setRecordHistory","setMouseWheelScrolling","directions","setKeyboardScrolling","silentMoveTo","resizing","windowsWidth","slidesWrap","navigator","userAgent","match","msMaxTouchPoints","that","attr","sliderWidth","slideWidth","wrapAll","wrap","startingSlide","appendTo","readyState","keydown","keyup","mousedown","mouseup","destroy","all"],"mappings":"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"}