All Projects → thisissoon → angular-image-loader

thisissoon / angular-image-loader

Licence: MIT license
A simple progressive, responsive, lazy image and video loading library for Angular that detects browser size and loads the appropriate image or video only when the element is in viewport. This package requires @thisissoon/angular-inviewport

Programming Languages

typescript
32286 projects
HTML
75241 projects
javascript
184084 projects - #8 most used programming language
CSS
56736 projects

Projects that are alternatives of or similar to angular-image-loader

angular-scrollspy
A simple lightweight library for Angular which automatically updates links to indicate the currently active section in the viewport
Stars: ✭ 34 (+61.9%)
Mutual labels:  ngx, ngx-library
just-responsive-images
WordPress Plugin to support better responsive images with <picture> tag, backgrounds, retina support etc.
Stars: ✭ 47 (+123.81%)
Mutual labels:  responsive, responsive-images
Vanilla Lazyload
LazyLoad is a lightweight, flexible script that speeds up your website by deferring the loading of your below-the-fold images, backgrounds, videos, iframes and scripts to when they will enter the viewport. Written in plain "vanilla" JavaScript, it leverages IntersectionObserver, supports responsive images and enables native lazy loading.
Stars: ✭ 6,596 (+31309.52%)
Mutual labels:  lazy-loading, responsive-images
ember-responsive-image
Automatically generate resized images at build-time, optimized for the responsive web, and using components to render them easily as <picture> elements.
Stars: ✭ 103 (+390.48%)
Mutual labels:  responsive, responsive-images
Image Map Resizer
Responsive HTML Image Maps
Stars: ✭ 661 (+3047.62%)
Mutual labels:  responsive, responsive-images
angular-ellipsis
A simple lightweight library for Angular which removes excess text and add ellipsis symbol to end of text before text overflows container
Stars: ✭ 16 (-23.81%)
Mutual labels:  ngx, ngx-library
Sitegeist.Kaleidoscope
Responsive Images for Neos CMS
Stars: ✭ 27 (+28.57%)
Mutual labels:  responsive, responsive-images
angular-masonry
A simple lightweight library to use Masonry layout in Angular
Stars: ✭ 11 (-47.62%)
Mutual labels:  ngx, ngx-library
Gulp Responsive
gulp-responsive generates images at different sizes
Stars: ✭ 509 (+2323.81%)
Mutual labels:  responsive, responsive-images
Ngx Responsive
Superset of RESPONSIVE DIRECTIVES to show or hide items according to the size of the device screen and another features in Angular 9
Stars: ✭ 300 (+1328.57%)
Mutual labels:  responsive, ngx
react-gallery-carousel
Mobile-friendly gallery carousel 🎠 with server side rendering, lazy loading, fullscreen, thumbnails, touch, mouse emulation, RTL, keyboard navigation and customisations.
Stars: ✭ 178 (+747.62%)
Mutual labels:  responsive, lazy-loading
angular-inviewport
A simple lightweight library for Angular with no other dependencies that detects when an element is within the browser viewport and adds a "sn-viewport-in" or "sn-viewport-out" class to the element
Stars: ✭ 72 (+242.86%)
Mutual labels:  ngx, ngx-library
Angular2 Carousel
An lightweight , touchable and responsive library to create a carousel for angular 2 / 4 / 5
Stars: ✭ 26 (+23.81%)
Mutual labels:  responsive, ngx
guide-to-async-components
📖 Guide To JavaScript Async Components
Stars: ✭ 79 (+276.19%)
Mutual labels:  lazy-loading, responsive-images
Fluid
Modern, Stylish, Easier and Powerful Css framework for faster and hassle free web development
Stars: ✭ 24 (+14.29%)
Mutual labels:  responsive
pixel
A lightweight image loader for Android backed by Kotlin Coroutines.
Stars: ✭ 79 (+276.19%)
Mutual labels:  image-loader
ngx-echarts
Apache ECharts component for Angular(基于 Angular 的 Apache ECharts 组件)
Stars: ✭ 82 (+290.48%)
Mutual labels:  ngx
flutter responsive tabs
Flutter Responsive Tabs Demo
Stars: ✭ 43 (+104.76%)
Mutual labels:  responsive
lazy-load-images.js
Progressive & lazy loading images.
Stars: ✭ 17 (-19.05%)
Mutual labels:  lazy-loading
Simple-UI-Semantic-UI-Admin
Free Semantic UI (Fomantic-UI) Admin Template
Stars: ✭ 50 (+138.1%)
Mutual labels:  responsive

Angular Image Loader

Build Status Coverage Status Commitizen friendly code style: prettier

A simple progressive/responsive/lazy loading image library for Angular that detects browser size and loads the appropriate image only when the element is in view. Classes are attributed and events emited on image loads. This package requires @thisissoon/angular-inviewport.

example

This is a simple library for Angular, implemented in the Angular Package Format v5.0.

Install

via NPM

npm i @thisissoon/{angular-image-loader,angular-inviewport} --save

via Yarn

yarn add @thisissoon/angular-image-loader @thisissoon/angular-inviewport

