File

src/app/main-body/main-body.component.ts

Description

The main-body component

Implements

OnInit

Metadata

providers ApiService
selector app-main-body
styleUrls main-body.component.scss
templateUrl ./main-body.component.html

Index

Properties
Methods

Constructor

constructor(apiService: ApiService)
Parameters :
Name Type Optional
apiService ApiService no

Methods

Private getImages
getImages()

Call api method to get images

Returns : Subscription

Subscription

Public inViewHandler
inViewHandler(event: any)

Detect if navbar float to the top

Parameters :
Name Type Optional
event any no
Returns : void

void

ngOnInit
ngOnInit()

Lifecycle hook that is called after data-bound properties of a directive are initialized. Initialize variables, fetch images.

Returns : void

void

Public toggleAnimation
toggleAnimation(event: any, index: number)

Add animation for each carousel child item

Parameters :
Name Type Optional
event any no
index number no
Returns : void

void

Public toggleNavigation
toggleNavigation()

Show mobile navbar

Returns : void

void

Public toggleSearchInput
toggleSearchInput()

Show search input

Returns : void

void

Properties

images
images: Tech[]
Type : Tech[]
Default value : []
isMobileNavHidden
isMobileNavHidden: boolean
Type : boolean
navIsOnTop
navIsOnTop: boolean
Type : boolean
searchBounce
searchBounce: boolean
Type : boolean
import { Component, OnInit } from '@angular/core';
import {ApiService} from '../services/api.service';
import {Tech} from '../models/tech';
import {Subscription} from 'rxjs/Subscription';
import { InViewportService } from 'ng-in-viewport';

/**
 * The main-body component
 */
@Component({
  selector: 'app-main-body',
  templateUrl: './main-body.component.html',
  styleUrls: ['./main-body.component.scss'],
  providers: [ApiService]
})

/**
 * @class MainBodyComponent
 * @implements OnInit
 */
export class MainBodyComponent implements OnInit {
  images: Tech[] = [];
  searchBounce: boolean;
  isMobileNavHidden: boolean;
  navIsOnTop: boolean;

  /**
   * @constructor
   * @param {apiService} ApiService
   */
  constructor(private apiService: ApiService) { }

  /**
   * Lifecycle hook that is called after data-bound
   * properties of a directive are initialized.
   * Initialize variables, fetch images.
   * @returns void
   */
  ngOnInit(): void {
    this.getImages();
    this.searchBounce = null;
    this.isMobileNavHidden = false;
    this.navIsOnTop = true;
  }

  /**
   * Show search input
   * @returns void
   */
  public toggleSearchInput(): void {
    this.searchBounce = !this.searchBounce;
  }

  /**
   * Show mobile navbar
   * @returns void
   */
  public toggleNavigation(): void {
    this.isMobileNavHidden = !this.isMobileNavHidden;
  }

  /**
   * Add animation for each carousel child item
   * @returns void
   */
  public toggleAnimation(event: any, index: number): void {
    const h3Elem = event.target.querySelectorAll('h3');
    const h2Elem = event.target.querySelectorAll('h2');
    const pElem = event.target.querySelectorAll('p');
    if (event.value === true) {
      if (h3Elem.length > 0) {
        h3Elem[0].classList.add(this.images[index].mainText.animation);
      }
        h2Elem[0].classList.add(this.images[index].secondText.animation);
        pElem[0].classList.add(this.images[index].thirdText.animation);
        event.target.classList.add('active');
    } else {
      if (h3Elem.length > 0) {
       h3Elem[0].classList.remove(this.images[index].mainText.animation);
      }
        h2Elem[0].classList.remove(this.images[index].secondText.animation);
        pElem[0].classList.remove(this.images[index].thirdText.animation);
        event.target.classList.remove('active');
    }
  }

  /**
   * Detect if navbar float to the top
   * @returns void
   */
  public inViewHandler(event: any): void {
    this.navIsOnTop = event.value;
  }

