当前位置:Gxlcms > html代码 > HTML5canvas实现中奖转盘的实例代码

HTML5canvas实现中奖转盘的实例代码

时间:2021-07-01 10:21:17 帮助过:52人阅读

本篇文章给大家带来的内容是关于HTML5 canvas实现中奖转盘的实例代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

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

1565300737-5b682bdbd48ac_articlex.png

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

html

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

css

  1. <style>
  2. #canvas{
  3. position: absolute;
  4. left: 230px;
  5. top: 230px;
  6. }
  7. #img{
  8. width: 600px;
  9. height: 600px;
  10. }
  11. </style>

js

  1. var canvas = document.getElementById('canvas');
  2. var context = canvas.getContext('2d');
  3. //设定画布和宽
  4. canvas.width=140;
  5. canvas.height=140;
  6. var then = Date.now();
  7. var now;//利用时间差来控制转盘最小转动时间
  8. var first_deg=0;//用来记录转动的角度
  9. var rotate_deg=0;//每次转动的角度,用来实现变速运动
  10. var end_deg =85;//中奖角度
  11. var speedUp = true;//判断是否在加速阶段
  12. var f;
  13. // 因为canvas的rotate函数是根据左上角坐标(0,0)来旋转的,所以移动画布
  14. context.translate(70,70);
  15. function draw(){
  16. context.clearRect(-70, -70, 70, 70);
  17. context.beginPath();
  18. context.arc(0, 0, 50, Math.PI / 180 * 0, Math.PI / 180 * 360, true);
  19. context.moveTo(-50,0);
  20. context.lineTo(50,0);
  21. context.lineTo(0,-70);
  22. context.rotate(rotate_deg*Math.PI/180);
  23. context.closePath();
  24. context.fillStyle='red';
  25. context.fill();
  26. }
  27. // 将运动分为3段,加速,匀速,减速
  28. function loop(){
  29. //循环调用,产生动画效果
  30. f = window.requestAnimationFrame(loop);
  31. now = Date.now();
  32. //开始加速转动,转到速度为20就不加速了,至于为什么是20,看起来舒服而已
  33. if(rotate_deg<=20&&speedUp){
  34. rotate_deg +=1;
  35. };
  36. //2s后开始减速(即最小转动时间),减速是为了视觉上的美观
  37. if(now - then > 2000){
  38. //如果下面设置的是固定角度,那这里的最小速度建议为1,因为每次转动角度过大,一圈很可能错过中奖的角度,导致转很多圈。
  39. if(rotate_deg>=2){
  40. speedUp = false;
  41. rotate_deg -=1;
  42. }
  43. //设置中奖区间为+-5度(设置固定角度会让动画有点难看)
  44. if(first_deg%360>=end_deg-5&&first_deg%360<=end_deg+5){
  45. window.cancelAnimationFrame(f);//停止循环
  46. //中奖操作
  47. }
  48. };
  49. first_deg += rotate_deg;//记录转过的角度
  50. draw();//绘制图形
  51. }
  52. loop();

最后

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

相关文章推荐:

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

HTML5实现魔方游戏的代码

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

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

人气教程排行