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

大体思路:页面加载完成后,通过监听开始按钮的点击事件。然后会根据产生的随机数,通过控制旋转针对象的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. Oracle数据库中文乱码问题解决

    1.查看服务器端编码select userenv('language') from dual;我实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK 2.执行语句 select * f ...

  2. 【leetcode】977. Squares of a Sorted Array

    题目如下: Given an array of integers A sorted in non-decreasing order, return an array of the squares of ...

  3. 6383. 【NOIP2019模拟2019.10.07】果实摘取

    题目 题目大意 给你一个由整点组成的矩形,坐标绝对值范围小于等于\(n\),你在\((0,0)\),一开始面向\((1,0)\),每次转到后面第\(k\)个你能看到的点,然后将这条线上的点全部标记删除 ...

  4. springboot输出hello world,3种方式(String,JSON,jsp),IDEA开发工具

    新建项目: File -> new -> Project -> Spring Initializr -> Next -> Next -> Next-> Pro ...

  5. 批量更新数据(BatchUpdate)

    批量更新数据(BatchUpdate) /// <summary> /// 批量更新数据,注意:如果有timestamp列,要移除 /// </summary> /// < ...

  6. bzoj1050题解

    [解题思路] 先把边按边权排序,然后O(m)暴力枚举最小边,对于每条最小边,将比其大的边按序加入直到起终点连通,此时最大边权/最小边权即为选择该最小边情况下的最小比值.复杂度O(m(m+n)α(n)) ...

  7. IDHTTP

    Delphi IDHTTP用法详解 一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接 ...

  8. NodeJS+Express+mySQL服务端开发详解

    随着NodeJS的发展,现在已经被很多人熟知,NodeJS已经成为了前端开发人员必备的技能.本文不会对NodeJS过多介绍 如果你感兴趣可以访问NodeJS 官网, 维基百科 本文是利用NodeJS+ ...

  9. JAVA中 成员变量和和实例变量区别

    java语言支持的变量类型 类变量:独立于方法之外的变量,用 static 修饰. 局部变量:类的方法中的变量. 实例变量(全局变量):独立于方法之外的变量,不过没有 static 修饰. publi ...

  10. CSS:CSS 布局 - 水平 & 垂直对齐

    ylbtech-CSS:CSS 布局 - 水平 & 垂直对齐 1.返回顶部 1. CSS 布局 - 水平 & 垂直对齐 水平 & 垂直居中对齐 元素居中对齐 要水平居中对齐一个 ...