• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > HTML5 canvas实现中奖转盘的实例代码

HTML5 canvas实现中奖转盘的实例代码

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含css,html,html5,javascript等相关知识,匿名希望在学习及工作中可以帮助到您
本篇文章给大家带来的内容是关于HTML5 canvas实现中奖转盘的实例代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

最近在学canvas做动画,于是就写个转盘练下手。
上个简陋的成果图(中间那个是转的指针,外面的圈是图片,懒得写了哈哈哈)

1565300737-5b682bdbd48ac_articlex.png

代码很简单,都注释了,直接上代码吧,嘤嘤嘤

html

<body>
  <canvas id="canvas">您的浏览器不支持canvas</canvas>
  <img src="./zp.jpg" alt="" id="img">
</body>

css

<style>
    #canvas{
      position: absolute;
      left: 230px;
      top: 230px;
    }
    #img{
      width: 600px;
      height: 600px;
    }
  </style>

js

  var canvas = document.getElementById('canvas');
  var context = canvas.getContext('2d');
  //设定画布和宽
  canvas.width=140;
  canvas.height=140;
  var then = Date.now();
  var now;//利用时间差来控制转盘最小转动时间
  var first_deg=0;//用来记录转动的角度
  var rotate_deg=0;//每次转动的角度,用来实现变速运动
  var end_deg =85;//中奖角度
  var speedUp = true;//判断是否在加速阶段
  var f;

  // 因为canvas的rotate函数是根据左上角坐标(0,0)来旋转的,所以移动画布
  context.translate(70,70);
  function draw(){
    context.clearRect(-70, -70, 70, 70);
    context.beginPath();
    context.arc(0, 0, 50, Math.PI / 180 * 0, Math.PI / 180 * 360, true);
    context.moveTo(-50,0);
    context.lineTo(50,0);
    context.lineTo(0,-70);
    context.rotate(rotate_deg*Math.PI/180);
    context.closePath();
    context.fillStyle='red';
    context.fill();    
  }
// 将运动分为3段,加速,匀速,减速
  function loop(){

    //循环调用,产生动画效果
    f = window.requestAnimationFrame(loop);
    now = Date.now();

    //开始加速转动,转到速度为20就不加速了,至于为什么是20,看起来舒服而已
    if(rotate_deg<=20&&speedUp){
      rotate_deg +=1;
    };

    //2s后开始减速(即最小转动时间),减速是为了视觉上的美观
    if(now - then > 2000){

      //如果下面设置的是固定角度,那这里的最小速度建议为1,因为每次转动角度过大,一圈很可能错过中奖的角度,导致转很多圈。
      if(rotate_deg>=2){
        speedUp = false;
        rotate_deg -=1;
      }
      //设置中奖区间为+-5度(设置固定角度会让动画有点难看)
      if(first_deg%360>=end_deg-5&&first_deg%360<=end_deg+5){
        window.cancelAnimationFrame(f);//停止循环
        //中奖操作
      }
    };
    first_deg += rotate_deg;//记录转过的角度
    draw();//绘制图形
  }
  loop();

最后

现在这个转盘比较大的问题就是,如果中奖区间比较小,那减速后转动的时间就长一些,最低速度转很久才停下。当区间大的时候一下子就停下了,减速效果不明显,视觉上看起来很奇怪。

相关文章推荐:

html5 canvas用来绘制弧形的代码实现

HTML5实现魔方游戏的代码

HTML5结合互联网+ 实现的3D隧道(附代码)

以上就是HTML5 canvas实现中奖转盘的实例代码的详细内容,更多请关注微课江湖其它相关文章!

您可能想查找下面的文章:

  • 纯HTML5+CSS3制作生日蛋糕(代码易懂)
  • 浅谈html5标签css3的常用样式
  • HTML5+CSS3实现机器猫
  • CSS3 画基本图形,圆形、椭圆形、三角形等
  • 浅谈HTML5 & CSS3的新交互特性
  • HTML5和CSS3实例教程总结(推荐)
  • 使用HTML5里的classList操作CSS类
  • 关于老式浏览器兼容HTML5和CSS3的问题
  • HTML5移动端开发中的Viewport标签及相关CSS用法解析
  • html5+css3进度条倒计时动画特效代码【推荐】

相关文章

  • 2018-12-03HTML5的互动股票图形数据HumbleFinance
  • 2018-12-03Html5、CSS实现文字阴影效果实例分享
  • 2018-12-03Windows 8的出现是不是意味着,客户端用前端脚本语言,逻辑和后面的服务用C#,所以C++这种就会 慢慢消失在一般的开发过程中?
  • 2018-12-03nodejs的爬虫框架superagent
  • 2018-12-03html5转义实体字符的使用详解
  • 2018-12-03Html5 Canvas初探学习笔记(1)-画一个矩形
  • 2018-12-0316个最佳响应式HTML5框架分享
  • 2018-12-03如何在 PC 机上测试移动端的网页?
  • 2018-12-03html5是什么意思
  • 2018-12-03HTML5 SVG响应式路径过渡动画幻灯片特效

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • HTML5高级编程之图形扭曲及其应用三(扩展篇)
    • 知名网站的移动前端自适应解决方案和比较
    • Zip压缩和解压技术在HTML5中的应用的代码案例(图)
    • HTML5 Canvas 填充与描边(Fill And Stroke) 实现的实例代码
    • HTML5 高级教程之web Storage
    • opengl/webgl 可以部分重绘吗?
    • HTML5 Canvas 起步(2) - 路径
    • h5的新增标签和废弃标签
    • HTML5 canvas绘图基本详解
    • HTML5事件方法全部汇总_html5教程技巧

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有