今天花了一段时间简单写了下抽奖大转盘,这里写的只是自己想到的简单的写了下(也希望收获其他想法),后续,再写的话会更新。

大体思路:页面加载完成后,通过监听开始按钮的点击事件。然后会根据产生的随机数,通过控制旋转针对象的transform属性,然后进行旋转,最后在结束后获取存储来数组中对应的抽奖内容最后弹出。

知识点:transform, translation,js数组,Math等等

先看下效果,没有素材,只是用css简单的布了下局。不要喷我比较简陋,嘿嘿。

接下来是基本代码结构:

 <div class="rotate_con">
<div class="rotate_row">
<div class="rotate_item">
RMB100
</div>
<div class="rotate_item">
流量100M
</div>
<div class="rotate_item">
谢谢参与
</div>
</div>
<div class="rotate_row">
<div class="rotate_item">
再接再厉
</div>
<div class="rotate_item item_start" id="start">
开始
<div class="rotate" id="rotate_zhen"> </div>
</div>
<div class="rotate_item">
RMB2
</div>
</div>
<div class="rotate_row">
<div class="rotate_item">
RMB100
</div>
<div class="rotate_item">
谢谢参与
</div>
<div class="rotate_item">
流量100M
</div>
</div>
</div>

接下来是样式:

 <style>
* {
margin:;
padding:;
} .rotate_con {
margin: 50px auto;
width: 320px;
height: 320px;
border: 1px solid #FFFFFF;
border-radius: 50%;
} .rotate_row {
display: flex;
display: -webkit-flex;
height: 33.3333333%;
} .rotate_item {
flex: 0 0 33.3333333%;
-webkit-flex: 0 0 33.3333333%;
line-height: 106.666666px;
text-align: center;
background: yellow;
padding: 1px;
border: 1px solid #fff;
box-sizing: border-box;
} .item_start {
position: relative;
background-color: #FF5E5E;
color: #FFFFFF;
font-weight: bold;
cursor: pointer
} .item_start:active {
background: #ED745B;
} .rotate {
position: absolute;
width: 5px;
height: 106px;
top: -53px;
left: 53px;
background: #fff;
transform: rotateZ(0deg);
transform-origin: left bottom;
-webkit-transform-origin: left bottom;
transition: all 1.5s cubic-bezier(0.25, 0.1, 0.25, 1);
} .item_active {
border-color: red;
}
</style>

最后js部分

 <script>
//获取对象
var getid = function(id) {
return document.getElementById(id);
};
//按照旋转顺序的数组
var context = ["流量100M", "谢谢参与", "RMB2", "流量100M", "谢谢参与", "RMB100", "再接再厉", "RMB100"];
var deg = 45, //旋转的默认角度360/8
numdeg = 0, //记录上次旋转停止时候的角度
num = 0, //记录旋转后数组的位置
isRotated = false; //判断是否在进行中
window.onload = function() {
var zhen = getid("rotate_zhen");
getid("start").addEventListener('click', function() {
if(isRotated) return; //如果正在旋转退出程序
isRotated = true;
var index = Math.floor(Math.random() * 8); //得到0-7随机数
num = index + num; //得到本次位置
numdeg += index * deg + Math.floor(Math.random() * 3 + 1) * 360;
zhen.style.webkitTransform = zhen.style.transform = "rotateZ(" + numdeg + "deg)";
setTimeout(function() {
if(num >= 8) { //如果数组位置大于7就重新开始
num = num % 8;
}
alert(context[num]);
isRotated = false; //旋转改为false说明没有旋转
}, 1700)
}, false)
}
</script>

最后是测试结果:

