Giter Site home page Giter Site logo

kwooshung / react-progressbar-wrapper Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 213 KB

The progress bar wrapper at the top of the website supports RTL and the internal style is fully customized. This component only provides external wrapping elements and only a small amount of basic CSS data.

License: MIT License

JavaScript 72.08% Shell 0.23% HTML 0.65% TypeScript 25.28% Less 1.76%
bar load loadbar loading nprogress progress progressbar react topbar wrapper

react-progressbar-wrapper's Introduction

@kwooshung/react-progressbar-wrapper

An intuitive and user-friendly progress bar component. It supports custom positioning and styling, adapting to a variety of content and layout needs while providing a smooth user experience and high degree of customization.

GitHub License GitHub Release Date - Published_At GitHub last commit GitHub code size in bytes GitHub top language GitHub pull requests GitHub issues Github Stars NPM Version Npm.js Downloads/Week Github CI/CD codecov Maintainability Gitee Repo

English | 中文

Why Develop It?

  • Why not use NProgress? I used to be a frequent user of it as well, but over time, I found that it didn't meet my requirements. I was looking for a way to offer users a more realistic simulation of loading experiences, rather than just a simple, uniform speed load.

  • The style isn't flexible enough. I wanted to be able to customize the style of the loading bar, such as its color, height, and position. Although NProgress supports customization, I'm not fond of its method of definition. More importantly, it doesn't allow for defining the direction and position of the scrollbar.

Why Use It?

  • Supports customization of styles and components, offering more flexibility than just passing in properties.
  • Simulates a more realistic loading experience. For example, it loads to 60% in 3 seconds, then slowly to 80% over the next 5 seconds. It stops at 80% and waits for further instructions until the done property is true, at which point the loading bar immediately reaches 100% and then gradually fades away. For more details, refer to the API section below.
  • Multiple events for easy monitoring of the progress bar at each stage.
  • Versatile positioning options: you can place it at the top, bottom, left, or right side.
  • Various loading directions, including from left to right, right to left, top to bottom, and bottom to top, suitable for rtl and horizontal web page scenarios.
  • Supports bilingual comments in both English and Chinese.
  • Low learning curve, simple and flexible to use.
  • Implemented with modern ES6 features.
  • Written in TypeScript for type safety.
  • Supports on-demand import with esm modularization, natively supporting tree-shaking, so you don't have to worry about the size after packaging.
  • This project also provides a commonjs (cjs) version.
  • Test coverage of 100%.

Installation

npm

npm install @kwooshung/react-progressbar-wrapper

yarn

yarn add @kwooshung/react-progressbar-wrapper

pnpm

pnpm add @kwooshung/react-progressbar-wrapper

Usage

Style

In some frameworks, you can directly import the styles in the global css / less / scss files as shown below:

@import url('@kwooshung/react-progressbar-wrapper/dist/index.css');

In certain frameworks, like Next.js, you may need to add a ~ symbol for it to work, as shown below:

@import url('~@kwooshung/react-progressbar-wrapper/dist/index.css');

You can also import it in a global page, such as the Layout page in Next.js, or within the corresponding component, as shown below:

import '@kwooshung/react-progressbar-wrapper/dist/index.css';

Components

在某个元素上使用 ReactProgressbarWrapper 组件,如下所示:

import { KsProgressbarWrapper } from '@kwooshung/react-progressbar-wrapper';
import '@kwooshung/react-progressbar-wrapper/dist/index.css';

const ProgressChildren = <div style={{ height: '2px', background: 'linear-gradient(112.44deg,#ff5858 2.09%,#c058ff 75.22%)', backgroundSize: '165%' }} />;

const Demo = () => {
  const [active, setActive] = useState<boolean>(false);
  const [done, setDone] = useState<boolean>(false);
  return (
    <>
      <KsProgressbarWrapper active={active} done={done}>
        {ProgressChildren}
      </KsProgressbarWrapper>
      <button onClick={() => setActive(!active)}>Toggle</button>
    </>
  );
};

export default Demo;

API

Props

Parameter Description Type Default
active Controls whether the progress bar is active. boolean false
done Indicates whether the loading is complete. boolean false
position Sets the position and direction of the progress bar. Options: 't-lr', 't-rl', 'b-lr', 'b-rl', 'l-tb', 'l-bt', 'r-tb', 'r-bt'. See Position and Direction below for more details. string 't-lr'
loadTo Sets the initial percentage to load to. number 65
durationLoadTo Sets the time (in milliseconds) to reach the loadTo percentage. number 3000
loadToSlow Sets the target percentage for slow loading. number 85
durationLoadToSlow Sets the time (in milliseconds) to reach the loadToSlow percentage. number 6000
fluctuation Sets the fluctuation range at the end of each stage. For instance, if loadTo is set to 60%, the endpoint will randomly be between 50%~70%. number 10
delayHide Sets the delay time (in milliseconds) to hide after completion. number 500
durationHide Sets the duration (in milliseconds) of the hide animation. number 300

Events

Event Description Type
onStart Triggered when the progress bar starts loading. () => void;
onLoadToStart Triggered when loadTo starts loading. () => void;
onLoadToUpdate Triggered during loadTo loading, parameter is the current loading percentage. (value:number) => void;
onLoadToDone Triggered when loadTo loading is complete. () => void;
onLoadToSlowStart Triggered when loadToSlow starts loading. () => void;
onLoadToSlowUpdate Triggered during loadToSlow loading, parameter is the current loading percentage. (value:number) => void;
onLoadToSlowDone Triggered when loadToSlow loading is complete. () => void;
onUpdate Triggered during overall loading, parameter is the current loading percentage. (value:number) => void;
onDone Triggered when the progress bar loading is complete. () => void;

Position and Direction

  • t-lr: Top from left to right
  • t-rl: Top from right to left
  • b-lr: Bottom from left to right
  • b-rl: Bottom from right to left
  • l-tb: Left side from top to bottom
  • l-bt: Left side from bottom to top
  • r-tb: Right side from top to bottom
  • r-bt: Right side from bottom to top

react-progressbar-wrapper's People

Contributors

kwooshung avatar

Watchers

 avatar

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.