基于JS+Canvas的lucky-canvas 抽奖功能

作者:vaelcy 时间:2024-04-19 09:51:26 

ucky-canvas 介绍

一个基于 Js + Canvas 的【大转盘 & 九宫格 & * 】抽奖, 致力于为 web 前端提供一个功能强大且专业可靠的组件, 只需要通过简单配置即可实现自由化定制, 帮助你快速的完成产品需求。

基于JS+Canvas的lucky-canvas 抽奖功能

lucky-canvas 功能特点

自由配置

奖品 / 文字 / 图片 / 颜色 / 按钮均可自由配置;支持同步 / 异步抽奖;中奖概率前 / 后端可控

多端适配

支持 JS / TS / JQ / Vue / React / 微信小程序 / UniApp / Taro 等;并且多端使用 / 表现形式完全一致

响应式

自动根据设备 dpr 调整清晰度;并支持使用 百分比 / rem / rpx 属性来适配移动端布局

具体详细功能介绍api请看官网

下面我简单写了三个抽奖小demo,大家可做参考。

代码块展示

这里使用掘金的码上掘金展示效果给大家看,ps:里边的图片因为引用的是本地所以不显示,可以看下面效果图的展示

https://code.juejin.cn/pen/7103522105597100039

效果图展示

图片是随便用的本地图片(懒得在网上找图片资源了),大家可自行替换成自己想要的图片哈,我这里就是简单实现一下demo。

基于JS+Canvas的lucky-canvas 抽奖功能

代码如下

抽奖一

// 第一个抽奖
const myLucky = new LuckyCanvas.LuckyGrid('#my-lucky', {
   width: '300px',
   height: '300px',
   blocks: [
       { padding: '10px', background: '#869cfa' },
       { padding: '10px', background: '#e9e8fe' },
   ],
   prizes: [
       { x: 0, y: 0, fonts: [{ text: '谢谢参与', top: '40%' }], },
       { x: 1, y: 0, fonts: [{ text: '小米手环', top: '40%' }], },
       { x: 2, y: 0, fonts: [{ text: '苹果13', top: '40%' }], },
       { x: 2, y: 1, fonts: [{ text: '优惠券50', top: '40%' }], },
       { x: 2, y: 2, fonts: [{ text: '优惠券100', top: '40%' }], },
       { x: 1, y: 2, fonts: [{ text: '迷你小冰箱', top: '40%' }], },
       { x: 0, y: 2, fonts: [{ text: '腾讯会员', top: '40%' }], },
       { x: 0, y: 1, fonts: [{ text: '优酷会员', top: '40%' }], },
   ],
   buttons: [
       {
           x: 1, y: 1,
           background: '#9c9dd8',
           fonts: [{ text: '抽奖', top: '40%' }],
       },
   ],
   defaultStyle: {
       background: '#b8c5f2',
       fontSize: '14'
   },
   start: function () {
       // 开始游戏
       myLucky.play()
       // 使用定时器模拟接口
       setTimeout(() => {
           // 结束游戏, 并抽第0号奖品
           myLucky.stop(0)
       }, 3000)
   },
   end: function (event) {
       // 获取抽奖的值
       console.log(event)
   }
})

抽奖二

// 第二个抽奖
const prizeImg2 = {
   src: '../../img/icon1.png',
   activeSrc: '../../img/icon3.png',
   width: '50%',
   top: '25%'
}
const myLucky2 = new LuckyCanvas.LuckyGrid('#my-lucky2', {
   width: '300px',
   height: '300px',
   blocks: [
       { padding: '10px', background: '#869cfa' },
       { padding: '10px', background: '#e9e8fe' },
   ],
   prizes: [
       { x: 0, y: 0, imgs: [prizeImg2] },
       { x: 1, y: 0, imgs: [prizeImg2] },
       { x: 2, y: 0, imgs: [prizeImg2] },
       { x: 2, y: 1, imgs: [prizeImg2] },
       { x: 2, y: 2, imgs: [prizeImg2] },
       { x: 1, y: 2, imgs: [prizeImg2] },
       { x: 0, y: 2, imgs: [prizeImg2] },
       { x: 0, y: 1, imgs: [prizeImg2] },
   ],
   buttons: [
       {
           x: 1, y: 1,
           background: '#9c9dd8',
           fonts: [{ text: '抽奖', top: '40%' }],
       },
   ],
   defaultStyle: {
       background: '#b8c5f2'
   },
   start: function () {
       // 开始游戏
       myLucky2.play()
       // 使用定时器模拟接口
       setTimeout(() => {
           // 结束游戏, 并抽第0号奖品
           myLucky2.stop(0)
       }, 3000)
   },
   end: function (event) {
       // 获取抽奖的值
       console.log(event)
   }
})

抽奖三

