我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么用Javascript实现一个转盘小游戏

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么用Javascript实现一个转盘小游戏

本篇内容主要讲解“怎么用Javascript实现一个转盘小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Javascript实现一个转盘小游戏”吧!

前言

本文技术路线采用和上篇文章教你用200行代码写一个爱豆拼拼乐H5小游戏(附源码)同样的技术,即均使用本人自己写的dom库去简化dom操作,具体需要掌握的知识点有:

  • css3 背景渐变,transform,transition

  • less循环的使用

  • javascript基本随机算法

  • 文档片段 documentFragment的使用

由于文章没有太高深的技术,关键是思路,所以接下来开始我们的实现介绍。

效果图

怎么用Javascript实现一个转盘小游戏

实现思路

实现思路分两部分,第一部分是用css绘制转盘背景,第二部分是通过js实现转盘的转动以及转动随机性的实现。

1. 绘制转盘背景

我们采用背景渐变的方式去实现条纹交替的扇形,原理就是通过绘制一个半圆,并在半圆里加渐变来实现,如下图:

怎么用Javascript实现一个转盘小游戏

实现将方形变成半圆的css我们通过border-radius来实现:

width: 150px;    height: 300px;    border-radius: 0 150px 150px 0;

我们再通过css的线性渐变,这样本基本上可以实现一个小的扇形区域:

怎么用Javascript实现一个转盘小游戏

我们再通过css的线性渐变,这样本基本上可以实现一个小的扇形区域:

渐变的代码如下:

