All Projects → heidji → Ionic4 Hidenav

heidji / Ionic4 Hidenav

Licence: mit
Ionic 4 header animations

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to Ionic4 Hidenav

Android Advancedrecyclerview
RecyclerView extension library which provides advanced features. (ex. Google's Inbox app like swiping, Play Music app like drag and drop sorting)
Stars: ✭ 5,172 (+11143.48%)
Mutual labels:  header, expandable
Pullrefreshlayout
下拉刷新,上拉加载,真实的回弹(overscroll)效果(媲美qq),且大小只有37KB(是其他主流刷新库或回弹库的1/2,1/3,甚至是1/4),同时,自定义header和footer,可以实现任何你想的到的功能(例如:自动触发加载更多、二级刷新等)
Stars: ✭ 639 (+1289.13%)
Mutual labels:  header
Expytableview
Make your table view expandable just by implementing one method.
Stars: ✭ 348 (+656.52%)
Mutual labels:  expandable
Flexibleadapter
Fast and versatile Adapter for RecyclerView which regroups several features into one library to considerably improve the user experience :-)
Stars: ✭ 3,482 (+7469.57%)
Mutual labels:  expandable
Ynexpandablecell
✨ Awesome expandable, collapsible tableview cell for iOS written in Swift 4
Stars: ✭ 445 (+867.39%)
Mutual labels:  expandable
Sticky Parallax Header
A simple React Native library, enabling to create a fully custom header for your iOS and Android apps.
Stars: ✭ 792 (+1621.74%)
Mutual labels:  header
Node Pg Migrate
Node.js database migration management for Postgresql
Stars: ✭ 838 (+1721.74%)
Mutual labels:  expandable
Smartrefreshlayout
🔥下拉刷新、上拉加载、二级刷新、淘宝二楼、RefreshLayout、OverScroll,Android智能下拉刷新框架,支持越界回弹、越界拖动,具有极强的扩展性,集成了几十种炫酷的Header和 Footer。
Stars: ✭ 23,185 (+50302.17%)
Mutual labels:  header
Expandablecell
✨ Awesome expandable, collapsible tableview cell for iOS written in Swift 5
Stars: ✭ 559 (+1115.22%)
Mutual labels:  expandable
Machdump
A very basic C Mach-O Header Dump tool written for practicing purposes. Works With x86 and x86_64 binaries
Stars: ✭ 25 (-45.65%)
Mutual labels:  header
Expandablelayout
🦚 An expandable layout that shows a two-level layout with an indicator.
Stars: ✭ 448 (+873.91%)
Mutual labels:  expandable
Contourview
🦄 利用本库绘制出贝塞尔曲线魔炫背景。Customize view:Draw the magic dazzle background with Bézier.
Stars: ✭ 542 (+1078.26%)
Mutual labels:  header
Rskgrowingtextview
A light-weight UITextView subclass that automatically grows and shrinks.
Stars: ✭ 820 (+1682.61%)
Mutual labels:  expandable
Commentreplycomponent
基于ExpandableListView实现评论和回复的功能。
Stars: ✭ 369 (+702.17%)
Mutual labels:  expandable
Android Expandicon
Nice and simple customizable implementation of Google style up/down expand arrow.
Stars: ✭ 871 (+1793.48%)
Mutual labels:  expandable
Doublelift
🦋 Expands and collapses a layout horizontally and vertically sequentially.
Stars: ✭ 343 (+645.65%)
Mutual labels:  expandable
Header
Header Tool for Editor.js 2.0
Stars: ✭ 39 (-15.22%)
Mutual labels:  header
Grouprecyclerviewadapter
可增删改查、可动画展开收起、可吸附悬浮动态可配置的分组列表
Stars: ✭ 41 (-10.87%)
Mutual labels:  expandable
Hintspinner
An Android Spinner lilbrary with Hint/Header
Stars: ✭ 28 (-39.13%)
Mutual labels:  header
Syscrack
Virtual Online Crime Simulator (VOCS) written in PHP 7.0
Stars: ✭ 17 (-63.04%)
Mutual labels:  expandable

Hide Navigation Bar for Ionic 4

NPM version

With this module you can:

  • implement an expansible header that stretches when pulling the page down
  • auto-hide the page header when scrolling down

🔥 ..Also works with Supertabs 🔥

Check out the example

Note:

Both should not be used together on the same page, either you want to make room for reading content or you want to add an expansible header, not both together :)

This plugin is also made as generic as possible, making it maybe a bit harder to setup but giving the user much more freedom to design what he wants.

Installation

npm i ionic4-hidenav

Implementation

Create (or modify if you already have) a shared.module.ts in your project root folder:

import { NgModule } from '@angular/core';
import {HidenavModule} from 'ionic4-hidenav';

@NgModule({
    imports: [HidenavModule],
    exports: [HidenavModule]
})
export class SharedModule { }