大转盘抽奖css3+js(简单书写)的更多相关文章

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

    源于前段时候微信小程序最初火爆公测时段,把以前用 Canvas 实现的大转盘抽奖移植成微信小程序,无奈当时小程序对 Canvas 支持不够完善,只好降低用 CSS3 实现.虽然比不上 Canvas 绘 ...

  2. 【Vue.js游戏机实战】- Vue.js实现大转盘抽奖总结

    大家好!先上图看看本次案例的整体效果. 实现思路: Vue component实现大转盘组件,可以嵌套到任意要使用的页面. css3 transform控制大转盘抽奖过程的动画效果. 抽奖组件内使用钩 ...

  3. C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断

    C#保留2位小数几种场景总结   场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2 ...

  4. jquery——九宫格大转盘抽奖

    一.用到的图片 二.代码如下,重点是js部分 <!DOCTYPE html> <html> <head> <meta http-equiv="Con ...

  5. Java 实现大转盘抽奖

    需要用到 JAVA中的Random()函数 注意:大转盘抽奖各奖项中奖概率之和为 1.奖品列表中的概率为累加概率,需要按照添加进列表的顺序进行累加,添加顺序不做要求. 实际中使用需要考虑奖品数量限制等 ...

  6. PHP实现大转盘抽奖算法实例

    本文主要向大家介绍了PHP语言实现大转盘抽奖算法,通过具体的实例向大家展示,希望对大家学习PHP抽奖有所帮助. 流程:1.拼装奖项数组,2.计算概率,3.返回中奖情况 代码如下:中奖概率 ' v ' ...

  7. PHP+AJAX开发幸运大转盘抽奖

    PHP+AJAX开发幸运大转盘抽奖,通过奖品库存.中奖次数来计算中奖概率 奖品设置 $prizes = array( 0 => array( "id" => 0, // ...

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

    效果图: 所需图片素材: 这张图是pointer.png的位置的. turntable-bg.jpg这张是转盘背景图,在背景位置. 这张是turntable.png位置的. 需要这三张图片,如果要实现 ...

  9. 小程序 大转盘 抽奖 canvas animation

    项目需求运用到大转盘 可设置概率 可直接自定义结果 效果如下

随机推荐

  1. js 实现 间隙滚动效果

    代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...

  2. 使用Git实现Laravel项目的自动化部署

    简介 不知道大家一开始是怎么使用 git 进行开发的,反正我个人是先将代码提交到 github 仓库,然后用 SSH 登录到服务器,然后进行克隆或者版本更新.听起来就很麻烦,当然实际操作中也很麻烦,那 ...

  3. yarn安装node-sass报错问题

    react前端项目在用yarn install命令安装依赖时报错了,看了下报错信息是node-sass安装的时候编译报错. 解决方法: 第一步:配置淘宝镜像 yarn config set regis ...

  4. ( vant ) 新手踩坑

    最近在用vant 做H5 页面,坑太他娘的坑娘啊!!!!!!!!!!!!!!!! 1,修改vant组件样式问题 vant 修改组件的样式时,在scoped 属性下没有效果.如果去掉scope 会造成全 ...

  5. 分布式项目pom

    <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit ...

  6. D. Who killed Cock Robin--“今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛)

    题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 题目描述 由于系统限制,C题无法在此评测,此题为现场赛的D题 Who killed Cock Robin? I, ...

  7. 关闭windows的DEP

    1.与开启dep时一样,按组合键win+r打开运行窗口,输入cmd并按回车,如图所示:    2.调出命令提示符窗口后,输入bcdedit.exe/set {current} nx AlwaysOff ...

  8. try-with-resources 让java资源关闭代码更简洁

    一.JDK7的资源关闭方式优化 1 try-with-resource语法 在JDK7以前,Java没有自动关闭外部资源的语法特性,直到JDK7中新增了try-with-resource语法,才实现了 ...

  9. Linux 下tomcat+jdk+mysql安装

    JDK 1.用xftp把 jdk1.8.0_65上传到local下 给他赋予最高权限 1)切换到顶级目录    cd ~ 2)然后切换到上级目录 cd .. 3)切换到local路径下  cd /us ...

  10. 2019杭电多校第四场hdu6621 K-th Closest Distance(二分答案+主席树)

    K-th Closest Distance 题目传送门 解题思路 二分答案+主席树 先建主席树,然后二分答案mid,在l和r的区间内查询[p-mid, p+mid]的范围内的数的个数,如果大于k则说明 ...