Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8655495
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 12, 20262026-06-12T15:02:40+00:00 2026-06-12T15:02:40+00:00

I’m developing a website based on this tutorial and would like to rename the

  • 0

I’m developing a website based on this tutorial and would like to rename the URLs from /?chapter=# to their respective navigation names, e.g. /work, /about, /services etc.

index.php:

<aside id="menu">
    <div id="scroll">
        <nav>
            <ul>
                <li><a href="#introduction">Work</a></li>
                <li><a href="#chapter1">About</a></li>
                <li><a href="#chapter2">Services</a></li>
                <li>Blog <!-- Coming Soon... --> </li>
                <li><a href="#chapter4">Contact</a></li>
            </ul>
        </nav>
    </div> <!-- #scroll -->    
</aside> <!-- #menu -->

...

...

<div class="content-scroller">
    <div class="content-wrapper">
        <article class="content" id="introduction">
            <div class="inner">  
...
...
        <article class="content" id="chapter1">
            <div class="inner">  
...
...

jquery.page.js:

(function(window, undefined) {

    var Page    = (function() {

        var $container          = $( '#container' ),
            // the scroll container that wraps the articles
            $scroller           = $container.find( 'div.content-scroller' ),
            $menu               = $container.find( 'aside' ),
            // menu links
            $links              = $menu.find( 'a' ),
            $articles           = $container.find( 'div.content-wrapper > article' ),
            // button to scroll to the top of the chapter
            // only shown when screen size < 960
            $toTop              = $container.find( 'a.totop-link' ),
            // the browser nhistory object
            History             = window.History,
            // animation options
            animation           = { speed : 800, easing : 'easeInOutExpo' },
            // jScrollPane options
            scrollOptions       = { verticalGutter : 0, hideFocus : true },
            // init function
            init                = function() {

                // initialize the jScrollPane on both the menu and articles
                _initCustomScroll();
                // initialize some events
                _initEvents();
                // sets some css properties 
                _layout();
                // jumps to the respective chapter
                // according to the url
                _goto();

            },
            _initCustomScroll   = function() {

                // Only add custom scroll to articles if screen size > 960.
                // If not the articles will be expanded
                if( $(window).width() > 960 ) {

                    $articles.jScrollPane( scrollOptions );

                }
                // add custom scroll to menu
                $menu.children( '#scroll' ).jScrollPane( scrollOptions );

            },
            _goto               = function( chapter ) {

                    // get the url from history state (e.g. chapter=3) and extract the chapter number
                var chapter     = chapter || History.getState().url.queryStringToJSON().chapter,
                    isHome      = ( chapter === undefined ),
                    // we will jump to the introduction chapter if theres no chapter
                    $article    = $( chapter ? '#' + 'chapter' + chapter : '#' + 'introduction' );

                if( $article.length ) {

                        // left / top of the element
                    var left        = $article.position().left,
                        top         = $article.position().top,
                        // check if we are scrolling down or left
                        // is_v will be true when the screen size < 960
                        is_v        = ( $(document).height() - $(window).height() > 0 ),
                        // animation parameters:
                        // if vertically scrolling then the body will animate the scrollTop,
                        // otherwise the scroller (div.content-scroller) will animate the scrollLeft
                        param       = ( is_v ) ? { scrollTop : (isHome) ? top : top + $menu.outerHeight( true ) } : { scrollLeft : left },
                        $elScroller = ( is_v ) ? $( 'html, body' ) : $scroller;

                    $elScroller.stop().animate( param, animation.speed, animation.easing, function() {

                        // active class for selected chapter
                        $articles.removeClass( 'content-active' );
                        $article.addClass( 'content-active' );

                    } );

                }

            },
            _saveState          = function( chapter ) {

                // adds a new state to the history object
                // this will trigger the statechange on the window
                if( History.getState().url.queryStringToJSON().chapter !== chapter ) {

                    History.pushState( null, null, '?chapter=' + chapter );

                }

            },
            _layout             = function() {

                // control the overflow property of the scroller (div.content-scroller)
                var windowWidth = $(window).width();
                switch( true ) {

                    case ( windowWidth <= 960 ) : $scroller.scrollLeft( 0 ).css( 'overflow', 'visible' ); break;
                    case ( windowWidth <= 1024 ): $scroller.css( 'overflow-x', 'scroll' ); break;
                    case ( windowWidth > 1024 ) : $scroller.css( 'overflow', 'hidden' ); break;

                };

            },
            _initEvents         = function() {

                _initWindowEvents();
                _initMenuEvents();
                _initArticleEvents();

            },
            _initWindowEvents   = function() {

                $(window).on({
                    // when resizing the window we need to reinitialize or destroy the jScrollPanes
                    // depending on the screen size
                    'smartresize' : function( event ) {

                        _layout();

                        $('article.content').each( function() {

                            var $article    = $(this),
                                aJSP        = $article.data( 'jsp' );

                            if( $(window).width() > 960 ) {

                                ( aJSP === undefined ) ? $article.jScrollPane( scrollOptions ) : aJSP.reinitialise();

                                _initArticleEvents();

                            }   
                            else {

                                // destroy article's custom scroll if screen size <= 960px
                                if( aJSP !== undefined )
                                    aJSP.destroy();

                                $container.off( 'click', 'article.content' );

                            }

                        });

                        var nJSP = $menu.children( '#scroll' ).data( 'jsp' );
                        nJSP.reinitialise();

                        // jumps to the current chapter
                        _goto();

                    },
                    // triggered when the history state changes - jumps to the respective chapter
                    'statechange' : function( event ) {

                        _goto();

                    }
                });

            },
            _initMenuEvents     = function() {

                // when we click a menu link we check which chapter the link refers to,
                // and we save the state on the history obj.
                // the statechange of the window is then triggered and the page/scroller scrolls to the 
                // respective chapter's position
                $links.on( 'click', function( event ) {

                    var href        = $(this).attr('href'),
                        chapter     = ( href.search(/chapter/) !== -1 ) ? href.substring(8) : 0;

                    _saveState( chapter );

                    return false;

                });

                // scrolls to the top of the page.
                // this button will only be visible for screen size < 960
                $toTop.on( 'click', function( event ) {

                    $( 'html, body' ).stop().animate( { scrollTop : 0 }, animation.speed, animation.easing );

                    return false;

                });

            },
            _initArticleEvents  = function() {

                // when we click on an article we check which chapter the article refers to,
                // and we save the state on the history obj.
                // the statechange of the window is then triggered and the page/scroller scrolls to the 
                // respective chapter's position
                $container.on( 'click', 'article.content', function( event ) {

                    var id          = $(this).attr('id'),
                        chapter     = ( id.search(/chapter/) !== -1 ) ? id.substring(7) : 0;

                    _saveState( chapter );

            //      return false;

                });

            };

        return { init : init }; 

    })();

    Page.init();

})(window);

