A lightweight (1KB) progress bar with promise support
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 is4px
.className
-class
attribute for the progress bar.color
- Progress bar color. Default is#ff1a59
.container
- Element to append a progress bar. Default isdocument.body
.maxWidth
- Maximum width before completion. Default is99.8%
.position
- Position to be placed. Default istop
(There aretop
,bottom
,none
).duration
- Time to reach maxWidth. Default is60000
(ms).hideDuration
- Time to hide when completion. Default is400
(ms).zIndex
- CSS z-index property. Default is9999
.timing
- CSS animation timing function. Default iscubic-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