Maison  >  Article  >  Applet WeChat  >  L'applet WeChat implémente le partage d'exemples de barre de progression circulaire

L'applet WeChat implémente le partage d'exemples de barre de progression circulaire

小云云
小云云original
2018-02-09 14:39:056334parcourir

Cet article partage principalement avec vous un exemple d'implémentation d'une barre de progression circulaire dans une applet WeChat. J'espère que cela pourra vous aider.

Utiliser le compte à rebours circulaire dans l'applet, rendu :
L'applet WeChat implémente le partage d'exemples de barre de progression circulaire

Idées

  1. Utiliser 2 Il y a deux toiles, l'une est l'anneau de fond et l'autre est l'anneau de couleur.

  2. Utilisez setInterval pour dessiner les anneaux colorés étape par étape.

Solution

La première étape consiste à écrire la structure

Une boîte enveloppe 2 toiles et zones de texte
La boîte utilise un positionnement relatif ; en tant que parent, mise en page flexible, définie au centre ;
Un canevas, utilise le positionnement absolu comme arrière-plan, canvas-id="canvasProgressbg"
Un autre canevas, utilise le positionnement relatif comme barre de progression, canvas-id="canvasProgress "
Le code est le suivant :

// wxml
 <view class="container">
     <view class=&#39;progress_box&#39;>
        <canvas class="progress_bg"   canvas-id="canvasProgressbg">  </canvas> 
        <canvas class="progress_canvas"   canvas-id="canvasProgress">  </canvas> 
        <view class="progress_text">
            <view class="progress_dot"></view> 
            <text class=&#39;progress_info&#39;> {{progress_txt}}</text>
        </view>     
    </view>
</view>
// wxss
.progress_box{
  position: relative;
  width:220px;
  height: 220px;  
// 这里的宽高是必须大于等于canvas圆环的直径 否则绘制到盒子外面就看不见了
// 一开始设置 width:440rpx; height:440rpx; 发现 在360X640分辨率的设备,下绘制的圆环跑盒子外去了
// 小程序使用rpx单位适配 ,但是canvas绘制的是px单位的。所以只能用px单位绘制的圆环在盒子内显示
  display: flex;  
  align-items: center;
  justify-content: center;
  background-color: #eee;
}
.progress_bg{
  position: absolute;
    width:220px;
  height: 220px; 
}
.progress_canvas{ 
  width:220px;
  height: 220px; 
} 
.progress_text{ 
  position: absolute; 
  display: flex;  
  align-items: center;
  justify-content: center
}
.progress_info{   
  font-size: 36rpx;
  padding-left: 16rpx;
  letter-spacing: 2rpx
} 
.progress_dot{
  width:16rpx;
  height: 16rpx;  
  border-radius: 50%;
  background-color: #fb9126;
}

La deuxième étape de la liaison des données

Comme vous pouvez le voir sur wxml, nous utilisons un data progress_txt, donc définissez le données en js comme suit :

 data: {
    progress_txt: '正在匹配中...',  
  },

La troisième étape du dessin sur toile

敲黑板,划重点

1. Dessinez d'abord l'arrière-plan

  1. Encapsulez-le dans js Une fonction drawProgressbg qui dessine un cercle, canvas dessine un cercle

  2. Exécutez cette fonction dans onReady ; Le composant canevas du mini programme et le canevas de H5 Il y a une légère différence, veuillez vérifier le document Le code est le suivant

  3. L'effet est le suivant :

<.>

drawProgressbg: function(){
    // 使用 wx.createContext 获取绘图上下文 context
    var ctx = wx.createCanvasContext('canvasProgressbg')
    ctx.setLineWidth(4);// 设置圆环的宽度
    ctx.setStrokeStyle('#20183b'); // 设置圆环的颜色
    ctx.setLineCap('round') // 设置圆环端点的形状
    ctx.beginPath();//开始一个新的路径
    ctx.arc(110, 110, 100, 0, 2 * Math.PI, false);
    //设置一个原点(100,100),半径为90的圆的路径到当前路径
    ctx.stroke();//对当前路径进行描边
    ctx.draw();
  },
 onReady: function () {
    this.drawProgressbg(); 
  },

2. Dessinez un anneau coloré
L'applet WeChat implémente le partage d'exemples de barre de progression circulaireEncapsulez une fonction drawCircle pour dessiner un cercle en js,

    Exécutez cette fonction dans onReady ;
  1. this.drawCircle(0.5) L'effet est le suivant : this.drawCircle(1) L'effet est le suivant : this.drawCircle(2) a l'effet suivant :
  2. L'applet WeChat implémente le partage d'exemples de barre de progression circulaire

  3. L'applet WeChat implémente le partage d'exemples de barre de progression circulaire
      drawCircle: function (step){  
        var context = wx.createCanvasContext('canvasProgress');
          // 设置渐变
          var gradient = context.createLinearGradient(200, 100, 100, 200);
          gradient.addColorStop("0", "#2661DD");
          gradient.addColorStop("0.5", "#40ED94");
          gradient.addColorStop("1.0", "#5956CC");
          
          context.setLineWidth(10);
          context.setStrokeStyle(gradient);
          context.setLineCap('round')
          context.beginPath(); 
          // 参数step 为绘制的圆环周长,从0到2为一周 。 -Math.PI / 2 将起始角设在12点钟位置 ,结束角 通过改变 step 的值确定
          context.arc(110, 110, 100, -Math.PI / 2, step * Math.PI - Math.PI / 2, false);
          context.stroke(); 
          context.draw() 
      },
     onReady: function () {
         this.drawProgressbg(); 
         this.drawCircle(2) 
      },
    this.drawCircle(0.5) 效果如下: this.drawCircle(1) 效果如下: this.drawCircle(2) 效果如下:
    L'applet WeChat implémente le partage d'exemples de barre de progression circulaire L'applet WeChat implémente le partage d'exemples de barre de progression circulaire L'applet WeChat implémente le partage d'exemples de barre de progression circulaire
    3. Définir une minuterie

    1. Définir un compteur dans les données en js count, une étape, une minuterie

    2. encapsule une fonction de minuterie countInterval dans js,

    3. exécute cette fonction dans onReady ;

      data: {
        progress_txt: '正在匹配中...',  
        count:0, // 设置 计数器 初始为0
        countTimer: null // 设置 定时器 初始为null
      },
        countInterval: function () {
        // 设置倒计时 定时器 每100毫秒执行一次,计数器count+1 ,耗时6秒绘一圈
        this.countTimer = setInterval(() => {
          if (this.data.count <= 60) {
            /* 绘制彩色圆环进度条  
            注意此处 传参 step 取值范围是0到2,
            所以 计数器 最大值 60 对应 2 做处理,计数器count=60的时候step=2
            */
             this.drawCircle(this.data.count / (60/2))
            this.data.count++;
          } else {
            this.setData({
              progress_txt: "匹配成功"
            }); 
            clearInterval(this.countTimer);
          }
        }, 100)
      },
     onReady: function () {
        this.drawProgressbg();
        // this.drawCircle(2) 
        this.countInterval()
      },
    Effet final


    L'applet WeChat implémente le partage d'exemples de barre de progression circulaire

    Recommandations associées :

    Explication avec des exemples Canvas réalise une animation de barre de progression circulaire

    Introduction à la méthode de réalisation d'une barre de progression circulaire dans l'applet WeChat

    Tutoriels d'introduction de base recommandés pour la barre de progression circulaire



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