lucky-turning

1.0.1 • Public • Published

lucky-turning

一个基于 Vue2.0 的幸运大转盘抽奖组件,本来市面上已经有很多类似的组件了,我自己也一直是本着有轮子就不自己造轮子的想法[狗头],但是找了好久,基本是没有满足要求的,市面上的组件基本上都是设置了固定的匀速旋转时间,目前项目上有个需求就是需求后台计算抽奖结果,后台没给出结果之前,大转盘需要一直匀速的旋转,等到后台给出抽奖结果,然后再慢慢的减速直到指定的奖品位置,该组件的大致流程也就是这样子

已知问题

该组件的核心旋转动画是基于 animejs 实现的,在性能不好的手机上会有很明显的卡顿现象,请知悉(后续会更新提供使用 canvas 实现的,在移动端的体验应该会好很多)

运行项目先

npm install

运行例子

npm run serve

构建库

npm run build

快速开始

<template>
  <div>
    <LuckyTurning
      :lottery-times="lotteryTimes"
      :prize-list="prizeList"
      :get-prize="getPrize"
      @lottery-over="lotteryOver"
    />
  </div>
</template>
<script>
import LuckyTurning from 'lucky-turning'
import Vue from 'vue'
Vue.use(LuckyTurning)
import 'lucky-turning/lib/lucky-turning.css'
export default {
  data() {
    return {
      lotteryTimes: 100,
      prizeList: [
        {
          value: 1,
          label: 'iPhone1',
          img: 'https://read-1252195440.cos.ap-guangzhou.myqcloud.com/iPhone12.jpg'
        },
        {
          value: 2,
          label: 'iPhone2',
          img: 'https://read-1252195440.cos.ap-guangzhou.myqcloud.com/iPhone12.jpg'
        },
        {
          value: 3,
          label: 'iPhone3',
          img: 'https://read-1252195440.cos.ap-guangzhou.myqcloud.com/iPhone12.jpg'
        },
        {
          value: 4,
          label: 'iPhone4',
          img: 'https://read-1252195440.cos.ap-guangzhou.myqcloud.com/iPhone12.jpg'
        },
        {
          value: 5,
          label: 'iPhone5',
          img: 'https://read-1252195440.cos.ap-guangzhou.myqcloud.com/iPhone12.jpg'
        },{
          value: 6,
          label: 'iPhone6',
          img: 'https://read-1252195440.cos.ap-guangzhou.myqcloud.com/iPhone12.jpg'
        },
      ]
    }
  },
  methods: {
    getPrize() {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(Number.parseInt(Math.random() * 5))
        }, 2000)
      })
    },
    lotteryOver(index) {
      alert(`抽中了${this.prizeList[index].label}`)
      const a = ''
    }
  }
}
</script>
<style>
html {
  font-size: 40px;
}
</style>

Props

参数 说明 类型 可选值 默认值
prizeList 奖品列表 Array
props 配置选项 Object 下文的配置选项
getPrize 抽奖函数 Function
lotteryTimes 抽奖次数 Number

配置选项(props)

// 配置选项
const properties = {
  // 奖品值的别名
  value: 'value',
  // 奖品名称的别名
  label: 'label',
  // 奖品图片的别名
  img: 'img',
  // 自定义扇区的颜色
  colors: [
    'rgb(249, 108, 28)',
    'rgb(255, 255, 255)'
  ],
  // 匀速动画配置
  linearAnimation: {
    // 角度
    rotate: 720,
    // 时间
    duration: 1200
  },
  // 结束动画配置
  finalAnimation: {
    // 角度
    rotate: 1800,
    // 时间
    duration: 8500,
    // 时间曲线
    // 具体查看 https://easings.net/
    easing: 'easeOutQuart'
  }
}

Readme

Keywords

Package Sidebar

Install

npm i lucky-turning

Weekly Downloads

1

Version

1.0.1

License

ISC

Unpacked Size

1.22 MB

Total Files

17

Last publish

Collaborators

  • xuxiake2016