How would I be able to do this?

Thanks

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-12T15:02:42+00:00Added an answer on June 12, 2026 at 3:02 pm

    Well, this line is what’s writing your history state:

     History.pushState(null, null, '?chapter=' + chapter);
    

    So you would need to modify that function to do what you want. If you have a small site then you could make conditionals to swap the state to whatever you want easily. If you have a large dynamic site you don’t want to do this unless you love horrible, tedious maintenance…

    _saveState = function(chapter) {
    
        // adds a new state to the history object
        // this will trigger the statechange on the window
        if (History.getState().url.queryStringToJSON().chapter !== chapter) {
            var page;
            if(chapter == 1)
                page = "/about";
            else if(chapter == 2)
                page = "/services";
            else
                page = '?chapter=' + chapter;
    
            History.pushState(null, null, page);
    
        }
    },
    

    I may have missed the point of your question though. If so I can update this answer

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm developing this website: http://parkoura.tk/a/sandbox/ I am using an ajax navigation. I have a
I am developing a .NET 3.5 Web Forms based website that uses URL Routing.
I'm currently developing a website where users can search for other users based on
I am developing a ASP.Net website (Multibranch access and Multiuser Access) based on windows
I am developing a mobile website but have encountered this problem - a font
I am developing an Codeigniter based website and I need to send emails to
I am developing a website that parses rss feeds and displays them based on
Im developing a website in PHP. The users of this site are allowed to
I'm developing a website based on WordPress source code through XAMPP. Sometimes I change
I'm developing an ajax based web site and I want to include a FB

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.