(function ($) { 'use strict'; var OnePageNavHandler = function ($scope, $) { var onepage_nav_elem = $scope.find('.pp-one-page-nav').eq(0); var $section_id = '#' + onepage_nav_elem.data('section-id'), $top_offset = onepage_nav_elem.data('top-offset'), $scroll_speed = onepage_nav_elem.data('scroll-speed'), $scroll_wheel = onepage_nav_elem.data('scroll-wheel'), $scroll_touch = onepage_nav_elem.data('scroll-touch'), $scroll_keys = onepage_nav_elem.data('scroll-keys'), $target_dot = $section_id + ' .pp-one-page-nav-item a', $active_item = $section_id + ' .pp-one-page-nav-item.active'; $( $target_dot ).on( 'click', function(e) { e.preventDefault(); e.stopPropagation(); if( 0 === $( '#'+$(this).data('row-id') ).length ) { return; } if ( $( 'html, body' ).is(':animated') ) { return; } $( 'html, body' ).animate({ scrollTop: $( '#'+$(this).data('row-id') ).offset().top - $top_offset }, $scroll_speed); $( $section_id + ' .pp-one-page-nav-item' ).removeClass( 'active' ); $(this).parent().addClass( 'active' ); return false; } ); updateDot(); $(window).on('scroll', function() { updateDot(); }); function updateDot() { $('.elementor-section').each(function(){ var $this = $(this); if ( ( $this.offset().top - $(window).height()/2 < $(window).scrollTop() ) && ( $this.offset().top >= $(window).scrollTop() || $this.offset().top + $this.height() - $(window).height()/2 > $(window).scrollTop() ) ) { $( $section_id + ' .pp-one-page-nav-item a[data-row-id="'+$this.attr('id')+'"]' ).parent().addClass('active'); } else { $( $section_id + ' .pp-one-page-nav-item a[data-row-id="'+$this.attr('id')+'"]' ).parent().removeClass('active'); } }); } if ( $scroll_wheel === 'on' ) { var lastAnimation = 0, quietPeriod = 500, animationTime = 800, startX, startY, timestamp; $(document).on('mousewheel DOMMouseScroll', function(e){ var timeNow = new Date().getTime(); if(timeNow - lastAnimation < quietPeriod + animationTime) { e.preventDefault(); return; } //wDelta = e.wheelDelta < 0 ? 'down' : 'up'; var delta = e.originalEvent.detail < 0 || e.originalEvent.wheelDelta > 0 ? 1 : -1; if ( !$('html,body').is(':animated')) { if ( delta < 0 ) { if ( $( $active_item ).next().length > 0 ) { $( $active_item ).next().find('a').trigger('click'); } } else { if ( $( $active_item ).prev().length > 0 ) { $( $active_item ).prev().find('a').trigger('click'); } } } lastAnimation = timeNow; }); if ( $scroll_touch === 'on' ) { $(document).on('pointerdown touchstart', function(e) { var touches = e.originalEvent.touches; if (touches && touches.length) { startY = touches[0].screenY; timestamp = e.originalEvent.timeStamp; } }).on('touchmove', function(e) { if ($('html,body').is(':animated')) { e.preventDefault(); } }).on('pointerup touchend', function(e) { var touches = e.originalEvent; if (touches.pointerType === 'touch' || e.type === 'touchend') { var Y = touches.screenY || touches.changedTouches[0].screenY; var deltaY = startY - Y; var time = touches.timeStamp - timestamp; // swipe up. if (deltaY < 0) { if ( $( $active_item ).prev().length > 0 ) { $( $active_item ).prev().find('a').trigger('click'); } } // swipe down. if (deltaY > 0) { if ( $( $active_item ).next().length > 0 ) { $( $active_item ).next().find('a').trigger('click'); } } if (Math.abs(deltaY) < 2) { return; } } }); } } if ( $scroll_keys === 'on' ) { $(document).keydown(function(e) { var tag = e.target.tagName.toLowerCase(); if (tag === 'input' && tag === 'textarea') { return; } switch(e.which) { case 38: // up arrow key. $( $active_item ).prev().find('a').trigger('click'); break; case 40: // down arrow key. $( $active_item ).next().find('a').trigger('click'); break; case 33: // pageup key. $( $active_item ).prev().find('a').trigger('click'); break; case 36: // pagedown key. $( $active_item ).next().find('a').trigger('click'); break; default: return; } }); } }; $(window).on('elementor/frontend/init', function () { elementorFrontend.hooks.addAction('frontend/element_ready/pp-one-page-nav.default', OnePageNavHandler); }); }(jQuery));