Skip to Content

scrollToListeners()

Listen for events to use scrollTo() so they are not bundled with the action itself.

JavaScript February 8, 2021

Usage

This function runs automatically, so it is not called manually. Is this incorrect?

Source File

Located in /assets/js/modules/helpers.js on line 218.

No Hooks

This function does not have any filters or actions available. Request one?
JavaScript
nebula.scrollToListeners = function(){
    //An href starts with a hash ID but is not only a hash ("#content" but not "#"). Do not use *="#" to prevent conflicts with other libraries who are linking to separate pages with an anchor on the destination.
    nebula.dom.document.on('click keyup', 'a[href^="#"]:not([href="#"])', function(e){
        if ( e.type === 'click' || (e.type === 'keyup' && (e.key === ' ' || e.key === 'Enter')) ){ //Spacebar or Enter
            let avoid = '.no-scroll, .mm-menu, .carousel, .tab-content, .modal, [data-toggle], #wpadminbar, #query-monitor';
            if ( !jQuery(this).is(avoid) && !jQuery(this).parents(avoid).length ){
                if ( location.pathname.replace(/^\//, '') === this.pathname.replace(/^\//, '') && location.hostname === this.hostname ){ //Ensure the link does not have a protocol and is internal
                    let thisHash = this.hash; //Defined here because scope of "this" changes later
                    let scrollElement = jQuery.find(thisHash) || jQuery('[name=' + thisHash.slice(1) +']'); //Determine the target

                    if ( scrollElement.length ){ //If target exists
                        let pOffset = ( jQuery(this).attr('data-offset') )? parseFloat(jQuery(this).attr('data-offset')) : nebula.scroll.offset; //Determine the offset
                        let speed = nebula.scroll.speed || 500;

                        nebula.scrollTo(scrollElement, pOffset, speed, false, function(){
                            history.replaceState({}, '', thisHash); //Add the hash to the URL so it can be refreshed, copied, links, etc. ReplaceState does this without affecting the back button.
                        });

                        return false;
                    }
                }
            }
        }
    });

    //Using the nebula-scrollto class with data-scrollto attribute
    nebula.dom.document.on('click keyup', '.nebula-scrollto', function(e){
        if ( e.type === 'click' || (e.type === 'keyup' && (e.key === ' ' || e.key === 'Enter')) ){ //Spacebar or Enter
            let pOffset = ( jQuery(this).attr('data-offset') )? parseFloat(jQuery(this).attr('data-offset')) : nebula.scroll.offset;

            if ( jQuery(this).attr('data-scrollto') ){
                let scrollElement = jQuery.find(jQuery(this).attr('data-scrollto'));

                if ( scrollElement !== '' ){
                    let scrollSpeed = nebula.scroll.speed || 500;
                    nebula.scrollTo(scrollElement, pOffset, scrollSpeed);
                }
            }

            return false;
        }
    });
};

Override

To override or disable this JavaScript function, simply redeclare it with the exact same function name.

JavaScript
nebula.scrollToListeners = function(){
    //Write your own code here, leave it blank, or return false.
}