html + css原生实现的,放在哪里都可以用,中奖奖品是可控的。

还是直接上代码吧

幸运大转盘

* { /* 重置默认样式 */

margin: 0;

padding: 0;

border: none;

outline: none;

user-select: none;

}

.wrapper {

position: relative;

height: 200px;

width: 200px;

padding: 20px;

margin: 20px;

background-color: #ff5555;

box-shadow: #000000 0px 0px 10px;

border-radius: 50%;

margin: 100px auto;

}

.light {

position: absolute;

height: 10px;

width: 10px;

border-radius: 50%;

top: 5px;

left: 115px;

transform-origin: 5px 115px;

}

.light-twinkling {

animation: 1s twinkling 3, 100ms 3s twinkling 3;

}

.light:nth-child(2n) {

background-color: #fafce7;

}

.light:nth-child(2n+1) {

background-color: #ffe58b;

}

.light:nth-child(2) {

transform: rotate(36deg);

}

.light:nth-child(3) {

transform: rotate(72deg);

}

.light:nth-child(4) {

transform: rotate(108deg);

}

.light:nth-child(5) {

transform: rotate(144deg);

}

.light:nth-child(6) {

transform: rotate(180deg);

}

.light:nth-child(7) {

transform: rotate(216deg);

}

.light:nth-child(8) {

transform: rotate(252deg);

}

.light:nth-child(9) {

transform: rotate(288deg);

}

.light:nth-child(10) {

transform: rotate(324deg);

}

.panel {

position: relative;

height: 200px;

width: 200px;

background-color: #b7b7b7;

border-radius: 100px;

}

.sector {

position: absolute;

left: 100px;

top: 0px;

width: 100px;

height: 200px;

font-size: 14px;

border-radius: 0px 100px 100px 0;

overflow: hidden;

transform-origin: left center;

}

.sector:nth-child(1) {

transform: rotate(-18deg);

}

.sector:nth-child(2) {

transform: rotate(18deg);

}

.sector:nth-child(3) {

transform: rotate(54deg);

}

.sector:nth-child(4) {

transform: rotate(90deg);

}

.sector:nth-child(5) {

transform: rotate(126deg);

}

.sector:nth-child(6) {

transform: rotate(162deg);

}

.sector:nth-child(7) {

transform: rotate(198deg);

}

.sector:nth-child(8) {

transform: rotate(234deg);

}

.sector:nth-child(9) {

transform: rotate(270deg);

}

.sector:nth-child(10) {

transform: rotate(306deg);

}

.sector:nth-child(2n+1) .sector-inner {

background: #fef6e0;

}

.sector:nth-child(2n) .sector-inner {

background: #ffffff;

}

.sector-inner {

text-align: center;

display: block;

width: 40px;

padding: 5px 3px 0 57px;

height: 195px;

transform: translateX(-100px) rotate(36deg);

transform-origin: right center;

border-radius: 100px 0 0 100px;

}

.sector-inner span {

display: block;

transform-origin: center;

transform: rotate(-19deg);

color: #d46854;

}

.pointer {

position: absolute;

left: 79px;

top: 79px;

z-index: 10;

height: 30px;

width: 30px;

padding: 6px;

color: #fff899;

line-height: 15px;

font-size: 12px;

text-align: center;

background-color: #FE4848;

border-radius: 50%;

border: 1px solid #FE4848;

transition: transform 3s cubic-bezier(.2,.93,.43,1);

}

.pointer::after {

content: '';

position: absolute;

left: 14px;

top: -24px;

border-width: 12px 6px;

border-style: solid;

border-color: transparent;

border-bottom-color: #FE4848;

transform-origin: center;

}

.result {

margin: 20px 60px;

}

@keyframes twinkling {

50% { background: transparent; }

}

奖品10

奖品1

奖品2

奖品3

奖品4

奖品5

奖品6

奖品7

奖品8

奖品9

开始抽奖

let getEle = document.getElementsByClassName.bind(document);

let pointer = getEle('pointer')[0];

let result = getEle('result')[0];

let lights = Array.prototype.slice.call(getEle('light'));

let onRotation = false; // 记录当前是否正在旋转,如果正在旋转,就不能继续点击了

let reward = ['奖品10', '奖品1', '奖品2', '奖品3', '奖品4',

'奖品5', '奖品6', '奖品7', '奖品8', '奖品9'];

// 根据随机角度获取奖励

let getReward = (function() {

currentDeg = 0;

return function() {

// 转三圈到四圈

let id = Math.random() //这里是中奖ID 可以通过接口返回 取值为0.1 - 10 返回值需要做处理  例:返回3则处理为 id = 3 / 10

let rotateDeg = id * 360 + 1080;

currentDeg += rotateDeg;

let rewardText = reward[Math.floor((currentDeg + 18) % 360 / 36)]

return {

deg: currentDeg,

text: rewardText === '谢谢参与' ? '很遗憾,您没有获得奖品。' : '恭喜获得: ' + rewardText

}

}

})();

