html5 命运之轮生产

码,如以下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>购买大厅</title>
<%@include file="../../include/include.jsp"%>
<%@include file="../../include/main.jsp"%>
<body style="background-color: #514f4f;overflow: hidden;">
<div class="nav" style="height:43px;line-height:43px;background-color: #CC0000;display:block;"><p>幸运大转盘</p>
 <span class="bank"><a href="javascript:window.history.go(-1);" class="hand">返回</a></span>
</div>
<div style="width: 100%;padding-top:50px;">
 <p style="margin:0px auto;line-height:20px;padding:5px 5px;width:95%;color: #747373;font-size:14px;background-color: #dedede;">游戏规则:每次转动消费10积分,中奖后系统记录,客服会与您第一时间取得联系!</p>
</div>
<div style="padding:5px 0px 0px 15px;">
   <p><span style="font-size:16px;color:#fff;position: relative;top:10px;">当前积分1000</span> <input id="spinBtn" type="button" onclick="spin();" value="開始抽奖" class="luckBtn" style="margin-top: 3px;"></p>
</div>
<div style="width: 100%;text-align: center;margin:0px auto;">
<canvas id="wheelcanvas" width="500" height="500"></canvas>
</div>
<script type="application/javascript">
var colors = ["#B8D430", "#3AB745", "#029990", "#3501CB",
              "#2E2C75", "#673A7E", "#CC0071", "#F80120",
              "#F35B20", "#FB9A00", "#FFCC00", "#FEF200"];
  var restaraunts = ["X2", "X4", "X5", "继续努力","双色球一注","5000元现金","iphone6一台","苹果笔记本一台"];

  var startAngle = 0;
  var arc = Math.PI / 4;
  var spinTimeout = null;

  var spinArcStart = 10;
  var spinTime = 0;
  var spinTimeTotal = 0;
  var winWidth=500;
  var ctx;
  function draw() {
    drawRouletteWheel();
  }
  var windowWidth=0;
	if((document.body) && (document.body.clientWinWidth)){
		windowWidth = document.body.clientWinWidth;
	}else if(window.innerWidth){
		windowWidth = window.innerWidth;
	}
  if(windowWidth!=0&&windowWidth<400){
		 $("#wheelcanvas").width(320);
		 $("#wheelcanvas").height(320);
	 }
  function drawRouletteWheel() {
    var canvas = document.getElementById("wheelcanvas");
    if (canvas.getContext) {
      var outsideRadius = winWidth*0.4;
      var textRadius = winWidth*160/500;
      var insideRadius = winWidth*125/500;

      ctx = canvas.getContext("2d");
      ctx.clearRect(0,0,winWidth,winWidth);

//       var pic = new Image();
//       pic.width=500;
//       pic.onload=function(){
//     	  ctx.drawImage(pic,0,0,500,500);
//       }
<%--       pic.src ="<%=basePath%>/resources/images/touch/pan.gif";      --%>

      ctx.strokeStyle = "#CFCFCF";
      ctx.lineWidth = 2;

      ctx.font = 'bold 16px sans-serif';
      ctx.fillStyle = "#fff";
      ctx.arc(winWidth/2, winWidth/2, outsideRadius+15,0,2*Math.PI,true);
      ctx.stroke();
      ctx.fill();
      ctx.save();
      for(var i = 0; i < 8; i++) {
        var angle = startAngle + i * arc;

        ctx.fillStyle = colors[i];
        ctx.beginPath();
        ctx.arc(winWidth/2, winWidth/2, outsideRadius, angle, angle + arc, false);
        ctx.arc(winWidth/2, winWidth/2, 10, angle + arc, angle, true);
        ctx.stroke();
        ctx.fill();
        ctx.save();
/*      ctx.shadowOffsetX = -1;
        ctx.shadowOffsetY = -1;
        ctx.shadowBlur    = 0;
        ctx.shadowColor   = "rgb(220,220,220)";*/
        ctx.fillStyle = "#FFF";
        ctx.translate(winWidth/2 + Math.cos(angle + arc / 2) * textRadius, winWidth/2 + Math.sin(angle + arc / 2) * textRadius);
        ctx.rotate(angle + arc / 2 + Math.PI / 2);
        var text = restaraunts[i];
        ctx.fillText(text, -ctx.measureText(text).width / 2, 0);
        ctx.restore();
      }
      //Arrow
      ctx.fillStyle = "white";
      ctx.beginPath();
      ctx.moveTo(winWidth/2 - 4, winWidth/2 - (outsideRadius + 5));
      ctx.lineTo(winWidth/2 + 4, winWidth/2 - (outsideRadius + 5));
      ctx.lineTo(winWidth/2 + 4, winWidth/2 - (outsideRadius - 5));
      ctx.lineTo(winWidth/2 + 9, winWidth/2 - (outsideRadius - 5));
      ctx.lineTo(winWidth/2 + 0, winWidth/2 - (outsideRadius - 23));
      ctx.lineTo(winWidth/2 - 9, winWidth/2 - (outsideRadius - 5));
      ctx.lineTo(winWidth/2 - 4, winWidth/2 - (outsideRadius - 5));
      ctx.lineTo(winWidth/2 - 4, winWidth/2 - (outsideRadius + 5));
      ctx.fill();
    }
  }
  function spin() {
	$("#spinBtn").attr("disabled","true");
    $("#spinBtn").css("background","grey");
    spinAngleStart = Math.random() * 10 + 30;
    spinTime = 0;
    spinTimeTotal = Math.random() * 4 + 5 * 1000;
    rotateWheel();
  }

  function rotateWheel() {
    spinTime += 20;
    if(spinTime >= spinTimeTotal) {
      stopRotateWheel();
      return;
    }
    var spinAngle = spinAngleStart - easeOut(spinTime, 0, spinAngleStart, spinTimeTotal);
    startAngle += (spinAngle * Math.PI / 180);
    drawRouletteWheel();
    spinTimeout = setTimeout('rotateWheel()', 20);
  }

  function stopRotateWheel() {
    clearTimeout(spinTimeout);
    var degrees = startAngle * 180 / Math.PI + 90;
    var arcd = arc * 180 / Math.PI;
    var index = Math.floor((360 - degrees % 360) / arcd);
    ctx.save();
    ctx.font = 'bold 30px sans-serif';
    var text = restaraunts[index]
    ctx.fillText(text, winWidth/2 - ctx.measureText(text).width / 2, winWidth/2 + 10);
    ctx.restore();
	$("#spinBtn").removeAttr("disabled");
	$("#spinBtn").css("background","#CC0000");
  }

  function easeOut(t, b, c, d) {
    var ts = (t/=d)*t;
    var tc = ts*t;
    return b+c*(tc + -3*ts + 3*t);
  }

  draw();
</script>
<body>
</html>

效果例如以下:

自己在网上找到一些样例,自己改了改。用html5的canvas实现的;

也有几种思路。就是用css的border 和圆角来做的,然后用css的rotate等函数来做

还有就是jquery插件控制图片来做的

还有就是用css为了控制图像做。

有兴趣的研究。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-08-01 09:51:09

html5 命运之轮生产的相关文章

Html5新增标签的学习。

随笔,记录的比较随便. 今天新学习了9个标签. <audio> 简单的说就是一个音频标签,他的主要常用属性有src=""音频的路径 controls="controls" 控制参数,他就是可以让其在页面显示一个播放器的效果autoplay="autoplay"自动播放属性 loop="loop"循环次数 <video>同audio标签一样.是一个视频标签.主要常用的属性同上面一样 <datalis

AppCan邹优镇:移动改变生产,构建企业核心竞争力

从云井喷年到大数据井喷年,企业已经行走在大数据的纪年里."大数据"仿佛是望远镜,可以预测未来.站在移动互联网风口的人们,将如何应对大数据所引起的商业变革? 通过移动应用和数据来连接用户.连接供应商.连接服务,这已经成为了这个时代独有的标记,而这一切正是移动互联网+数据背后的神秘力量形成的. 近日,"2015中国·江苏第二届大数据高峰论坛"在中国江苏召开,AppCan应邀参加了此次论坛.AppCan华东区总经理邹优镇先生作为演讲嘉宾分享了题为<移动改变生产,构建

html5新增及删除标签

一.新增标签 有一种划分为,功能性标签[html5新增,如canvas,旧浏览器没有]和语义性标签[如header等只是增强语义,没有新功能].下面按照分几个小类来说. 1.结构标签 新增的结构标签,之前都是用div实现的,为了语义化,html5从div派生出很多新的标签.这些新增的结构标签有助于将文档分成几个逻辑部分.如下: a.section标签 表示页面中的一个独立内容区块,里面有自己的大纲结构,比如章节,页眉,页脚或页面的其他部分.就是说section可以包含h1.h2...h6标签,表

HTML5:离线存储

最近由于找工作一直没时间也没有精力更新博客,找工作真是一件苦逼的事情啊...不抱怨了,我们来看看HTML5的新特性---离线存储吧. 随着Web App的发展,越来越多的移动端App使用HTML5的方式来开发,除了一些HybridApp以外,其他一部分Web App还是通过浏览器来访问的,通过浏览器访问就需要联网发送请求,这样就使得用户在离线的状态下无法使用App,同时Web App中一部分资源并不是经常改变,并不需要每次都向服务器发出请求,出于这些原因,HTML5提出的一个新的特性:离线存储.

nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞

第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Windows程序员的事实). 操作系统 API.操作系统发展到今日,几乎桌面应用的所有功能,都是基于系统API构建的.调用API和语言及技术无关,哪怕是使用汇编.例如(代码来源于网络,本地重新编译): ;我的第一个win32汇编程序 ;一个经典的hello world !程序 ;>>>>&

HTML5新标签的兼容性处理

HTML5新的语义标签尽管有很多的好处,但是在低版本的老IE浏览器中还是存在兼容性问题的,常常让人感到头疼,到底是大胆的使用新标签还是使用传统的大量的DIV无义标签?今天就简单的看看H5新标签的兼容性处理方式. 首先来看一小段简单的代码: HTML代码: <!DOCTYPE html> <html> <head lang="en">     <meta charset="UTF-8">     <title>

实现跨浏览器html5表单验证

div:nth-of-type(odd){ float: left; clear: left; } .origin-effect > div:nth-of-type(even){ float: right; clear: right; } .clearfix:after{ content: ""; display:block; clear: both; } .figcaption{ clear: both; color: #999; padding-top: 10px; text

网站源码 网站模板 扁平化后台管理 Bootstrap、HTML5、CSS3 Java

A.代码生成器(开发利器) 生成Java各层次的类和JSP等文件,提高开发效率 B.阿里巴巴数据库连接池Druid 性能最好的数据库连接池,稳定.可扩展.高性能.高并发 C.安全权限框架Shiro 实现认证.授权.加密.缓存.并发.会话管理.单点登录等功能 D.Ehcache二级缓存和Spring MVC静态加载缓存 E.微信接口开发 详尽的单元测试代码,详尽的开发文档,每个模块都有详尽说明和代码示例 F.提供基于JBPM工作流的OA办公系统(后续加入Activiti 5.18工作流) ----

吓哭原生App的HTML5离线存储技术,却出乎意料的容易!【低调转载】

吓哭原生App的HTML5离线存储技术,却出乎意料的容易![WeX5低调转载] 2015-11-16 lakb248 起步软件 近几天,WeX5小编编跟部分移动应用从业人士聊了聊,很多已经准备好全面拥抱HTML5.但WeX5小编编也发现,依然有相当一部分从业者,仍然对HTML5将信将疑,仍对原生App技术恋恋不舍.小编编特意转发分享下文,HTML5技术崛起,从离线存储技术是可见一斑的. (正文)随着Web App的发展,越来越多的移动端App使用HTML5的方式来开发,除了一些Hybrid Ap