// 第三个抽奖
const prizeImg3 = [
   {
       src: '../../img/icon1.png',
       width: '50%',
       top: '15%'
   },
   {
       src: '../../img/icon2.png',
       width: '50%',
       top: '15%'
   },
   {
       src: '../../img/icon3.png',
       width: '50%',
       top: '15%'
   },
   {
       src: '../../img/icon4.png',
       width: '50%',
       top: '15%'
   },
   {
       src: '../../img/icon5.png',
       width: '50%',
       top: '15%'
   },
   {
       src: '../../img/icon6.png',
       width: '50%',
       top: '15%'
   },
   {
       src: '../../img/icon1.png',
       width: '50%',
       top: '15%'
   },
   {
       src: '../../img/icon2.png',
       width: '50%',
       top: '15%'
   }
]
const myLucky3 = new LuckyCanvas.LuckyGrid('#my-lucky3', {
   width: '300px',
   height: '300px',
   blocks: [
       { padding: '10px', background: '#869cfa' },
       { padding: '10px', background: '#e9e8fe' },
   ],
   prizes: [
       { x: 0, y: 0, fonts: [{ text: '谢谢参与', top: '60%' }], imgs: [prizeImg3[0]] },
       { x: 1, y: 0, fonts: [{ text: '小米手环', top: '60%' }], imgs: [prizeImg3[1]] },
       { x: 2, y: 0, fonts: [{ text: '苹果13', top: '60%' }], imgs: [prizeImg3[2]] },
       { x: 2, y: 1, fonts: [{ text: '优惠券50', top: '60%' }], imgs: [prizeImg3[3]] },
       { x: 2, y: 2, fonts: [{ text: '优惠券100', top: '60%' }], imgs: [prizeImg3[4]] },
       { x: 1, y: 2, fonts: [{ text: '迷你小冰箱', top: '60%' }], imgs: [prizeImg3[5]] },
       { x: 0, y: 2, fonts: [{ text: '腾讯会员', top: '60%' }], imgs: [prizeImg3[6]] },
       { x: 0, y: 1, fonts: [{ text: '优酷会员', top: '60%' }], imgs: [prizeImg3[7]] },
   ],
   buttons: [
       {
           x: 1, y: 1,
           background: '#9c9dd8',
           fonts: [{ text: '抽奖', top: '40%' }],
       },
   ],
   defaultStyle: {
       background: '#b8c5f2',
       fontSize: '14'
   },
   start: function () {
       // 开始游戏
       myLucky3.play()
       // 使用定时器模拟接口
       setTimeout(() => {
           // 结束游戏, 并抽第0号奖品
           myLucky3.stop(0)
       }, 3000)
   },
   end: function (event) {
       // 获取抽奖的值
       console.log(event)
   }
})

来源:https://juejin.cn/post/7104094465048084511

标签:js,lucky,canvas,抽奖
0
投稿

猜你喜欢

  • Python从函数参数类型引出元组实例分析

    2022-12-18 01:51:22
  • conda与jupyter notebook kernel核环境不一致的问题解决

    2021-07-03 15:43:02
  • 使用Python Fast API发布API服务的过程详解

    2022-05-19 20:03:44
  • argparse 模块简介

    2023-05-27 10:19:36
  • Ubuntu20.04环境安装tensorflow2的方法步骤

    2023-07-04 06:41:21
  • python中实现数组和列表读取一列的方法

    2021-04-07 08:04:48
  • python实现canny边缘检测

    2022-03-05 00:24:08
  • Python神经网络TensorFlow基于CNN卷积识别手写数字

    2022-06-18 20:23:00
  • Python异常信息的不同展现方法总结

    2021-02-20 10:14:26
  • 详解Python的Twisted框架中reactor事件管理器的用法

    2023-09-07 16:28:18
  • django rest framework vue 实现用户登录详解

    2022-04-15 00:53:52
  • Python程序暂停的正常处理方法

    2023-07-17 23:21:47
  • python之PySide2安装使用及QT Designer UI设计案例教程

    2023-01-18 06:42:53
  • Vue过滤器的用法和自定义过滤器使用

    2024-05-09 10:41:20
  • MySQL无法重启报错Warning: World-writable config file ‘/etc/my.cnf’ is ignored的解决方法

    2024-01-16 06:49:29
  • Vue 解决多级动态面包屑导航的问题

    2024-05-02 17:11:19
  • ES5学习教程之Array对象

    2024-04-17 10:09:17
  • python sklearn 画出决策树并保存为PDF的实现过程

    2023-08-05 00:23:54
  • Javascript typeof 用法

    2013-10-20 20:49:40
  • python正则表达式及使用正则表达式的例子

    2021-07-28 20:15:41
  • asp之家 网络编程 m.aspxhome.com