animate-loading-bar

Animate Loading Bar

Lightweight TypeScript loading bar like Shopify, Github, JSFiddle... that works!

[![CodeSandbox Demo](https://img.shields.io/badge/CodeSandbox-Demo-blue?style=flat&logo=codesandbox)](https://codesandbox.io/p/sandbox/h5945y) [![bundle size](https://deno.bundlejs.com/badge?q=animate-loading@latest)](https://deno.bundlejs.com/badge?q=animate-loading@latest) [![npm version](https://img.shields.io/npm/v/animate-loading.svg?style=flat)](https://www.npmjs.com/package/animate-loading) [![npm downloads](https://img.shields.io/npm/dm/animate-loading.svg?style=flat)](https://www.npmjs.com/package/animate-loading)

✨ Features

Installation

  1. Via npm
      npm install animate-loading
    

    Or yarn

      yarn add animate-loading
    
  2. Import to your project
      import 'animate-loading/dist/main.css'
      import AnimateLoading from 'animate-loading'
    

TypeScript:

  import AnimateLoading, { AnimateLoadingOptions } from 'animate-loading'
  import 'animate-loading/dist/main.css'
  1. Usage ```js // Create an instance in your project const loading = new AnimateLoading()

// Start loading loading.start()

// Execute your async stuff await fetch(‘YOUR_API’)

// Finish loading loading.finish()


  **TypeScript with full type safety:**
  ```ts
  import AnimateLoading, { AnimateLoadingOptions } from 'animate-loading'
  
  const options: AnimateLoadingOptions = {
    thickness: '4px',
    color: '#3498db',
    startDuration: 1200,
    finishDuration: 400
  }
  
  const loading = new AnimateLoading(document.body, options)
  
  loading.start()
  await fetch('YOUR_API')
  loading.finish(() => console.log('Done!'))

Available options

const loading = new AnimateLoading(target, options)

Methods

  1. Start loading
      loading.start()
    

    Run this before starting your async stuff

  2. Finish loading
      loading.finish(callback = () => {})
    

    Run this after your async stuff gets done.

Optional callback can be pass to run after finishing the loading process.

  1. Check loading state
      if (loading.loading) {
     console.log('Loading in progress...')
      }
    
  2. Destroy instance
      loading.destroy()
    

    Call this when you no longer need the instance. Cleans up all timeouts and DOM classes.

Advanced Usage

const loading = new AnimateLoading(document.body, {
  thickness: '4px',
  color: '#3498db',
  overlayColor: '#000000',
  overlayOpacity: 0.8,
  startDuration: 1500,
  finishDuration: 500
})

// Safe usage with state checking
if (!loading.loading) {
  loading.start()
  
  try {
    await someAsyncOperation()
    loading.finish(() => console.log('Success!'))
  } catch (error) {
    loading.finish(() => console.error('Failed!'))
  }
}

// Clean up when done
loading.destroy()

Credit

Copyright (c) 2022-present by Leo Huynh @ https://leohuynh.dev