background-image: linear-gradient(120deg, #f6d365, #f6d365 75px, transparent 75px);

实现了一个扇形,我们自然可以通过计算,比如我们扇形弧度为30deg,那么我们需要12个扇形即可组成一个圆,为了方便,我们使用less的循环来实现:

.loop(@n) when (@n >= 0) {     .loop(@n - 1);     .piece-@{n} {         transform: rotate(-30deg * (@n + 1));     }  }

还有一个细节是,我们需要改变变换的中心点,让每个扇形都以一个中心点渲染,这样才可以组成一个完整的圆:

transform-origin: left center;

完整的css大致如下:

.piece-wrap {     position: relative;     width: 300px;     height: 300px;     margin: 100px auto  auto 173px;     transform-origin: left center;     transition: transform 16s cubic-bezier(0,.47,.31,1.03);     .piece {         position: absolute;         left: 0;         top: 0;         width: 150px;         height: 300px;         border-radius: 0 150px 150px 0;         transform-origin: left center;         span {             margin-left: 16px;             margin-top: 20px;             display: inline-block;             color: #fff;         }         &:nth-child(2n) {             background-image: linear-gradient(120deg, #f6d365, #f6d365 75px, transparent 75px);         }         &:nth-child(2n+1) {             background-image: linear-gradient(120deg, #ff5858, #ff5858 75px, transparent 75px);         }     }      .loop(@n) when (@n >= 0) {         .loop(@n - 1);         .piece-@{n} {             transform: rotate(-30deg * (@n + 1));         }      }      .loop(11); }

2.javascript实现转盘逻辑

由于转盘的转动是随机的,所以我们需要每次点击开始按钮都要随机生成一个角度,但是仔细分析一些平台会发现转盘每次都至少转动n圈后才会慢慢开始停下,所以我们会给转盘一个初始的角度,比如720deg,1080deg,这样能保证转盘至少转动n圈才停下来。另一个注意点是我们要如何通过转动角度知道转盘停下来后的位置?这里处于性能问题,我们尽量不操作dom,通过数据控制,我们可以通过每次随机后得到的角度和单位扇形区域的弧度来计算停下来的位置,公式如下:totalRadis  = initRadis + radis * n +  radis/2totalRadis为转动的角度,initRadis为初始化角度,radis为扇形的角度,radis/2是中奖的范围,这里主要用来定位用的,n是随机数,接下来我将解释n的作用。那么怎么实现随机角度呢?我们一般会想通过写个随机函数去做,不过这里有一种新的思路,就是通过随机生成中奖的位置来实现随机角度,由于我的扇形为30度,一共有12个扇形奖品区,所以索引为0-11。因此,上面讲到的n,就是我们的随机索引,我们只需要写个生成指定范围的随机数就可以了。了解了以上知识,我们开始准备初始化数据:

// 转盘抽奖数据     var wards = ['1元', '2元', '3元', '5元', '再来',       '算法', '0.5元', '0.1元', '0.2元', '0.6元',      '0.5元', '来'];

渲染奖品数据,这里我们用了DocumentFragment,虽然对简单渲染没有必要,但是后期可能会很有用:

// 渲染dom var fragment = document.createDocumentFragment(); for(var i=0, len = wards.length; i < len; i++) {     var piece = document.createElement('div');     piece.className = 'piece piece-' + i;     piece.innerHTML = '<span>' + wards[i] + '</span>';     fragment.appendChild(piece); }  $('#piece_wrap')[0].appendChild(fragment);

生成指定范围的随机数的方法:

// 生成从 start到end的随机数 function randomArr(start, end) {     return Math.round(start + Math.random()* (end - start)) }

当我们点击开始按钮时,我将通过改变转盘的transform来让其运动起来:

// 转动逻辑     var radis = 30,  // 每个扇形区域的度数             n = randomArr(0, 360/radis),  // 计算随机中奖的位置     initRadis = 720,   // 初始转动的角度          time = 16 * 1000,    // 转动时间           once = true,    // 限制一个转动周期只能点击一次    totalRadis = initRadis + radis * n + radis/2;  // 转动角度计算公式 $('.start').on('click', function(){     if(once) {         once = false;         $('#piece_wrap').css({             'transform':'rotate(' + totalRadis + 'deg)',             'transition': 'transform 16s cubic-bezier(0,.47,.31,1.03)'         });         setTimeout(function(){             once = true;             alert('恭喜你抽中了' + wards[n] + '!');             $('#piece_wrap').css({                 'transform':'rotate(' + 0 + 'deg)',                 'transition': 'none'             });         }, time)     }              })

到此,相信大家对“怎么用Javascript实现一个转盘小游戏”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么用Javascript实现一个转盘小游戏

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么在微信小程序实现一个幸运转盘小游戏

这篇文章将为大家详细讲解有关怎么在微信小程序实现一个幸运转盘小游戏,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果图小程序开发思路开发思路有三部分,第一部分是用css绘制转盘背景,第二部分是利用 wxs
2023-06-14

利用JavaScript怎么实现一个H5接金币小游戏

这篇文章主要为大家详细介绍了利用JavaScript怎么实现一个H5接金币小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,发现的小伙伴们可以参考一下:JavaScript的特点1.JavaScript主要用来向HTML页面添加交互行
2023-06-06

Python中怎么实现一个猜数小游戏

Python中怎么实现一个猜数小游戏,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。实现效果: 程序截图:点击(此处)折叠或打开from random import rand
2023-06-04

使用Java怎么实现一个贪吃蛇小游戏

这篇文章将为大家详细讲解有关使用Java怎么实现一个贪吃蛇小游戏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 程序结构  程序结构图如图:2. 程序设计思路2.1 Data类作用:连接
2023-06-14

使用JavaScript编写一个2048小游戏

今天就跟大家聊聊有关使用JavaScript编写一个2048小游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点
2023-06-07

python实现一个围棋小游戏

今天给大家带来一期围棋的源码分享。下面我们先看看效果。游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法,感兴趣的可以了解一下
2022-11-13

一文教你用JavaScript制作个简单的大转盘游戏

日常生活中,我们经常会见到形形色色的抽奖活动,例如九宫格、大转盘等等……本文就来教大家如何利用JavaScript制作个简单的大转盘游戏,感兴趣的可以了解一下
2023-02-01

Shell中怎么实现一个猜数字小游戏

Shell中怎么实现一个猜数字小游戏,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。生成的密码和用户输入可以接受重复数字。所以相对一般规则的猜数字可能难度要大不少。本版本规则:A
2023-06-09

使用C/C++怎么实现一个推箱子小游戏

这篇文章给大家介绍使用C/C++怎么实现一个推箱子小游戏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。如何实现1.首先思考要保存箱子,小猪等信息,添加多个map可以用到三维数组。2.定义小猪,箱子,墙,空地等信息在三维
2023-06-15

使用C语言怎么实现一个猜拳小游戏

本篇文章给大家分享的是有关使用C语言怎么实现一个猜拳小游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体内容如下#include#include
2023-06-06

怎么利用Three.js实现跳一跳小游戏

本篇内容介绍了“怎么利用Three.js实现跳一跳小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!游戏规则十分简单:长按鼠标蓄力、放手,
2023-06-30

编程热搜

目录