之前项目的时候要写一个抽奖,自己写了以后就记录一下。

先是html

 <div class="turntable_zhan">

        <img class="yuanpan_zj" src="~/Content/Images/newjf/jiazhi.png" />
<img class="yuanpan_jinq" src="~/Content/Images/newjf/lunzhuangd.png" />
<img class="yuanpan_jinq2" src="~/Content/Images/newjf/lunzhuangc.png" />
<img class="yuanpan_renwu" src="~/Content/Images/newjf/lunzhuangb.png" />
<img class="yuanpan_renwu2" src="~/Content/Images/newjf/lunzhuanga.png" />
<img class="yuanpan_lijicj" src="~/Content/Images/newjf/lunzhuangzong.png" />
<div class="turntable_zhan_xz">
<img class="yuanpan" src="~/Content/Images/newjf/zhuangban.png" />
<canvas id="dial" width="1010" height="1010"></canvas>
<img class="yuanpan_zzhao" src="~/Content/Images/newjf/turnt_top.png" /> </div>
</div>

再是css


@font-face{
font-family: 'hyHei';
src: url('../font/hyliliangheij.ttf');
}

.turntable_zhan{
width:100%;
height:6.6rem;
position:relative;
margin-top:0.8rem;
}
.yuanpan{
position:absolute;
width:5.78rem;
height:5.78rem;
left:;
right:;
margin:auto;
z-index:;
}
.yuanpan_zj{
position:absolute;
width:2.68rem;
bottom:;
left:;
right:;
margin:auto;
z-index:;
}
.yuanpan_jinq{
position:absolute;
width:1.28rem;
bottom:-0.15rem;
left:1.79rem;
z-index:;
}
.yuanpan_jinq2{
position:absolute;
width:6.85rem;
top:-0.28rem;
left:;
right:;
margin:auto;
}
.yuanpan_renwu{
position:absolute;
width:1.36rem;
bottom:;
left:0.5rem;
z-index:;
}
.yuanpan_renwu2 {
position:absolute;
width:2.1rem;
bottom:;
right:0.54rem;
z-index:;
}
.yuanpan_lijicj{
width: 1.54rem;
position: absolute;
top: 2rem;
left:;
right:;
/* bottom: 0; */
margin: auto;
z-index:;
}
#dial{
position: absolute;
top: 0.34rem;
/* bottom: 0; */
right:;
left:;
margin: auto;
width: 5.07rem;
height: 5.07rem;
z-index:;
}
.yuanpan_zzhao{
position:absolute;
width:5.15rem;
height:5.15rem;
top:0.3rem;
right:;
left:;
z-index:;
margin:auto;
} .turn_commodity_items{
position:absolute;
z-index:;
font-family:hyHei;
font-size:0.24rem;
}
.turn_commodity_items p{
position:absolute;
color:#c5d048;
text-shadow: #fff 2px 0 0, #fff 0 2px 0, #fff -2px 0 0, #fff 0 -2px 0;
}
.turn_commodity0{
top: 1rem;
left: 3.5rem;
}
.turn_commodity0 p{
top: -0.36rem;
left: -0.2rem;
}
.turn_commodity0 img{
width:0.55rem;
}
.turn_commodity1 {
top: 1.5rem;
left: 4.4rem;
}
.turn_commodity1 img{
width:0.72rem;
}
.turn_commodity1 p {
top: -0.2rem;
right: -0.75rem;
width: 1.2rem;
transform: rotate(45deg);
}
.turn_commodity2 {
font-size: 0.33rem;
transform: rotate(90deg);
width: 0.7rem;
top: 2.7rem;
left: 5.3rem;
}
.turn_commodity3{
top: 3.5rem;
left: 4.4rem;
}
.turn_commodity3 p{
width: 1.2rem;
transform: rotate(135deg);
top: 0.7rem;
left: 0.2rem;
}
.turn_commodity3 img{
width:0.56rem;
}
.turn_commodity4{
top: 3.8rem;
left: 3.45rem;
}
.turn_commodity4 p{
width:1.2rem;
top:1rem;
left:-0.26rem;
transform: rotate(180deg);
}
.turn_commodity4 img{
width:0.55rem;
transform: rotate(180deg);
}
.turn_commodity5 {
top: 3.3rem;
left: 2.4rem;
}
.turn_commodity5 p{
width:1.2rem;
transform:rotate(-135deg);
top:0.8rem;
left:-0.8rem;
}
.turn_commodity5 img{
width:0.84rem;
}
.turn_commodity6 {
top: 2.7rem;
left: 2rem;
}
.turn_commodity6 img{
width:0.8rem;
}
.turn_commodity6 p{
left:-0.8rem;
transform:rotate(-90deg);
}
.turn_commodity7{
font-size: 0.33rem;
transform: rotate(-45deg);
width: 0.7rem;
top: 1.2rem;
left: 2rem;
} .turntable_zhan_xz{
position:inherit;
z-index:;
height: 5.78rem;
transition:all 3s ease;
}

