手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效_jquery

HTML5 Canvas的幸运大奖盘特效

            现在好的微信微商或者微信公众号都有这种大转盘的项目,这里就整理一个,可以参考下。

这是一款基于jquery和HTML5 Canvas的幸运大奖盘特效。该幸运大奖品特效支持移动端,它通过动态构造Canvas元素来生成大奖盘,并通过jquery代码来随机获取奖品。

  使用方法

  HTML结构

  抽奖用的大转盘使用图片来制作,开始时它们被隐藏。整个抽奖大奖盘放置在一个容器中,控制容器的大小即可以控制奖盘的大小。

XML/HTML代码
<div class="container">
 <img src="images/1.png" id="shan-img" style="display:none;" />
 <img src="images/2.png" id="sorry-img" style="display:none;" />
 <div class="banner">
  <div class="turnplate" style="background-image:url(images/turnplate-bg.png);background-size:100% 100%;">
   <canvas class="item" id="wheelcanvas" width="422px" height="422px"></canvas>
   <img class="pointer" src="images/turnplate-pointer.png"/>
  </div>
 </div>
</div>

  CSS样式

  为大奖盘添加下面的CSS样式:

CSS代码

.banner{display:block;width:95%;margin-left:auto;margin-right:auto;margin-bottom: 20px;}
.banner .turnplate{display:block;width:100%;position:relative;}
.banner .turnplate canvas.item{width:100%;}
.banner .turnplate img.pointer{position:absolute;width:31.5%;height:42.5%;left:34.6%;top:23%;} 

  JavaScript

  整个大奖盘的jquery实现代码如下:

JavaScript代码

var turnplate={
  restaraunts:[],    //大转盘奖品名称
  colors:[],     //大转盘奖品区块对应背景颜色
  outsideRadius:192,   //大转盘外圆的半径
  textRadius:155,    //大转盘奖品位置距离圆心的距离
  insideRadius:68,   //大转盘内圆的半径
  startAngle:0,    //开始角度 

  bRotate:false    //false:停止;ture:旋转
}; 

$(document).ready(function(){
 //动态添加大转盘的奖品与奖品区域背景颜色
 turnplate.restaraunts = ["50M免费流量包", "10金币", "谢谢参与", "5金币", "10M免费流量包", "20M免费流量包", "20金币 ", "30M免费流量包", "100M免费流量包", "2金币"];
 turnplate.colors = ["#FFF4D6", "#FFFFFF", "#FFF4D6", "#FFFFFF","#FFF4D6", "#FFFFFF", "#FFF4D6", "#FFFFFF","#FFF4D6", "#FFFFFF"]; 

 var rotateTimeOut = function (){
  $('#wheelcanvas').rotate({
   angle:0,
   animateTo:2160,
   duration:8000,
   callback:function (){
    alert('网络超时,请检查您的网络设置!');
   }
  });
 }; 

 //旋转转盘 item:奖品位置; txt:提示语;
 var rotateFn = function (item, txt){
  var angles = item * (360 / turnplate.restaraunts.length) - (360 / (turnplate.restaraunts.length*2));
  if(angles<270){
   angles = 270 - angles;
  }else{
   angles = 360 - angles + 270;
  }
  $('#wheelcanvas').stopRotate();
  $('#wheelcanvas').rotate({
   angle:0,
   animateTo:angles+1800,
   duration:8000,
   callback:function (){
    alert(txt);
    turnplate.bRotate = !turnplate.bRotate;
   }
  });
 }; 

 $('.pointer').click(function (){
  if(turnplate.bRotate)return;
  turnplate.bRotate = !turnplate.bRotate;
  //获取随机数(奖品个数范围内)
  var item = rnd(1,turnplate.restaraunts.length);
  //奖品数量等于10,指针落在对应奖品区域的中心角度[252, 216, 180, 144, 108, 72, 36, 360, 324, 288]
  rotateFn(item, turnplate.restaraunts[item-1]);
 });
}); 

function rnd(n, m){
 var random = Math.floor(Math.random()*(m-n+1)+n);
 return random; 

} 

//页面所有元素加载完毕后执行drawRouletteWheel()方法对转盘进行渲染
window.onload=function(){
 drawRouletteWheel();
}; 

function drawRouletteWheel() {
 var canvas = document.getElementById("wheelcanvas");
 if (canvas.getContext) {
  //根据奖品个数计算圆周角度
  var arc = Math.PI / (turnplate.restaraunts.length/2);
  var ctx = canvas.getContext("2d");
  //在给定矩形内清空一个矩形
  ctx.clearRect(0,0,422,422);
  //strokeStyle 属性设置或返回用于笔触的颜色、渐变或模式
  ctx.strokeStyle = "#FFBE04";
  //font 属性设置或返回画布上文本内容的当前字体属性
  ctx.font = '16px Microsoft YaHei';
  for(var i = 0; i < turnplate.restaraunts.length; i++) {
   var angle = turnplate.startAngle + i * arc;
   ctx.fillStyle = turnplate.colors[i];
   ctx.beginPath();
   //arc(x,y,r,起始角,结束角,绘制方向) 方法创建弧/曲线(用于创建圆或部分圆)
   ctx.arc(211, 211, turnplate.outsideRadius, angle, angle + arc, false);
   ctx.arc(211, 211, turnplate.insideRadius, angle + arc, angle, true);
   ctx.stroke();
   ctx.fill();
   //锁画布(为了保存之前的画布状态)
   ctx.save();   

   //----绘制奖品开始----
   ctx.fillStyle = "#E5302F";
   var text = turnplate.restaraunts[i];
   var line_height = 17;
   //translate方法重新映射画布上的 (0,0) 位置
   ctx.translate(211 + Math.cos(angle + arc / 2) * turnplate.textRadius, 211 + Math.sin(angle + arc / 2) * turnplate.textRadius); 

   //rotate方法旋转当前的绘图
   ctx.rotate(angle + arc / 2 + Math.PI / 2); 

   /** 下面代码根据奖品类型、奖品名称长度渲染不同效果,如字体、颜色、图片效果。(具体根据实际情况改变) **/
   if(text.indexOf("M")>0){//流量包
    var texts = text.split("M");
    for(var j = 0; j<texts.length; j++){
     ctx.font = j == 0?'bold 20px Microsoft YaHei':'16px Microsoft YaHei';
     if(j == 0){
      ctx.fillText(texts[j]+"M", -ctx.measureText(texts[j]+"M").width / 2, j * line_height);
     }else{
      ctx.fillText(texts[j], -ctx.measureText(texts[j]).width / 2, j * line_height);
     }
    }
   }else if(text.indexOf("M") == -1 && text.length>6){//奖品名称长度超过一定范围
    text = text.substring(0,6)+"||"+text.substring(6);
    var texts = text.split("||");
    for(var j = 0; j<texts.length; j++){
     ctx.fillText(texts[j], -ctx.measureText(texts[j]).width / 2, j * line_height);
    }
   }else{
    //在画布上绘制填色的文本。文本的默认颜色是黑色
    //measureText()方法返回包含一个对象,该对象包含以像素计的指定字体宽度
    ctx.fillText(text, -ctx.measureText(text).width / 2, 0);
   } 

   //添加对应图标
   if(text.indexOf("金币")>0){
    var img= document.getElementById("shan-img");
    img.onload=function(){
     ctx.drawImage(img,-15,10);
    };
    ctx.drawImage(img,-15,10);
   }else if(text.indexOf("谢谢参与")>=0){
    var img= document.getElementById("sorry-img");
    img.onload=function(){
     ctx.drawImage(img,-15,10);
    };
    ctx.drawImage(img,-15,10);
   }
   //把当前画布返回(调整)到上一个save()状态之前
   ctx.restore();
   //----绘制奖品结束----
  }
 }
}

实现效果图:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jquery
, jquery和HTML5
幸运大奖盘
qq飞车幸运大奖赛、qq飞车幸运大奖赛在哪、cf幸运大抽奖、幸运抽大奖、幸运大奖,以便于您获取更多的相关知识。

时间: 2024-10-25 00:44:52

手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效_jquery的相关文章

html5 canvas全屏烟花动画特效

许多地方在春节.元宵等节日有放烟花的习俗,如果在网页上模拟烟花,以前也有一些javascript实现的效果,自从HTML5兴起之后,网页模拟烟花更加容易.逼真了. 效果展示:http://hovertree.com/texiao/html5/43/ 效果图: 代码如下: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta htt

jquery实现移动端点击图片查看大图特效_jquery

本文的需求很简单:点击图片查看大图,再点大图隐藏.多用于移动端,因为移动端屏幕小,可能需要查看大图. 具体实现代码 <!DOCTYPE html> <html> <meta charset="utf-8"/> <head runat="server"> <title>JQuery点击图片查看大图by starof</title> <style type="text/css&quo

jQuery实现带玻璃流光质感的手风琴特效_jquery

jQuery实现带玻璃流光质感的手风琴特效是一款基于jQuery+CSS3实现的带玻璃流光质感的手风琴特效,分享给大家,具体如下 效果图: 具体代码如下: html代码: <section class="strips"> <article class="strips__strip"> <div class="strip__content"> <h1 class="strip__title&quo

基于Jquery和html5的7款个性化地图插件_jquery

1.HTML5世界地图 划分世界区域并显示国家名 这是一款基于HTML5的世界地图应用,它的特点是可以将地图中的各个国家区域进行划分,鼠标滑过时即可显示该区域对应的国家名称,你也可以对弹出的标签进行自定义文字和自定义样式.   在线演示       源码下载 2.jQuery矢量SVG地图插件JVectorMap JVectorMap是一款基于jQuery的矢量地图插件,它是基于SVG结构的,和其他jQuery地图插件不同的是,jVectorMap是 矢量地图,但是它同样支持地图缩放和地图平面移

jQuery手动点击实现图片轮播特效_jquery

本文写了一个轮播图练练手,先写了一个手动点击轮播的轮播图,随后我会慢慢接着深入写自动轮播图和鼠标悬浮图片停止移动轮播图等. 下面来看看最终做的手动点击轮播效果:   一.原理说明 (1)首先是轮播图的架构,我采用了一个最外边的大div包住两个小div,一个小div里面放四张图片,另一个小div里面放四个数字按钮 (2)对最外边的大div设置的宽度为图片的宽度,超出大div宽度的都需要隐藏,但是对于盛放图片的小div设置宽度为2000px,大一点方便四张图左浮动布局 (3)当数字按钮点击时,获取按

jQuery实现Twitter的自动文字补齐特效_jquery

上图效果可以使用jQuery插件Typeahead.js来实现,这款jQuery插件来自于Twitter的一个新的项目,支持远程和本地的数据集.比较有特色的地方在于你可以将数据集使用本地存储(local storage)来保存在本地,有效的提高用户体验.同时也拥有很多远程数据集的处理选项,例如(请求频率,最大的并发请求数,等等). 主要特性 支持数据本地保存,客户端加载,优化加载速度 支持多语言,并且支持阿拉伯文 支持Hogan.js模板引擎整合 支持多数据集拼装 支持本地和远程的数据集 项目地

基于jQuery插件实现环形图标菜单旋转切换特效_jquery

feature.presenter.1.5.css body { margin: 0; font-family: Tahoma; } .feature-presenter { position: absolute; } .feature-presenter-icon { background-color: white; text-align: center; transition: transform 0.7s cubic-bezier(0.445, 0.05, 0.55, 0.95); -we

jQuery插件bgStretcher.js实现全屏背景特效_jquery

bgStretcher 2011 (Background Stretcher)是一个jQuery的插件,可以为你的网页添加多张背景图,且多个背景图能够自动切换,同时背景图大小可以自适应浏览器窗口的大小.背景图的切换效果有淡入淡出,滚动,幻灯,其中选用滚动和幻灯时,可以选择方向,上下左右,或者左上右下,右上左下.图片切换顺序也可以设置正向,反向或者随机.更多选项就看你自己慢慢研究了. bgStretcher是一个jQuery插件,它允许你添加一个大图像(或一组图像)到您的网页的背景,并会按比例调整

jQuery插件slides实现无缝轮播图特效_jquery

初始化插件: slides是一款基于jQuery无缝轮播图插件,支持图内元素动画,可以自定义动画类型 $(".slideInner").slide({ slideContainer: $('.slideInner a'), effect: 'easeOutCirc',//动画类型 autoRunTime: 5000,//自动轮播时间 slideSpeed: 1000,//速度 nav: true,//是否显示左右导航 autoRun: true,//是否自动滚动 prevBtn: $(