wheel-fortune
Version:
A lightweight, customizable spinning wheel component for web games and raffles
98 lines (74 loc) • 3.39 kB
Markdown
<blockquote style="border-left: 4px solid red; padding: 1em;">
⚠️ Version 4.0.0 introduces a complete rewrite:
- Replaced **GSAP** with native **Web Animations API**.
- Changed spin configuration from `stopSegment` to `targetAngle` (degrees).
- Removed `segmentCount` and blackout animation.
- Introduced idle swaying animation (`swayOptions`).
If you're relying on the GSAP-based version, you can stay on [version 3.1.0](https://www.npmjs.com/package/wheel-fortune/v/3.1.0).
</blockquote>
<div align="center">
<br>
<h1>wheel-fortune</h1>
<p><sup>A lightweight, customizable spinning wheel component for web games and raffles</sup></p>
[](https://www.npmjs.com/package/wheel-fortune)
[](https://github.com/ux-ui-pro/wheel-fortune)
[](https://www.npmjs.org/package/wheel-fortune)
<sup>2kB gzipped</sup>
<a href="https://codepen.io/ux-ui/pen/NWJZNaP">Demo</a>
</div>
<br>
➤ **Install**
```bash
$ yarn add wheel-fortune
```
<br>
➤ **Import**
```javascript
import WheelFortune from 'wheel-fortune';
```
<br>
➤ **Usage**
```javascript
const wheelFortune = new WheelFortune({
rootSelector: '.wheel-container',
wheelSelector: '.wheel',
triggerSelector: '.spin-button',
spinStates: [
{
targetAngle: 90,
callback: () => console.log('Landed on 90°!'),
},
{
targetAngle: 225,
callback: () => console.log('Landed on 225°!'),
},
],
});
wheelFortune.init();
```
<br>
➤ **Options**
| Option | Type | Default | Description |
|:------------------|:-------------:|:-------:|:------------------------------------------------------------------------------------------|
| `rootSelector` | `string` | `–` | Selector for the root container element. |
| `wheelSelector` | `string` | `–` | Selector for the rotating wheel element. |
| `triggerSelector` | `string` | `–` | Selector for the spin trigger button. |
| `spinStates` | `SpinState[]` | `[]` | Array of spin results in sequence. Each includes a `targetAngle` and optional `callback`. |
<br>
➤ **API**
| Method | Description |
|:------------|:-------------------------------------------|
| `init()` | Initializes the wheel and event listeners. |
| `destroy()` | Cleans up animations and event listeners. |
| `reset()` | Resets the wheel to initial state. |
<br>
➤ **CSS States**
The root element receives CSS class modifiers during runtime:
- `.{rootClassName}--spinning` — while the wheel is spinning.
- `.{rootClassName}--completed` — after spin is complete.
- `.{rootClassName}--first-done` — after the first spin.
- `.{rootClassName}--final-done` — after the final defined spin state.
You can use these classes to style the component based on its state.
<br><br>
➤ **License**
wheel-fortune is released under the MIT license.