GithubHelp home page GithubHelp logo

skt-t1-byungi / rsup-progress Goto Github PK

View Code? Open in Web Editor NEW
308.0 5.0 11.0 201 KB

❤️ A lightweight (1KB) progress bar with promise support

Home Page: https://skt-t1-byungi.github.io/rsup-progress/

License: MIT License

TypeScript 53.06% HTML 23.94% SCSS 23.00%
progress-bar progressbar loader promise loading

rsup-progress's Introduction



A lightweight (1KB) progress bar with promise support

npm npm npm

The progress bar starts quickly but decelerates over time. Invoke the end function to finish the animation, providing a natural user experience without an exact percentage of progress.

https://skt-t1-byungi.github.io/rsup-progress/

Example

Using start and end methods.

progress.start()

fetch('/data.json').then(response => {
    progress.end()
})

Using promise method.

const response = await progress.promise(fetch('/data.json'))

Install

npm install rsup-progress
import { Progress } from 'rsup-progress'

Browser ESM

<script type="module">
    import { Progress } from 'https://unpkg.com/rsup-progress/dist/esm/index.js'
    const progress = new Progress()
</script>

API

new Progress(options?)

Create an instance.

const progress = new Progress({
    height: 5,
    color: '#33eafd',
})

options

  • height - Progress bar height. Default is 4px.
  • className - class attribute for the progress bar.
  • color - Progress bar color. Default is #ff1a59.
  • container - Element to append a progress bar. Default is document.body.
  • maxWidth - Maximum width before completion. Default is 99.8%.
  • position - Position to be placed. Default is top (There are top, bottom, none).
  • duration - Time to reach maxWidth. Default is 60000(ms).
  • hideDuration - Time to hide when completion. Default is 400(ms).
  • zIndex - CSS z-index property. Default is 9999.
  • timing - CSS animation timing function. Default is cubic-bezier(0,1,0,1).

progress.setOptions(options)

Change the options.

progress.setOptions({
    color: 'red',
    className: 'class1 class2',
})

progress.isInProgress

Check whether the progress bar is active.

console.log(progress.isInProgress) // => false

progress.start()

console.log(progress.isInProgress) // => true

progress.start()

Activate the progress bar.

progress.end(immediately = false)

Complete the progress bar. If immediately is set to true, the element is removed instantly.

progress.promise(promise, options?)

Automatically call start and end methods based on the given promise.

const response = await progress.promise(fetch('/data.json'))

options.min

Minimum time to display and maintain the progress bar. Default is 100 ms. If 0 is set and the promise is already resolved, the progress bar won't appear.

progress.promise(Promise.resolve(), { min: 0 }) // => Progress bar does not appear.

options.delay

If options.delay is set, the progress bar will start after the specified delay.

progress.promise(delay(500), { delay: 200 }) // => It starts 200ms later.

If the promise resolves before the delay, the progress bar won't appear.

progress.promise(delay(500), { delay: 600 }) // => Progress bar does not appear.

This is useful to prevent "flashing" of the progress bar for short-lived promises.

options.waitAnimation

If options.waitAnimation is set, the returned promise waits for the hide animation to complete.

await progress.promise(fetch('/data.json'), { waitAnimation: true })

alert('Complete!')

Useful for immediate actions like alert or confirm. Default is false.

License

MIT License ❤️📝 skt-t1-byungi

rsup-progress's People

Contributors

renovate-bot avatar skt-t1-byungi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

rsup-progress's Issues

Attach loading bar to custom DOM node

I really like this library! Great job.
I am trying to use this for a project but instead of the loading bar being fixed to the top, is there a way to mount the progress bar to a specific DOM node?

Doesn't work on next.js after single run

Next.js Router events should handle the progress bar well.

It works on first navigation yet fails to show on the follow ups.

In _app.js

   useEffect(() => {
        const progress = new Progress();

        Router.events.on('routeChangeStart', () => {
            console.log('routing');
            return progress.start();
        });
        Router.events.on('routeChangeComplete', () => {
            return progress.end();
        });
        Router.events.on('routeChangeError', () => {
            return progress.end();
        });
    }, []);

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.