%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/graphicd/www/textmarketing/wp-content/themes/oceanwp/assets/src/js/theme/components/
Upload File :
Create Path :
Current File : /home/graphicd/www/textmarketing/wp-content/themes/oceanwp/assets/src/js/theme/components/menu.js

import { fadeIn, fadeOut } from "../../lib/utils";
import FullScreenMenu from "./menu/full-screen";
import MegaMenu from "./menu/mega";

class Menu {
    #currentElem;

    constructor() {
        this.#start();
        this.#setupEventListeners();
    }

    #start = () => {
        this.fullScreen = new FullScreenMenu();
        this.mega = new MegaMenu();
    };

    #setupEventListeners = () => {
        document
            .querySelectorAll("li.nav-no-click > a")
            .forEach(noClickMenuItem => {
                noClickMenuItem.addEventListener(
                    "click",
                    this.#onNoClickMenuItemClick
                );
            });

        document.querySelectorAll("ul.sf-menu").forEach(menu => {
            const parentMenuItems = menu.querySelectorAll(
                ".menu-item-has-children"
            );
            parentMenuItems.forEach(parentMenuItem => {
                parentMenuItem.addEventListener(
                    "mouseover",
                    this.#onParentMenuItemMouseover
                );
                parentMenuItem.addEventListener(
                    "mouseout",
                    this.#onParentMenuItemMouseout
                );
            });
        });
    };

    #onNoClickMenuItemClick = event => {
        event.preventDefault();
        event.stopPropagation();
    };

    #onParentMenuItemMouseover = event => {
        if (
            this.#currentElem &&
            this.#currentElem.contains(event.relatedTarget)
        ) {
            return;
        }

        this.#currentElem = event.currentTarget;
        this.#onEnter(this.#currentElem);
    };

    #onParentMenuItemMouseout = event => {
        if (
            !this.#currentElem ||
            this.#currentElem.contains(event.relatedTarget)
        ) {
            return;
        }

        // we left the <a>. really.
        this.#onLeave(this.#currentElem);
        this.#currentElem = null;
    };

    #onEnter = parentMenuItem => {
        const subMenu = parentMenuItem.querySelector("ul.sub-menu");

        parentMenuItem.classList.add("sfHover");

        fadeIn(subMenu, {
            callback: () => {},
        });
    };

    #onLeave = parentMenuItem => {
        const subMenu = parentMenuItem.querySelector("ul.sub-menu");

        parentMenuItem.classList.remove("sfHover");
        subMenu.style.pointerEvents = "none";

        fadeOut(subMenu, {
            callback: () => {
                subMenu.style.pointerEvents = null;
                parentMenuItem.classList.contains("sfHover") &&
                    this.#onEnter(parentMenuItem);
            },
        });
    };
}

export default Menu;

Zerion Mini Shell 1.0