The content of this article is about the example code of HTML5 canvas to implement the winning carousel. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
Recently I am learning to do animation with canvas, so I wrote a turntable to practice.
The last simple result picture (the middle one is the rotating pointer, the outer circle is the picture, I am too lazy to write it hahaha)
The code is very simple, it’s all commented, just go to the code, 嘤嘤嘤
<canvas>您的浏览器不支持canvas</canvas> <img alt="HTML5 canvas implements the example code of the winning carousel" >
<style> #canvas{ position: absolute; left: 230px; top: 230px; } #img{ width: 600px; height: 600px; } </style>
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 2000){ //如果下面设置的是固定角度,那这里的最小速度建议为1,因为每次转动角度过大,一圈很可能错过中奖的角度,导致转很多圈。 if(rotate_deg>=2){ speedUp = false; rotate_deg -=1; } //设置中奖区间为+-5度(设置固定角度会让动画有点难看) if(first_deg%360>=end_deg-5&&first_deg%360<p><strong>Finally </strong></p><p>The problem with this relatively large turntable is that if the winning interval is relatively small, it will take a longer time to rotate after deceleration, and it will take a long time to rotate at the lowest speed before stopping. When the interval is large, it stops all of a sudden, the deceleration effect is not obvious, and it looks strange visually. </p><p> Recommended related articles: </p><p><a href="//m.sbmmt.com/html5-tutorial-407703.html" target="_blank" title="html5 canvas用来绘制弧形的代码实现">html5 canvas is used to draw the arc code implementation</a></p><p class="post-topheader custom- pt0"><a href="//m.sbmmt.com/html5-tutorial-407589.html" target="_blank" title="HTML5实现魔方游戏的代码">HTML5 code to implement the Rubik's Cube game</a> </p><p class="mb20"><a href="//m.sbmmt.com/html5-tutorial-407331.html" target="_blank" title="HTML5结合互联网+ 实现的3D隧道(附代码)">HTML5 combined with the Internet to realize 3D tunnel (with code)</a></p>
The above is the detailed content of HTML5 canvas implements the example code of the winning carousel. For more information, please follow other related articles on the PHP Chinese website!