样式地方我就不多说了。

 window.onload = function () {
//设置rem
let w = $('body').width();
$('html').css('font-size', w / 7.5 + 'px');
mycanvas(); //绘制表盘
clickRotate();
$('body').css('opacity', '1');
}
let commodityarr = [ //这是物品的数据展示区 使用的时候记得吧图片位置更改。
{ name: 'iPhone11', img: '/Content/Images/newjf/wupa2.png' },
{ name: '智能手表', img: '/Content/Images/newjf/wupa5.png' },
{ name: '再来 一次', img: '' },
{ name: '蓝牙耳机', img: '/Content/Images/newjf/wupa4.png' },
{ name: '红米Note7', img: '/Content/Images/newjf/wupa3.png' },
{ name: '畅轻酸奶', img: '/Content/Images/newjf/wupa6.png' },
{ name: '褐色炭烧', img: '/Content/Images/newjf/wupa1.png' },
{ name: '再接 再厉', img: '' },
];
var commodityarrname = ['iPhone11', '智能手表', '再来一次', '蓝牙耳机', '红米Note7', '畅轻酸奶', '褐色炭烧', '再接再厉', ];
//抽奖数据
function mycanvas() { //绘制表盘
var num = 8; // 奖品数量
var c = document.getElementById("dial");
var ctx = c.getContext("2d"); for (var i = 0; i < num; i++) {
// 保存当前状态
ctx.save();
// 开始一条新路径
ctx.beginPath();
// 位移到圆心,下面需要围绕圆心旋转
ctx.translate(505,505);
// 从(0, 0)坐标开始定义一条新的子路径
ctx.moveTo(0, 0);
// 旋转弧度,需将角度转换为弧度,使用 degrees * Math.PI/180 公式进行计算。
ctx.rotate((360 / num * i + 360 / num / 2) * Math.PI / 180);
// 绘制圆弧
ctx.arc(0, 0,495, 0, 2 * Math.PI / num, false);
if (i % 2 == 0) {
ctx.fillStyle = '#43b2ef';
} else {
ctx.fillStyle = '#e3f6ff';
}
// 填充扇形
ctx.fill();
// 绘制边框 // 恢复前一个状态
ctx.restore();
}
//追加物品;
for (let i = 0; i < commodityarr.length; i++) {
$('.turntable_zhan_xz').append(`<div class="turn_commodity_items turn_commodity${i}">
<p>${commodityarr[i].name}</p>
<img src="${commodityarr[i].img}" />
</div>`
);
}
} //点击旋转
function roter(s,a) { //s 度数 a 是中奖的下标 $('.turntable_zhan_xz').css({ transform: 'rotate(' + s + 'deg)' })
setTimeout(function () {
if(a != 7){
alert('恭喜你获得'+commodityarrname[a]);
} else {
alert('好可惜!没有中奖')
} },3200) }
//点击旋转
function clickRotate() {
     var cs = 8; //转盘个数     
var str = 0; //旋转的度数
var num = 0; //减去多余的度数
var des = 0; //随机的物品下标
$('.yuanpan_lijicj').click(function () {
des = Math.floor(Math.random() * 8)+1; //随机的物品
console.log(des);
switch (des) {
case 1:
num = str % 360;
str += 360 * 8 - num - (360/cs) * 0;
num = str % 360;
roter(str,0);
break;
case 2:
num = str % 360;
str += 360 * 8 - num - (360/cs) * 1;
num = str % 360;
roter(str,1)
break;
case 3:
num = str % 360;
str += 360 * 8 - num - (360/cs) * 2;
num = str % 360;
roter(str,2)
break;
case 4:
num = str % 360;
str += 360 * 8 - num - (360/cs) * 3;
num = str % 360;
roter(str,3)
break;
case 5:
num = str % 360;
str += 360 * 8 - num - (360/cs) * 4;
num = str % 360;
roter(str,4)
break;
case 6:
num = str % 360;
str += 360 * 8 - num - (360/cs) * 5;
num = str % 360;
roter(str,5)
break;
case 7:
num = str % 360;
str += 360 * 8 - num - (360/cs) * 6;
num = str % 360;
roter(str,6)
break;
case 8:
num = str % 360;
str += 360 * 8 - num - (360/cs) * 7;
num = str % 360;
roter(str,7)
break;
} }) }

