Heim  >  Artikel  >  WeChat-Applet  >  Implementierungscode für die WeChat-Applet-Countdown-Komponente

Implementierungscode für die WeChat-Applet-Countdown-Komponente

高洛峰
高洛峰Original
2017-02-23 15:15:492001Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zum Implementierungscode der Countdown-Komponente des WeChat-Applets vorgestellt. Freunde in Not können sich auf die

Funktion beziehen: Geeignet für zeitlich begrenzte Gruppenkäufe, Produkt-Flash-Verkäufe, usw. in E-Commerce-Anwendungen

Werfen wir zunächst einen Blick auf den endgültigen Effekt:

微信小程序 倒计时组件实现代码

Git-Quelle: http://git. oschina.net/dotton/CountDown

Punkte Schritte - Für ungeduldige Freunde können Sie sich direkt den letzten Codeabschnitt ansehen.

Text in die WXML-Datei einfügen

Sekunde: {{Sekunde}} Mikrosekunde:{{Mikrosekunde}}

Rufen Sie

function countdown(that) {
 var second = that.data.second
 if (second == 0) {
  // console.log("Time Out...");
  that.setData({
   second: "Time Out..."
  });
  return ;
 }
 var time = setTimeout(function(){
  that.setData({
   second: second - 1
  });
  countdown(that);
 }
 ,1000)
}

Page({
  data: {
    second: 3
  },
  onLoad: function() {
    countdown(this);
  }
});

in der js-Datei auf, um die Überprüfung auszuführen, gehen Sie von 10 auf 1 s und zeigen Sie dann die Zeit an.

Daher verbessern wir die Millisekunden weiter. Beachten Sie, dass die Schrittgröße von Millisekunden durch die Zeitfrequenz des Systems begrenzt ist, sodass wir auf 0,01 s genau sind, was 10 ms entspricht

js

/* 秒级倒计时 */
function countdown(that) {
 var second = that.data.second
 if (second == 0) {
  that.setData({
   second: "Time out!",
   micro_second: "micro_second too."
  });
  clearTimeout(micro_timer);
  return ;
 }
 var timer = setTimeout(function(){
  that.setData({
   second: second - 1
  });
  countdown(that);
 }
 ,1000)
}

/* 毫秒级倒计时 */
// 初始毫秒数,同时用作归零
var micro_second_init = 100;
// 当前毫秒数
var micro_second_current = micro_second_init;
// 毫秒计时器
var micro_timer;

function countdown4micro(that) {
 if (micro_second_current <= 0) {
  micro_second_current = micro_second_init;
 }
 micro_timer = setTimeout(function(){
  that.setData({
   micro_second: micro_second_current - 1
  });
  micro_second_current--;
  countdown4micro(that);
 }
 ,10)
}

Page({
  data: {
    second: 2,
    micro_second: micro_second_init
  },
  onLoad: function() {
    countdown(this);
    countdown4micro(this);
  }
});

wxml-Datei

<text style="display: block;">second: {{second}}s</text>

<text>{{micro_second}}</text>

Auf diese Weise, wenn die zweite -Level-Vorgang ist abgeschlossen, der Millisekunden-Level-Timer ist clearTimeout und zeigt den Text als „micro_second too“ an

und fügt eine countdown4micro-Methode hinzu, um den Countdown der verbleibenden 0:3:19 89 anzuzeigen

function dateformat(second) {
  var dateStr = "";
  var hr = Math.floor(second / 3600);
  var min = Math.floor((second - hr * 3600) / 60);
  var sec = (second - hr * 3600 - min * 60);// equal to => var sec = second % 60;
  dateStr = hr + ":" + min + ":" + sec;
  return dateStr;
}
目前有2个时钟,影响性能,合并下去掉countdown,于是countdown4micro变成以下的样子:

function countdown4micro(that) {

  var loop_second = Math.floor(loop_index / 100);
  // 得知经历了1s
  if (cost_micro_second != loop_second) {
    // 赋予新值
    cost_micro_second = loop_second;
    // 总秒数减1
    total_second--;

  }
   // 每隔一秒,显示值减1; 渲染倒计时时钟
  that.setData({
   clock:dateformat(total_second - 1)
  });

   if (total_second == 0) {
    that.setData({
     // micro_second: "",
     clock:"时间到"
    });
    clearTimeout(micro_timer);
    return ;
   }  

 if (micro_second_current <= 0) {
  micro_second_current = micro_second_init;
 }
 micro_timer = setTimeout(function(){
  that.setData({
   micro_second: micro_second_current - 1
  });
  micro_second_current--;
  // 放在最后++,不然时钟停止时还有10毫秒剩余
  loop_index ++;
  countdown4micro(that);
 }
 ,10)
}

Auf diese Weise werden Millisekunden und Stunden, Minuten und Sekunden zum Rendern getrennt ausgeführt. Das Programm wird dadurch wiederum besser lesbar. dateformat arbeitet mit Millisekunden und akzeptiert keine Sekunden. Gleichzeitig wird die Berechnung von 100 Berechnungen für 1 Sekunde gespeichert

/** 
 * 需要一个目标日期,初始化时,先得出到当前时间还有剩余多少秒
 * 1.将秒数换成格式化输出为XX天XX小时XX分钟XX秒 XX
 * 2.提供一个时钟,每10ms运行一次,渲染时钟,再总ms数自减10
 * 3.剩余的秒次为零时,return,给出tips提示说,已经截止
 */

// 定义一个总毫秒数,以一分钟为例。TODO,传入一个时间点,转换成总毫秒数
var total_micro_second = 2 * 1000;

/* 毫秒级倒计时 */
function countdown(that) {
   // 渲染倒计时时钟
   that.setData({
     clock:dateformat(total_micro_second)
   });

   if (total_micro_second <= 0) {
     that.setData({
       clock:"已经截止"
     });
     // timeout则跳出递归
     return ;
   }  
   setTimeout(function(){
    // 放在最后--
    total_micro_second -= 10;
    countdown(that);
  }
  ,10)
}

// 时间格式化输出,如3:25:19 86。每10ms都会调用一次
function dateformat(micro_second) {
   // 秒数
   var second = Math.floor(micro_second / 1000);
   // 小时位
   var hr = Math.floor(second / 3600);
   // 分钟位
   var min = Math.floor((second - hr * 3600) / 60);
   // 秒位
  var sec = (second - hr * 3600 - min * 60);// equal to => var sec = second % 60;
  // 毫秒位,保留2位
  var micro_sec = Math.floor((micro_second % 1000) / 10);
  return hr + ":" + min + ":" + sec + " " + micro_sec;
}

Page({
  data: {
    clock: ''
  },
  onLoad: function() {
    countdown(this);
  }
});

Nach der obigen Optimierung wird die Codemenge um die Hälfte reduziert. und die Betriebseffizienz ist ebenfalls hoch.

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, vielen Dank für Ihre Unterstützung dieser Website!

Weitere Artikel zum Implementierungscode der WeChat-Applet-Countdown-Komponente finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn