原生js轮盘抽奖实例分析(幸运大转盘抽奖)

效果图:

所需图片素材:

这张图是pointer.png的位置的。

turntable-bg.jpg这张是转盘背景图,在背景位置。

这张是turntable.png位置的。

需要这三张图片,如果要实现一下,直接另存这三图片引入进去即可。如果不会请修改成对应的图片名字,放到同一个文件下。

基本原理:

1,通过设置CSS样式的position属性,z-index属性等实现背景图,转盘图与指针图的层叠摆放;

2,通过设置元素style.transform = "rotate(0deg)"实现旋转效果。

完整代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="description" content="">
 6     <meta name="author" content="熊仔其人">
 7     <title>转盘抽奖效果</title>
 8     <!-- 这里是css部分 -->
 9     <style>
10         #bg {
11             width: 650px;
12             height: 600px;
13             margin: 0 auto;
14             background: url(turntable-bg.jpg) no-repeat;
15             position: relative;
16         }
17
18         img[src^="pointer"] {
19             position: absolute;
20             z-index: 10;
21             top: 155px;
22             left: 247px;
23         }
24
25         img[src^="turntable"] {
26             position: absolute;
27             z-index: 5;
28             top: 60px;
29             left: 116px;
30             transition: all 4s;
31         }
32     </style>
33 </head>
34 <body>
35     <!-- 这里是HTML结构部分 -->
36     <div id="bg"><img src="pointer.png" alt="pointer"><img src="turntable.png" alt="turntable"></div>
37     <!-- 这里是js部分 -->
38     <script>
39         var oPointer = document.getElementsByTagName("img")[0];
40         var oTurntable = document.getElementsByTagName("img")[1];
41         var cat = 51.4; //总共7个扇形区域,每个区域约51.4度
42         var num = 0; //转圈结束后停留的度数
43         var offOn = true; //是否正在抽奖
44         oPointer.onclick = function () {
45             if (offOn) {
46                 oTurntable.style.transform = "rotate(0deg)";
47                 offOn = !offOn;
48                 ratating();
49             }
50         }
51         //旋转
52         function ratating() {
53             var timer = null;
54             var rdm = 0; //随机度数
55             clearInterval(timer);
56             timer = setInterval(function () {
57                 if (Math.floor(rdm / 360) < 3) { rdm = Math.floor(Math.random() * 3600); }
58                 else {
59                     oTurntable.style.transform = "rotate(" + rdm + "deg)";
60                     clearInterval(timer);
61                     setTimeout(function () {
62                         offOn = !offOn;
63                         num = rdm % 360;
64                         if (num <= cat * 1) { alert("4999元"); console.log("rdm=" + rdm + ",num=" + num + "," + "4999元"); }
65                         else if (num <= cat * 2) { alert("50元"); console.log("rdm=" + rdm + ",num=" + num + "," + "50元"); }
66                         else if (num <= cat * 3) { alert("10元"); console.log("rdm=" + rdm + ",num=" + num + "," + "10元"); }
67                         else if (num <= cat * 4) { alert("5元"); console.log("rdm=" + rdm + ",num=" + num + "," + "5元"); }
68                         else if (num <= cat * 5) { alert("免息服务"); console.log("rdm=" + rdm + ",num=" + num + "," + "免息服务"); }
69                         else if (num <= cat * 6) { alert("提交白金"); console.log("rdm=" + rdm + ",num=" + num + "," + "提交白金"); }
70                         else if (num <= cat * 7) { alert("未中奖"); console.log("rdm=" + rdm + ",num=" + num + "," + "未中奖"); }
71                     }, 4000);
72                 }
73             }, 30);
74         }
75     </script>
76 </body>
77 </html>

css和HTML代码不多,主要是为了实现过渡设置,还有为了实现层叠而使用position定位,让元素脱离文档流,js代码在于获取元素和事件的点击,点击指针会旋转,所以要给指针加个点击事件,然后是判断旋转是否停止,如果没有就点击也不能调用函数ratating(),这个函数执行转盘的旋转和判断指针停在什么位置,然后弹出相应的内容,而函数里实现旋转的过程,是获取转盘的元素,然后使用js控制css的属性-transform:rotate(),我们不是使用过这个属性在css里直接使它实现旋转的效果吗?就是和伪类选择器:hover及过渡属性一起使用去实现的,那么因为css实现不了数字的运算和鼠标点击,所以让js去实现且控制css属性,实现到点击旋转这个功能,然而定时器的使用暂时不说,思路就是使用js实现数字的运算和鼠标的点击及css属性的控制达到旋转的效果。
Math.random()是随机数的生成,Math.floor()向下取整。

时间: 2024-10-13 20:53:20

原生js轮盘抽奖实例分析(幸运大转盘抽奖)的相关文章

js幸运大转盘开发

最终效果实例下载:http://www.oschina.net/code/snippet_2352644_54997 一.大转盘准备工作 网上的一个抽奖大转盘实例http://www.jq22.com/yanshi2252 这就是我们要开发的效果,不过我们是让指针转,我们先分析这个效果: 结构有2部分,上面是指针背景图,下面是奖项图 点击指针元素开始抽奖,会转动一定圈数停下来 停下来的位置指针指使那个奖项,就会弹出获奖信息提示 这是参考效果,我们分析自己的大概实现: 同样上下2部分 点击指针转动

jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现

在线实例 查看演示 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv

原型导航应用于大转盘抽奖客户端显示页面实例

<html><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> <title>大转盘客户端</title> <meta name="keyw

html5简单拖拽实现自动左右贴边+幸运大转盘

此篇文章主要实现两个功能: 1.点击屏幕下方签到悬浮按钮: 2.弹出幸运大转盘,转盘抽奖签到 效果如图: 鉴于初入前端之路,方法有限,仅供参考. 在网上找了很多拖拽的js实现方式,大部分都是这一种,html5的touch事件,但是没找到点击按钮可以向两边贴边的拖拽,所以自己稍微修改了一点.代码如下: //签到按钮拖拽 var dragBox = document.getElementById('signCorner'); //拖拽中 dragBox.addEventListener('touch

asp.net+jQueryRotate开发幸运大转盘

在线抽奖程序在非常多站点上非常多,抽奖形式多种多样.Flash抽奖偏多,本文将给大家介绍jQuery转盘抽奖.结合代码实例将使用jQuery和asp.net来实现转盘抽奖程序,为了便于理解,文章贴出实现源码作为分享.通过转动转盘指针来完毕抽奖的一种抽奖形式.依据旋转角度来控制指针停留的位置--幸运大转盘. 1.先来张幸运大抽奖效果图 2.Default.aspx页面代码 <!-- 很多其它技术分享请看博客:http://blog.csdn.net/fuyifang -->  <span

(素材源码)猫猫学iOS(四十六)之网易彩票幸运大转盘

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 素材源码地址:http://download.csdn.net/detail/u013357243/8713827 效果 代码: NYWheel NYWheel.h // // NYWheel.h // 网易彩票幸运大转盘 // // Created by apple on 15-5-18. // Copyright (c)

纯CSS3大转盘抽奖(响应式、可配置)

源于前段时候微信小程序最初火爆公测时段,把以前用 Canvas 实现的大转盘抽奖移植成微信小程序,无奈当时小程序对 Canvas 支持不够完善,只好降低用 CSS3 实现.虽然比不上 Canvas 绘图的绚丽,但也总算完成了一个抽奖的 Demo,详见:https://github.com/givebest/wechat-turntalbe-canvas. 事后想起,CSS3 实现也并不是无有益处,比如简单.快捷.调试方便.渲染想来也是要比 Canvas 要高效的,更重要的一点是支持媒体查询,大转

jquery——九宫格大转盘抽奖

一.用到的图片 二.代码如下,重点是js部分 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jQuery九宫格大转盘抽奖</title> <style> #lottery{width:570px;height:510p

大转盘抽奖

这周做了2个大转盘抽奖,一个使用了jQueryRotate.2.2.js插件,兼容到IE6,另外一个利用css3自己尝试写的 1.插件jQueryRotate.2.2.js(兼容基本浏览器,兼容到IE6) 效果查看: 此插件必须事先引入jquery插件,PC端推荐 JS插件代码: // VERSION: 2.2 LAST UPDATE: 13.03.2012 /* * Licensed under the MIT license: http://www.opensource.org/licens