美文网首页简友广场让前端飞
案例总结【抽奖功能实现】

案例总结【抽奖功能实现】

作者: hijackli | 来源:发表于2020-01-13 00:18 被阅读0次

在此记录一些小的功能demo实现过程的记录。**这些demo都是根据网上收集或者自己突发奇想实现的功能。

前天实现了一个简单的抽奖功能,今天来复个盘。

image

这个功能很简单,就是点击之后,轮盘旋转,旋转停止弹出抽奖结果。我从两个角度重新写了一遍,一个是面向过程的方法,一步一步实现,这种偏向正常人的思维。再一个实现方法是面向对象的方法,这个对我来说也是比较新鲜的,以前虽然听过,但很少实操过。


第一个面向过程编程的方式中,对于我来说重点有以下几个:

  1. 点击让轮盘随机旋转,旋转几圈,角度怎么随机?

  2. 旋转通过什么实现?

  3. 如何判断轮盘停止之后获得什么奖项?

实现过程:

第一个问题通过Math.random()来实现;

第二个问题通过css3的旋转属性实现;

第三个问题通过if else判断旋转角度即可,再通过函数封装一下就好了;

var deg = Math.random() * 360;

难点:

  1. 点击多次就有问题,自己知道要等旋转结束才能再点击

  2. 什么时候判断旋转结束

  3. 如果别人点击多次如何避免出现问题

解决:

  1. 通过一个监听事件WebkitTransitionEnd监听轮盘旋转结束,这个都忘记好久了。

  2. 通过给程序加锁,可以避免多次点击多次产生执行事件,导致错误。也就是在锁开的点击就生效,点击事件执行,然后锁立马关上,等到监听事件监听到轮盘旋转结束,再打开锁。

最后还有一个问题,就是第二次点击,轮盘不会旋转设置好的8圈,而是转一圈以内的角度。这个问题在于,第一次旋转结束的状态角度跟第二次随机生成的状态角度相差不过360度,比如:第一次随机旋转8圈+45度 停止,第二次随机了一个8圈+90度,那么两次的度数相差45度,对于旋转属性来说,第二次变换只想对于上一次的状态变化,所以并不会旋转8圈,而是转45度。

所以在每次旋转结束,都要隐式的把轮盘的状态归零。

ele.style.transform = `rotate(${deg}deg)`;

用面向对象的方法实现有几点要记录的:

整体思路:

  1. 轮盘对象

  2. 按钮对象

  3. 轮盘有监听旋转停止功能

  4. 轮盘有旋转的功能

  5. 轮盘有奖项属性,并且有判断奖项的功能

  6. 轮盘有初始角度

  7. 轮盘有旋转结束的时间点

  8. 按钮有被点击的功能

  9. 按钮点击有生成旋转角度的功能

  10. 按钮有控制轮盘是否符合旋转要求的能力(判断轮盘是否旋转结束)

在实现过程中,除了有些地方需要记录this,写法上跟面向过程有些不一样,其他的功能都跟面向过程实现方法一致。只是要多熟悉一下这种感觉,不过确实挺好。

最后通过一个立即执行函数封闭一下作用域,不让外界影响程序。并立即执行函数中传递了window,绑定了一个对象,把它暴露出去,这个对象是外界定制轮盘旋转多少圈的,如果需要也可以定制一些其他功能需求。

image

相关文章

  • 案例总结【抽奖功能实现】

    在此记录一些小的功能demo实现过程的记录。**这些demo都是根据网上收集或者自己突发奇想实现的功能。 前天实现...

  • 抽奖功能实现

    一、实现原理: 获取所有的奖品信息; 遍历奖品,获取每个奖品的中奖率,注意:所有的奖品中奖率加起来不能超过100,...

  • js实现抽奖功能

    大致样式如下: 一、构思 奖励物品是通过接口获取的(img) 奖励结果是通过接口获取的(id) 抽奖的动画需要由慢...

  • vue计算属性,axios,动画

    === computed watch 案例-利用系统指令实现品牌案例管理功能-实现品牌列表数据过滤功能功能-利用v...

  • iOS 客户端实现幸运大转盘(抽奖)

    一个简单的抽奖案例 前言 先说一下程序实现抽奖这个事。据我目前了解到的情况,一般是由服务端实现抽奖的全部业务,客户...

  • 2018-12-27(五)实现幸运抽奖 1. 需求说明 (1)

    实现幸运抽奖 需求说明(1) . 登录成功后,用户选择幸运抽奖菜单,进入幸运抽奖功能(2) . 输入会员卡...

  • 一夜暴富抽奖系统

    实现幸运抽奖 1. 需求说明 (1) . 登录成功后,用户选择幸运抽奖菜单,进入幸运抽奖功能 (2) . 输入会员...

  • jquery案例实现抽奖效果

    案例代码 ps:如需使用代码,注意代码中的资源导入与路径问题 如有错误或建议欢迎大家指出与评论哈,希望这篇博文能帮...

  • Vue I18n实际应用

    最近在实际项目中使用过vue i18n插件实现国际化功能,但是发现网上对于异步加载实现国际化功能的案例不多,总结一...

  • 抽奖功能实现(纯算法)

    权重的概念 简单的将权重就是某个奖品的中奖率,总权重就是所有的中奖率相加得到的总数(当然如果是抽奖的话所有奖品加起...

网友评论

    本文标题:案例总结【抽奖功能实现】

    本文链接:https://www.haomeiwen.com/subject/vgtgactx.html