pointer.addEventListener('click', () => {

if (onRotation) return;

console.log('开始抽奖');

onRotation = true;

lights.forEach(light => { light.className += ' light-twinkling'; });

let nextStatus = getReward();

console.log(nextStatus)

result.innerText = nextStatus.text;

result.style.display = 'none';

pointer.style.transform = `rotateZ(${nextStatus.deg}deg)`;

})

pointer.addEventListener('transitionend', () => {

console.log('抽奖结束');

setTimeout(() => { // 等闪烁五下结束

onRotation = false;

lights.forEach(light => { light.className = 'light'; });

result.style.display = 'block';

}, 500);

// 这里每100毫秒为闪烁一次

})

html滚动抽奖主题,html+css抽奖大转盘相关推荐

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

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

  2. 手机抽奖页面代码html,html5大转盘抽奖支持手机转盘抽奖代码

    特效描述:html5 大转盘抽奖 支持手机 转盘抽奖代码.html5转盘,html5抽奖,手机转盘,手机抽奖,手机转盘抽奖,可配置奖品抽奖. 代码结构 1. 引入CSS 2. 引入JS 3. HTML ...

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

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

  4. php mysql随机抽奖源码_幸运大转盘-jQuery+PHP实现的抽奖程序

    目前好多网站上应用的转盘抽奖程序大多是基于flash的,而本文结合实例将使用jQuery和PHP来实现转盘抽奖程序,为了便于理解,作者分两部分来讲解,本文讲解第一部分,侧重使用jQuery实现转盘的转 ...

  5. 幸运抽奖java技术文档_原生js轮盘抽奖实例分析(幸运大转盘抽奖)

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

  6. 移动换H5 の 纯CSS3实现大转盘抽奖布局 by FungLeo

    移动换H5 の 纯CSS3实现大转盘抽奖布局 by FungLeo 前言 本教程不涉及JS控制旋转部分,也不涉及后端输出抽奖结果部分.这篇教程讲的是如何去实现大转盘抽奖的布局. 在制作大转盘抽奖的时候 ...

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

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

  8. 【项目实战】——Java根据奖品权重计算中奖概率实现抽奖(适用于砸金蛋、大转盘等抽奖活动)

    双蛋节(圣诞+元旦)刚刚过去,前几天项目上线的砸金蛋活动也圆满结束.   现在在许多网站上都会有抽奖的活动,抽奖的算法也是多种多样,这里介绍一下如何根据每种奖品的权重来抽奖,适用于多种抽奖形式. 奖品 ...

  9. 用html实现抽奖大转盘,【项目实战】用CSS实现一个抽奖转盘(附详细代码+思路)...

    原标题:[项目实战]用CSS实现一个抽奖转盘(附详细代码+思路) 效果 基本是用CSS实现的,没有用图片,加一丢丢JS. 完全没有考虑兼容性. 首先画一个转盘 < htmllang= " ...

最新文章

  1. 区块链概况:从数字货币说起
  2. openstack neutron-fwaas 中的几个概念
  3. 20179214 2017-2018 2《网络攻防实践》第七周学习总结
  4. 品质管控计划ppt怎样写_品质管理需要做好几件事
  5. 关于 Unloading class sun.reflect.GeneratedSerial...
  6. Google Duo采用WaveNetEQ填补语音间隙
  7. 省选+NOI 第四部分 图论
  8. 基于OpenCV的计算机视觉入门(1)图片操作入门
  9. Linux的相关资源帖
  10. App Ratings iOS
  11. mt4 谐波_MT4指标Harmonic Dasboard — 外汇谐波仪表盘交易系统
  12. 人工智能+建筑,会产生什么?
  13. 计算日期间隔,以XX年XX月XX日格式显示
  14. 从零开始学习区块链技术
  15. jquery fadein css同时用,如何同时运行jQuery fadeIn()和slideDown()?
  16. Python编程好不好学?入门难吗?
  17. Arduino-ESP8266库接口:Ticker.h
  18. oracle表数据导出成unl文件,oracle的文本导入、导出技巧
  19. SpringCloud - GateWay服务网关
  20. python软件下载对电脑配置要求-Python实现的读取电脑硬件信息功能示例

热门文章

  1. 找不到女友以工作忙为由则是能力低
  2. WebService客户端设计期TClientDataSet.ProviderName无值解决
  3. Galaxy A系列新品亮相,看三星如何解决年轻消费痛点?
  4. 送给她超浪漫的表白信——她感动哭了(.html)
  5. 一条SQL注入引出的惊天大案 (续篇)
  6. 视频直播流程以及ffmpeg编解码流程
  7. 支付宝快捷支付 快就不安全了吗?
  8. Wow.js插件实现上下滑动重复渐入效果
  9. 2021年全球广告行业支出情况:数字广告支出3557亿美元,占比52.9%[图]
  10. 内卷效益带来的大数据可视化