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

大体思路:页面加载完成后,通过监听开始按钮的点击事件。然后会根据产生的随机数,通过控制旋转针对象的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 循环json

    var json= { "Type": "Coding", "Height":100 }; for (var key in json) { ...

  2. vma

    linux内核的每一样技术,都是为了解决某个问题的. vma结构体的提出是为了管理"虚拟内存空间"这个资源. 像brk(),mmap()分配给用户空间的都是虚拟地址(当然),那内核就要知道哪一部分虚拟 ...

  3. [HNOI2011]卡农 题解

    题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...

  4. Linux知识总结(更新中)

    Linux知识总结(更新中) 如何查找特定的文件 find find path [options] params 作用:在指定目录下查找文件 检索文件内容 grep grep [options] pa ...

  5. git分布式版本控制系统权威指南学习笔记(六):git reset、get stash、git checkout总结

    文章目录 1. 概述 2. 如何把修改暂存起来,留着以后使用? 2.1 使用场景 2.2 git stash 暂存进度 2.3 查看进度 2.4 恢复进度 3. 如何撤销工作区的修改? 4. 如何把暂 ...

  6. spark hive java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT

    java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT 这个问题我感觉是hive给spark挖的一个大坑.spark版本是2.4.4,hive是3 这个 ...

  7. FVWM_SMALLEST_CONFIG

    ... # ----------------------------------------------------------------- # HANDBOOK: # http://yaoqian ...

  8. firewall防火墙配置

    获取所有zone firewall-cmd --list-all-zones 重启服务 firewall-cmd --complete-reload 名词解释 在具体介绍zone之前学生先给大家介绍几 ...

  9. phoenix 利用CsvBulkLoadTool 批量带入数据并自动创建索引

    需要先创建表: CREATE TABLE IF NOT EXISTS population ( state CHAR() NOT NULL, city VARCHAR NOT NULL, popula ...

  10. OMG that's another blog!

    目录 1.Beginning 2.then 1.Beginning we'v learnt how to ask file from our own computer and tried to bui ...