and import the SharedModule on every page you intend to use this plugin:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';

import { IonicModule } from '@ionic/angular';

import { HomePage } from './home.page';
import {SharedModule} from '../shared.module';

const routes: Routes = [
    {
        path: '',
        component: HomePage
    }
];

@NgModule({
    imports: [
        CommonModule,
        FormsModule,
        IonicModule,
        RouterModule.forChild(routes),
        SharedModule
    ],
    declarations: [HomePage]
})
export class HomePageModule {
}

Part 1: Expansible header

This is a custom component defined using this HTML tag:

<hidenav-stretchheader></hidenav-stretchheader>

This component must be defined outside of <ion-content> and comes with required and optional child DOM elements:

Creating the expansible header element

home.page.html

#shrinkexpand: This is the element that will shrink and expand with scrolling the page #static: Element(s) with this tag will be left alone. You can use these to create buttons on your header for example.

<hidenav-stretchheader header-height="50">
    <div #shrinkexpand><!-- Expanding DOM element --></div>
    <div #static><!-- Title --></div>
    <div #static><!-- Nav button --></div>
</hidenav-stretchheader>

Inputs for <hidenav-stretchheader>:

input type Description
header-height required height to which the header shrinks to
opacity-factor optional / default = 0 1 - 10 opacity of shrunk header overlay
opacity-color optional / default = black accepts any css color description (name, rgb, # ..)
blur-factor optional / default = 0 the maximum blur when the header is collapsed (accepts integer)
init-expanded optional / default = false set to true if you want the header to initiate expanded
no-border optional / default = false set to true if you want to remove the bottom styling of the header
Tabspage params only:
preserve-header optional / default = false set to true if you want to keep the header state separate on each tab

Adding your Header to a simple page:

add the hidenav-sh-content directive to your <ion-content>

<hidenav-stretchheader header-height="50">
    <div #shrinkexpand>...</div>
</hidenav-stretchheader>
<ion-content hidenav-sh-content>
    ....
</ion-content>

Adding your Header to a Supertabs Page:

You need to give the the <ion-content> that holds the <super-tabs> element the directive hidenav-sh-tabscontent then you need to add to each <ion-content> on every tab two directives: hidenav-sh-content and hidenav-tabspage

<hidenav-stretchheader header-height="50">
  <div #shrinkexpand style="background: darkblue; color: gold" (click)="expand()" >...</div>
</hidenav-stretchheader>
<ion-content hidenav-sh-tabscontent>
  <super-tabs>
    <super-tabs-toolbar slot="top">
      <super-tab-button>...</super-tab-button>
      <super-tab-button>...</super-tab-button>
    </super-tabs-toolbar>
    <super-tabs-container>
      <super-tab>
        <ion-content hidenav-sh-content hidenav-tabspage>...</ion-content>
      </super-tab>
      <super-tab>
        <ion-content hidenav-sh-content hidenav-tabspage>...</ion-content>
      </super-tab>
    </super-tabs-container>
  </super-tabs>
</ion-content>

Events:

you can subscribe to the (scroll) event for example like:

<hidenav-stretchheader (scroll)="handleScrollEvent($event)">...</hidenav-stretchheader>

The $event variable returns the current header height.

Functions:

  • expand(duration): scrolls content to top and expands the header.
  • shrink(duration): scrolls just about enought to shrink the header if it is expanded.
  • toggle(duration): toggles between expand() and shrink().

Note that duration is optional and defaults to 200.


Part 2: Hide Header on scroll

This function is fairly simple to implement than the previous one, all you will have to do is define directives hidenav-header and hidenav-content in the page you want to use.

Adding the hidenav component to a simple page

In the following example, both header and content carry the previously mentioned directives.

<ion-header hidenav-header>...</ion-header>
<ion-content hidenav-content>...</ion-content>

Adding the hidenav component to a Supertabs page

Give the <ion-header> the hidenav-header directive and the <ion-content> that holds the <super-tabs> component the directive hidenav-tabscontent. As for the <ion-content> elements in each of the tabs give them the hidenav-content and hidenav-tabspage directive.

<ion-header hidenav-header>...</ion-header>
<ion-content hidenav-tabscontent>
  <super-tabs>
    <super-tabs-toolbar slot="top">
      <super-tab-button>...</super-tab-button>
      <super-tab-button>...</super-tab-button>
    </super-tabs-toolbar>
    <super-tabs-container>
      <super-tab>
        <ion-content hidenav-content hidenav-tabspage>...</ion-content>
      </super-tab>
      <super-tab>
        <ion-content hidenav-content hidenav-tabspage>...</ion-content>
      </super-tab>
    </super-tabs-container>
  </super-tabs>
</ion-content>

PS.: as mentioned in the beginning, you should not use both methods (Part1 and Part2) together on one page. It was never tested and is not intended to be used.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].