Mobile Navigation

Mobile navigation looks like a bar at the top of page:

Mobile Navigation Menu has several main elements:

  • Menu Toggle
  • Search Form Toggle
  • Search Form
  • Logotype
  • Menu Screen

The structural code of the mobile navigation menu looks like this:

<nav class="navigation-mobile">
        <div class="inner-wrapper">
            <!-- Logotype -->
            <div class="logotype-wrapper">
                <a href="index.html">
                    <img src="assets/img/logo/logo-dark.png"
                         alt="Logo">
                </a>
            </div>
            <div class="navigation-side">
                <div class="search-form-toggle toggle-button">
                    <i class="fa fa-search"></i>
                </div>
                <div class="menu-toggle-wrapper">
                    <div class="menu-toggle toggle-button">
                        <i class="fa fa-bars"></i>
                    </div>
                </div>
            </div>
        </div>
        <div class="search-form-wrapper">
            <div class="search-form">
                <div class="form-wrapper">
                    <form role="search">
                        <input type="search" class="search-field"
                               placeholder="Enter some keywords..."
                               title="Enter some keywords...">
                        <button type="submit" class="search-submit">
                            <i class="icofont-search"></i>
                        </button>
                    </form>
                    <div class="search-form-close">
                        <i class="far fa-times-circle"></i>
                    </div>
                </div>
            </div>
        </div>
        <!-- Menu list -->
        <div class="menu-list-wrapper" data-back-link="go back">
            <div class="menu-toggle-close">
                <i class="far fa-times-circle"></i>
            </div>
            <ul class="menu-list">
                <li class="menu-item menu-item-has-children">
                    <a>Home</a>
                </li>
            </ul>
        </div>
    </nav>

You can change all animation settings. Find the main class of the mobile navigation menu in your main.js and change any values of speed, type and easing for animation:

const NAVIGATION_TYPE_MOBILE = new NAV_TYPE_MOBILE();
_searchForm() {
                this.searchToggle.on('click', () => {
                    TweenMax.to(this.searchFormWrapper, 0.8, {
                        transform: 'translateY(0)',
                        ease: Expo.easeInOut
                    }).play();
                });
                this.searchCloseToggle.on('click', () => {
                    TweenMax.to(this.searchFormWrapper, 0.8, {
                        transform: 'translateY(-100%)',
                        ease: Expo.easeInOut
                    }).play();
                });
                $(COMMON.doc).keyup((e) => {
                    if (e.key === "Escape") {
                        TweenMax.to(this.searchFormWrapper, 0.8, {
                            transform: 'translateY(-100%)',
                            ease: Expo.easeInOut
                        }).play();
                    }
                });
            }
_subMenu() {
                this.itemsHasChildren.children('a').addClass('menu-item-has-children-link');
                this.subMenus.prepend(`<li class="menu-item-back"><a class="post"><i class="fas fa-long-arrow-alt-left"></i><span>${this.navigation.find('.menu-list-wrapper').data('back-link')}</span></a></li>`);
                this.menuList.addClass('active-list');
                let navigation = this.navigation,
                    menuItemBack = navigation.find('.menu-item-back'),
                    animItems = (items) => {
                        TweenMax.staggerTo(items, 0.4, {
                            transform: 'translateX(0)',
                            opacity: 1,
                            pointerEvents: 'auto',
                            ease: Power3.ease
                        }, 0.08);
                    },
                    hideItems = (items) => {
                        TweenMax.staggerTo(items, 0.4, {
                            transform: 'translateX(-50px)',
                            opacity: 0,
                            pointerEvents: 'none',
                            ease: Power3.ease,
                        }, 0.08);
                    },
                    animPanel = TweenMax.to(this.menuPanel, 0.8, {
                        scale: 1,
                        opacity: 1,
                        pointerEvents: 'auto',
                        ease: Expo.easeInOut,
                    }).reverse();
                this.toggle.on('click', () => {
                    $(this.toggle).addClass('active-toggle');
                    animPanel.play();
                    TweenMax.to(COMMON.body, 0, {
                        delay: 0.5,
                        onComplete: () => {
                            if (navigation.find('.active-list').hasClass('category-sub-menu')) {
                                animItems(navigation.find('.active-list').find('.post'));
                            } else {
                                animItems(navigation.find('.active-list').children().children('a'));
                            }
                        }
                    });
                });
                this.toggleClose.on('click', () => {
                    $(this.toggle).removeClass('active-toggle');
                    TweenMax.to(COMMON.body, 0, {
                        delay: 0.3,
                        onComplete: () => {
                            animPanel.reverse();
                        }
                    });
                    if (navigation.find('.active-list').hasClass('category-sub-menu')) {
                        hideItems(navigation.find('.active-list').find('.post'));
                    } else {
                        hideItems(navigation.find('.active-list').children().children('a'));
                    }
                });
                $(COMMON.doc).keyup((e) => {
                    if (e.key === "Escape") {
                        $(this.toggle).removeClass('active-toggle');
                        TweenMax.to(COMMON.body, 0, {
                            delay: 0.3,
                            onComplete: () => {
                                animPanel.reverse();
                            }
                        });
                        hideItems(navigation.find('.active-list').children().children('a'));
                    }
                });
                this.itemsHasChildren.children('a').on('click', function (e) {
                    e.preventDefault();
                    let $this = $(this);
                    hideItems(navigation.find('.active-list').children().children('a'));
                    navigation.find('.active-list').removeClass('active-list');
                    $(this).parent().children('.sub-menu').addClass('active-list');
                    TweenMax.to(COMMON.body, 0, {
                        delay: 0.3,
                        onComplete: () => {
                            if ($this.parent().hasClass('menu-item-has-children')) {
                                animItems(navigation.find('.active-list').children().children('a'));
                            } else if ($this.parent().hasClass('menu-item-object-category')) {
                                animItems(navigation.find('.active-list').find('.post'));
                            }
                        }
                    });
                });
                menuItemBack.children('a').on('click', function (e) {
                    e.preventDefault();
                    let $this = $(this);
                    if ($this.parent().parent().hasClass('category-sub-menu')) {
                        hideItems(navigation.find('.active-list').find('.post'));
                    } else {
                        hideItems(navigation.find('.active-list').children().children('a'));
                    }
                    navigation.find('.active-list').removeClass('active-list');
                    $(this).closest('.sub-menu').parent().parent().addClass('active-list');
                    TweenMax.to(COMMON.body, 0, {
                        delay: 0.5,
                        onComplete: () => {
                            animItems(navigation.find('.active-list').children().children('a'));
                        }
                    });
                });
            }