0.1.0 • Published 3 years ago

turntable-react v0.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

turntable-react

React 抽奖转盘组件,基于 HTML canvas

在线demo演示

Features

  • 即时启动,不必等待抽奖结果的接口返回再启动转盘,先转起来再说~
  • 超时控制
  • 支持主动中断
  • 支持渲染多行文本,多张图片
  • 支持自动旋转
  • 样式完全自定义
  • 缓慢结束效果

TODO

  • 支持指针旋转模式
  • 增加延时启动的模式(即等待抽奖接口结果返回再转动抽奖)

Use

npm install turntable-react or use yarn yarn add turntable-react

Example

detail example

import Turntable from 'turntable-react';

<Turntable
    size={300}
    prizes={prizes}
    onStart={fetchPrizeResult}
    onComplete={complete}
    onTimeout={timeout}
    >
    {/* 转盘指针 点击按钮 */}
    <div className="turntable-pointer">
        <img className="pointer-img" src={require('./pointer.png')} alt="" />
    </div>
</Turntable>

Run sample

  1. git clone https://github.com/f840415070/turntable-react.git
  2. cd turntable-react
  3. yarn && yarn start
  4. open broswer: http://localhost:8080/

Turntable Props

propNametypedescrequireddefault
sizenumber转盘大小,数值,像素单位true-
prizesPrize[]奖品数据true-
onStart(abort: () => void) => Promise or false点击指针时执行的函数,请求的中奖数据的接口可以写在 Promise 中并返回;返回 Promise 对象时,resolve 奖品在 prizes 里的索引,返回 false 时,转盘不会启动;在转盘转动时可使用 abort 函数主动中止转动true-
childrenReact.ReactNode转盘指针,点击按钮的自定义样式,被 Turntable 组件包裹的子代节点,如 examplefalse-
modestring'immediate', 'waiting' 两种抽奖模式,immediate 发送接口后直接转动转盘,等待有中奖数据后再结束;waiting 等待有中奖数据后再转动转盘falseimmediate
durationnumber至少要转多长时间,单位毫秒,最小值3000false3000
onComplete(prizeIndex: number) => void抽奖结束即转盘停止转动后执行的回调函数,组件传递的参数是中奖的索引false-
timeoutnumber超时时间,毫秒false10000
onTimeout() => void超时执行的回调false-
onStateChange(isDrawing: boolean) => void抽奖状态改变方法,isDrawing true 进入抽奖状态,false 抽奖状态结束false-
autoboolean如果转盘没有被启动,将匀速自动转动falsetrue
autoSpeednumber自动转动的速度,取值范围 1, 5false2
autoDelaynumber指定时间如果转盘没有被启动,将匀速自动转动,单位毫秒false5000
renderIfLoadedboolean如果有图片需要绘制,组件会等待图片加载完成后才绘制转盘(图片没有下载完,canvas drawImage 会失败)falsetrue
renderIfLoadedTimeoutnumber开启 renderIfLoaded 后,若指定时间没有加载完所有图片,将不会等待直接绘制转盘。单位毫秒false300
pointToMiddleboolean转盘指针指向第一个奖品正中心,而不是第一个与最后一个间隙falsefalse
turntableBackgroundstring转盘背景色falsetransparent

Turntable sub types

Prize

propNametypedescrequireddefault
textsPrizeText[]待绘制文本数组true-
backgroundstring奖品块的背景色true-
imagesPrizeImage[]待绘制的图片数组false-

PrizeText

propNametypedescrequireddefault
textstring文本true-
fontStylestring与css font 属性相同,注意要传入默认字体,如 '16px Arial'true-
fontColorstring字体颜色false#000000
fromCenternumber文字距中心位置距离,取值范围 0, 1true-

PrizeImage

propNametypedescrequireddefault
srcstring图片链接,可选(与 canvasImageSource 二选一),使用 src 属性,组件将 new Image() 创建 img 对象,对图片有其它需求的可以自己创建图片对象到 canvasImageSourcefalse-
canvasImageSourceCanvasImageSource自行创建 canvas 支持的图片对象 type CanvasImageSource = <HTMLOrSVGImageElement>, <HTMLVideoElement>, <HTMLCanvasElement>, <ImageBitmap>, <OffscreenCanvas>false-
widthnumber图片宽度true-
heightnumber图片高度true-
fromCenternumber图片距中心位置距离,取值范围 0, 1true-