  /**
   * Call api method to get images
   * @returns Subscription
   */
  private getImages(): Subscription {
    return this.apiService.getTechs().subscribe((tech) => {
      this.images = tech as Tech[];
    });
  }
}
<div class="main-body">
  <div class="main-body__carousel" #carouselRoot>
    <div class="main-body__navbar_wrapper">
      <div class="main-body__navbar" [ngClass]="{'fixed animated fadeIn': !navIsOnTop}">
        <div class="container d-none d-md-block">
          <nav class="navbar navbar-expand-lg navbar-light">
            <div class="col-1 navbar__right_border">
              <div class="navbar__left">
                <i class="material-icons">home</i>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
                  <span class="navbar-toggler-icon"></span>
                </button>
              </div>
            </div>
            <div class="col-10" id="navbarNav">
              <div class="collapse navbar-collapse ">
                <div class="col-10">
                  <div class="navbar__middle">
                    <ul class="navbar-nav">
                      <li class="nav-item active">
                        <a class="nav-link" href="javascript:">Home
                          <div class="navbar__middle__tab-footer"></div>
                        </a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="javascript:">Solution
                          <div class="navbar__middle__tab-footer"></div>
                        </a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="javascript:">Projects
                          <div class="navbar__middle__tab-footer"></div>
                        </a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="javascript:">Blog
                          <div class="navbar__middle__tab-footer"></div>
                        </a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="javascript:">Services
                          <div class="navbar__middle__tab-footer"></div>
                        </a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="javascript:">Shop
                          <div class="navbar__middle__tab-footer"></div>
                        </a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="javascript:">About
                          <div class="navbar__middle__tab-footer"></div>
                        </a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="javascript:">Contact
                          <div class="navbar__middle__tab-footer"></div>
                        </a>
                      </li>
                    </ul>
                  </div>
                </div>
                <div class="col-2">
                  <div class="navbar__middle_right">
                    <ul class="navbar-nav float-right">
                      <li class="nav-item active">
                        <a class="nav-link" href="javascript:">
                          <i class="material-icons">airplanemode_active</i>
                        </a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="javascript:">
                          <i class="material-icons">visibility</i>
                        </a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="javascript:">
                          <i class="material-icons">warning</i>
                        </a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="javascript:">
                          <i class="material-icons">work</i>
                        </a>
                      </li>
                    </ul>
                  </div>
                </div>
              </div>
            </div>
            <div class="col-1 navbar__left_border">
              <div class="navbar__right">
                <a href="javascript:" (click)="toggleSearchInput()">
                  <i class="material-icons">search</i>
                </a>
                <div class="navbar__right__input_wrapper animated"
                     [ngClass]="{
                        'bounceInRight':searchBounce === true,
                        'bounceOutLeft':searchBounce === false,
                        'search-hidden':searchBounce === null
                      }">
                  <input type="text" placeholder="Enter your search term"/>
                </div>
              </div>
            </div>
          </nav>
        </div>
        <div class="mobile d-xs-block d-md-none">
          <nav class="navbar navbar-expand-lg navbar-light">
            <div class="mobile__navbar__head row">
              <div class="col-2">
                <i class="material-icons">home</i>
              </div>
              <div class="col-8">
                <input type="text" placeholder="Type your search term">
              </div>
              <div class="col-2">
                <button class="navbar-toggler float-right"
                        type="button"
                        (click)="toggleNavigation()"
                        aria-label="Toggle navigation">
                <span class="navbar-toggler-icon">
                  <i class="material-icons">dehaze</i>
                </span>
                </button>
              </div>
            </div>
            <div [ngClass]="{'collapse': !isMobileNavHidden}" class="navbar-collapse" id="navbarNavAltMarkup">
              <div class="navbar-nav">
                <ul>
                  <li>
                    <div>
                      <a class="nav-link" href="javascript:">Home</a>
                    </div>
                  </li>
                  <li>
                    <div>
                      <a class="nav-link" href="javascript:">Solution</a>
                    </div>
                  </li>
                  <li>
                    <div>
                      <a class="nav-link" href="javascript:">Projects</a>
                    </div>
                  </li>
                  <li>
                    <div>
                      <a class="nav-link" href="javascript:">Blog</a>
                    </div>
                  </li>
                  <li>
                    <div>
                      <a class="nav-link" href="javascript:">Services</a>
                    </div>
                  </li>
                  <li>
                    <div>
                      <a class="nav-link" href="javascript:">Shop</a>
                    </div>
                  </li>
                  <li>
                    <div>
                      <a class="nav-link" href="javascript:">About</a>
                    </div>
                  </li>
                  <li>
                    <div>
                      <a class="nav-link" href="javascript:">Contact</a>
                    </div>
                  </li>
                </ul>
              </div>
            </div>
          </nav>
        </div>
      </div>
    </div>
    <div in-viewport (inViewportAction)="inViewHandler($event)" *ngIf="images[0]">
      <ui-carousel [infinite]="true"
                   [fade]="false"
                   [speed]="400"
                   [autoPlay]="true"
                   [dots]="false"
                   [autoPlaySpeed]='5000'
                   height="500px" width="100%">
        <ui-carousel-item *ngFor="let item of images; let i = index">
          <div class="main-body__carousel__item"
               in-viewport
               [inViewportOptions]="{ rootElement: carouselRoot, partial: false }"
               (inViewportAction)="toggleAnimation($event, i)"
               [ngStyle]="{'background-image': 'linear-gradient(to bottom, rgba(0,0,0,0.6) 0%,rgba(0,0,0,0.6) 100%), url(' + item.link + ')'}">
            <div class="container">
              <div class="main-body__carousel__item__text">
                <div class="col-8 offset-3">
                  <h3 *ngIf="item.mainText" class="animated">{{item.mainText.text}}</h3>
                  <h2 class="animated">{{item.secondText.text}}</h2>
                  <p class="animated">{{item.thirdText.text}}</p>
                </div>
              </div>
            </div>
          </div>
        </ui-carousel-item>
      </ui-carousel>
    </div>
  </div>
</div>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""