这边没有写概率。控制概率控制控制这个就好

效果

jq转盘抽奖的更多相关文章

  1. 简单JS旋转实现转盘抽奖效果

    闲来没事,做了一个模拟转盘抽奖的HTML&JS的效果: 可以在设置的时候,选择几个区域,并且可以填写指针将要停止的区域 比如,我选择了"区域2",结果就是这样 具体可以见下 ...

  2. HTML5 Canvas绘制转盘抽奖

    新项目:完整的Canvas转盘抽奖代码 https://github.com/givebest/GB-canvas-turntable 演示 http://blog.givebest.cn/GB-ca ...

  3. javascript 转盘抽奖代码和计数器代码

    要介绍了javascript圆盘抽奖程序实现原理和完整代码例子,需要的朋友可以参考下  看到网页上有不少大转盘抽奖的应用,心血来潮也想弄个.于是找了点资料自己研究...  效果预览: 一.模拟抽奖的实 ...

  4. canvas转盘抽奖

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" ...

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

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

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

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

  7. web:转盘抽奖

    移动web:转盘抽奖(幸运大转盘)   为了获取客户.回馈客户,平台一般会推出抽奖活动类的营销页.因此web页面中,有各式各样的抽奖效果. 格子式(九宫格),背景滚动式(数字/文字/图案),旋转式(转 ...

  8. 移动web:转盘抽奖(幸运大转盘)

    为了获取客户.回馈客户,平台一般会推出抽奖活动类的营销页.因此web页面中,有各式各样的抽奖效果. 格子式(九宫格),背景滚动式(数字/文字/图案),旋转式(转盘),游戏式(砸蛋/拼图...).... ...

  9. jquery转盘抽奖的研究

    先看效果: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...

随机推荐

  1. linux网络编程-socket(36)

    进程是程序的一次动态执行的过程,进程是短暂的. 一个程序可以对应多个进程,可以打开多个记事本程序,存在多个进程. 线程是进程内部中的控制序列,一个进程至少有一个执行线路. 一个进程可以存在多个线程

  2. 入门大数据---Kylin是什么?

    一.Kylin是什么? Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark 上的SQL查询接口及多维度分析(OLAP)能力以支持超大规模的数据,最初由eBay开 ...

  3. Asp.net Core AOP实现(采用Autofac)

    引用正确的库来实现AOP 新的.NET Core是基于.NET Standard的..所以我们在引用库的时候特别要注意相关的兼容问题. 在传统的ASP.NET中,使用过Autofac来进行AOP操作的 ...

  4. 谈谈javaSE中的==和equals的联系与区别

    前言 ==和equals是我们面试中经常会碰到的问题.那么它们之间有什么联系和区别呢?今天我们就来聊聊吧! 问题 这里先抛出一些比较典型笔试问题: int x = 10; int y = 10; St ...

  5. (1)RabbitMQ简介与安装

    1.RabbitMQ简介 因为RabbitMQ是基于开源的AMQP协议来实现的,所以在了解MQ时候,首先我们来了解下AMQP协议.AMQP,即Advanced Message Queuing Prot ...

  6. ZooKeeper 数据模型:节点的特性与应用

    zk的基础知识基本分为三大模块 数据模型 ACL 权限控制 Watch 监控 数据模型 默认配置文件 # The number of milliseconds of each tick tickTim ...

  7. 使用Xmanager连接linux,操作“xhost +”时出现类似“xhost: unable to open display "192.168.1.1811:1.0" ”问题的解决

    远程连接linux服务器时,有的时候需要把服务器上的图形界面投影到本地来进一步操作,比如linux下安装oracle时就需要在oracle用户下允许视图状态投影到本地,这需要使用命令: xhost + ...

  8. 新技术新框架不断涌现,目前学习web前端开发都要掌握什么?

    web前端开发由网页制作演变而来,随着web2.0的发展,网页不再只是承载单一的文字和图片,各种丰富媒体让网页的内容更加生动,网页上软件化的交互形式为用户提供了更好的使用体验,这些都是基于前端技术实现 ...

  9. 11. RobotFramework内置库-Collections

    Collections库是RobotFramework用来处理列表和字典的库,详细可参见官方介绍. 官方地址:http://robotframework.org/robotframework/late ...

  10. 理解ASCII,Unicode和UTF-8关系

    前言:之前一直就好奇这个问题,但是一直没解决,今天我总算明白了,感谢大佬们的科普 转自:https://blog.csdn.net/Deft_MKJing/article/details/794604 ...