Maison  >  Article  >  interface Web  >  Le canevas HTML5 implémente l'exemple de code du carrousel gagnant

Le canevas HTML5 implémente l'exemple de code du carrousel gagnant

不言
不言original
2018-08-07 14:55:382807parcourir

Le contenu de cet article concerne l'exemple de code du canevas HTML5 pour implémenter le carrousel gagnant. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Récemment, j'apprends à faire de l'animation avec de la toile, j'ai donc écrit une platine pour m'entraîner.
La dernière image du résultat simple (celle du milieu est le pointeur rotatif, le cercle extérieur est l'image, je suis trop paresseux pour l'écrire hahaha)

Le canevas HTML5 implémente lexemple de code du carrousel gagnant

Le code est très simple, tout commenté, il suffit d'aller dans le code,

html

  <canvas>您的浏览器不支持canvas</canvas>
  <img  alt="Le canevas HTML5 implémente l'exemple de code du carrousel gagnant" >

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 2000){

      //如果下面设置的是固定角度,那这里的最小速度建议为1,因为每次转动角度过大,一圈很可能错过中奖的角度,导致转很多圈。
      if(rotate_deg>=2){
        speedUp = false;
        rotate_deg -=1;
      }
      //设置中奖区间为+-5度(设置固定角度会让动画有点难看)
      if(first_deg%360>=end_deg-5&&first_deg%360<p><strong>Enfin</strong></p><p>Le problème avec la roue plus grande maintenant est que si la plage gagnante est plus petite, il faudra plus de temps pour tourner après la décélération, et cela prendra beaucoup de temps tourner à la vitesse la plus basse avant de s'arrêter. Lorsque l'intervalle est grand, il s'arrête d'un coup, l'effet de décélération n'est pas évident et cela semble étrange visuellement. </p><p> Articles connexes recommandés : </p><p><a href="http://www.php.cn/html5-tutorial-407703.html" target="_blank" title="html5 canvas用来绘制弧形的代码实现">Implémentation du code HTML5 pour dessiner des arcs</a></p><p class="post-topheader custom- pt0"><a href="http://www.php.cn/html5-tutorial-407589.html" target="_blank" title="HTML5实现魔方游戏的代码">Implémentation du code HTML5 pour le jeu Rubik's Cube</a> </p><p class="mb20"><a href="http://www.php.cn/html5-tutorial-407331.html" target="_blank" title="HTML5结合互联网+ 实现的3D隧道(附代码)">HTML5 combiné avec Internet+ pour réaliser un tunnel 3D (avec code) </a></p>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn