From 108c8b883d77c568a0ad3e391ed49b9d05e7412c Mon Sep 17 00:00:00 2001 From: druid <druid@druids-MBP-2.lan> Date: Mon, 25 Jan 2021 17:38:28 +0200 Subject: [PATCH] hide menu panel when scroll up to the top --- src/components.d.ts | 1 + .../hy-desktop-menu-links/hy-desktop-menu-links.tsx | 7 +++++++ src/components/site-header/readme.md | 6 ++++++ src/components/site-header/site-header.tsx | 10 +++++++--- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/components.d.ts b/src/components.d.ts index 668ae9da..ed8f66b6 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -2039,6 +2039,7 @@ declare namespace LocalJSX { menuLabelClose?: string; menuLabelOpen?: string; menuType?: MenuType; + onHeaderScrollUp?: (event: CustomEvent<any>) => void; } interface HySiteLogo { color?: ColorVariant; diff --git a/src/components/site-header/hy-desktop-menu-links/hy-desktop-menu-links.tsx b/src/components/site-header/hy-desktop-menu-links/hy-desktop-menu-links.tsx index 3b0dcc67..35bd9d81 100644 --- a/src/components/site-header/hy-desktop-menu-links/hy-desktop-menu-links.tsx +++ b/src/components/site-header/hy-desktop-menu-links/hy-desktop-menu-links.tsx @@ -231,6 +231,13 @@ export class HyDesktopMenuLinks { this.closePanel(fadeOut); } + // CLose the desktop menu panel if user scrolls Sticky Header till the very top. + @Listen('headerScrollUp', {target: 'document'}) + headerScrollUp() { + let fadeOut = false; + this.closePanel(fadeOut); + } + handleDesktopMenuEnter(event, id) { clearTimeout(this._fadeOutTimer); diff --git a/src/components/site-header/readme.md b/src/components/site-header/readme.md index 3436d38d..b1e105e5 100644 --- a/src/components/site-header/readme.md +++ b/src/components/site-header/readme.md @@ -17,6 +17,12 @@ | `menuLabelOpen` | `menu-label-open` | | `string` | `undefined` | | `menuType` | `menu-type` | | `MenuType.desktop \| MenuType.mobile \| MenuType.sidenav \| MenuType.sidepanel \| MenuType.tablet` | `MenuType.default` | +## Events + +| Event | Description | Type | +| ---------------- | ----------- | ------------------ | +| `headerScrollUp` | | `CustomEvent<any>` | + ## Dependencies ### Depends on diff --git a/src/components/site-header/site-header.tsx b/src/components/site-header/site-header.tsx index d6dec401..3cb0d93b 100644 --- a/src/components/site-header/site-header.tsx +++ b/src/components/site-header/site-header.tsx @@ -14,7 +14,7 @@ export interface ComponentLabels { label?: string; } -import {Component, Element, h, Listen, Prop, State} from '@stencil/core'; +import {Component, Element, Event, EventEmitter, h, Listen, Prop, State} from '@stencil/core'; import ResizeObserver from 'resize-observer-polyfill'; import {MenuType, ColorVariant, SiteLogoSize} from '../../utils/utils'; @@ -41,6 +41,8 @@ export class SiteHeader { @State() isMobile: boolean; @State() isMenuOpen: boolean = false; @State() isDesktopMenuOpen: boolean = false; + + @Event() headerScrollUp: EventEmitter; private ro: ResizeObserver; private donateLink: DonateLink[]; private menuLabels: ComponentLabels[]; @@ -131,7 +133,6 @@ export class SiteHeader { // If current position > last position AND scrolled past navbar... if (st > this.lastScrollTop && st > this.navbarHeight) { // Scroll Down - hySiteHeader.classList.add('hy-site-header--sticky-active'); hySiteHeader.classList.add('hy-site-header--sticky-hidden'); hySiteHeader.classList.remove('hy-site-header--sticky-visible'); @@ -141,10 +142,13 @@ export class SiteHeader { hySiteHeader.classList.remove('hy-site-header--sticky-active'); hySiteHeader.classList.remove('hy-site-header--sticky-visible'); hySiteHeader.classList.remove('hy-site-header--sticky-hidden'); + + // Close desktop menu panel if it's open. + this.headerScrollUp.emit(); } else { hySiteHeader.classList.add('hy-site-header--sticky-active'); - hySiteHeader.classList.add('hy-site-header--sticky-visible'); hySiteHeader.classList.remove('hy-site-header--sticky-hidden'); + hySiteHeader.classList.add('hy-site-header--sticky-visible'); } } this.lastScrollTop = st; -- GitLab