app.module.ts

import {
  ImageLoaderModule,
  VideoLoaderModule,
} from '@thisissoon/angular-image-loader';
import { InViewportModule } from '@thisissoon/angular-inviewport';

@NgModule({
  imports: [
    InViewportModule,
    ImageLoaderModule, // Only this import required if using just the image loader
    VideoLoaderModule, // Only this import required if using just the video loader
  ],
})
export class AppModule {}

app.server.module.ts (Only needed if using Angular Universal)

import { ImageLoaderModule } from '@thisissoon/angular-image-loader';
import { InViewportModule, WindowRef } from '@thisissoon/angular-inviewport';

@NgModule({
  imports: [InViewportModule.forServer(), ImageLoaderModule, VideoLoaderModule],
})
export class AppModule {}

Image Loader Example

A working example can be found inside /src folder.

app.component.html

<sn-image-loader
  [image]="image"
  [sizes]="sizes"
  imgClass="img"
  alt="lorem ipsum"
  (placeholderLoaded)="onPlaceholderLoad($event)"
  (imageLoaded)="onImageLoad($event)"
>
</sn-image-loader>

app.component.ts

export class AppComponent {
  sizes: Breakpoint[] = [
    { size: 'xs', width: 0 },
    { size: 'md', width: 768 },
    { size: 'lg', width: 992 },
  ];

  image: ResponsiveImage = {
    placeholder: 'http://via.placeholder.com/35x15?text=placeholder',
    fallback: 'http://via.placeholder.com/350x150?text=fallback',
    images: [
      {
        size: 'xs',
        x1: 'http://via.placeholder.com/150x350?text=xs+1x',
        x2: 'http://via.placeholder.com/300x700?text=xs+2x',
      },
      {
        size: 'md',
        x1: 'http://via.placeholder.com/350x250?text=md+1x',
        x2: 'http://via.placeholder.com/700x500?text=md+2x',
      },
      {
        size: 'lg',
        x1: 'http://via.placeholder.com/700x400?text=lg+1x',
        x2: 'http://via.placeholder.com/1400x800?text=lg+2x',
      },
    ],
  };

  public onPlaceholderLoad(imageLoadedEvent: ImageLoadedEvent) {
    // Do something
  }

  public onImageLoad(imageLoadedEvent: ImageLoadedEvent) {
    // Do something
  }
}

app.component.css

.foo {
  transition: all 0.35s ease-in-out;
}

.sn-image-not-loaded ::ng-deep .img {
  filter: blur(20px);
}

.sn-image-loaded ::ng-deep .img {
  filter: blur(0);
}

Video Loader Example

app.component.html

<sn-video-loader
  [sizes]="sizes"
  [video]="video"
  [loop]="true"
  [muted]="true"
  [autoplay]="true"
  [controls]="true"
  [playsInline]="true"
  type="video/mp4"
  videoClass="video"
  posterClass="img"
>
</sn-video-loader>

app.component.ts

export class AppComponent {
  sizes: Breakpoint[] = [
    { size: 'xs', width: 0 },
    { size: 'md', width: 768 },
    { size: 'lg', width: 992 },
  ];

  video: ResponsiveVideo = {
    videos: [
      {
        size: 'xs',
        url:
          'http://res.cloudinary.com/thisissoon/video/upload/ac_none,c_fill,h_568,q_80,w_320/v1517616795/demos/jellyfish-25-mbps-hd-hevc.mp4',
      },
      {
        size: 'md',
        url:
          'http://res.cloudinary.com/thisissoon/video/upload/ac_none,c_fill,h_1024,q_80,w_768/v1517616795/demos/jellyfish-25-mbps-hd-hevc.mp4',
      },
      {
        size: 'lg',
        url:
          'http://res.cloudinary.com/thisissoon/video/upload/ac_none,c_fill,h_720,q_80,w_1280/v1517616795/demos/jellyfish-25-mbps-hd-hevc.mp4',
      },
    ],
    poster: {
      // Responsive image, the same object as used for the image loader
    },
  };
}

Development server

Run ng serve for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.

Code scaffolding

Run ng generate component component-name to generate a new component. You can also use ng generate directive|pipe|service|class|guard|interface|enum|module.

Build

Run ng build to build the project. The build artifacts will be stored in the dist/ directory. Use the -prod flag for a production build.

Running unit tests

Run ng test to execute the unit tests via Karma.

Running end-to-end tests

Run ng e2e to execute the end-to-end tests via Protractor.

Making Commits

This repo uses Commitizen CLI and Conventional Changelog to create commits and generate changelogs. Instead of running git commit run git cz and follow the prompts. Changelogs will then be generated when creating new releases by running npm run release.

Making Releases

Run npm run release to create a new release. This will use Standard Version to create a new release. Standard Version will generate / update the changelog based on commits generated using Commitizen CLI, update the version number following semantic versioning rules and then commit and tag the commit for the release. Simply run git push --follow-tags origin master.

Further help

To get more help on the Angular CLI use ng help or go check out the Angular CLI README.

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].