网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網(wǎng)

在小程序中做一個(gè)單擊長(zhǎng)按判斷

發(fā)布時(shí)間:2018-05-08 11:39 所屬欄目:小程序開發(fā)教程

事情的起源

在做項(xiàng)目的過程中,遇到這么一個(gè)需求:輕按按鈕,事件觸發(fā)一次,長(zhǎng)按按鈕,則事件需要不停的觸發(fā),微信沒有提供這個(gè)方法,需要開發(fā)者自身去完成。

 

邏輯分析

當(dāng)按鈕按下, 此時(shí)獲取得到按下的時(shí)間戳和一個(gè)按鈕的狀態(tài), 寫入this.data里面, 寫入成功后, 開啟一個(gè)遞歸函數(shù), 首先是得到當(dāng)前時(shí)間戳, 取出開始的時(shí)間戳, 二者做對(duì)比, 當(dāng)大于設(shè)定值如200毫秒, 則為長(zhǎng)按時(shí)間, 若小于, 則為單擊事件, 當(dāng)按鈕松開, 改變按鈕狀態(tài), 清除計(jì)時(shí)器.

 

代碼實(shí)現(xiàn)

 

				
  1. touchStart: function(e){
  2. let timeStart = this.getTime();
  3. let isTouch = true;
  4. this.setData({timeStart, isTouch}, this.getNum)
  5. }
  6.  
  7. touchEnd: function(){
  8. this.setData({ isTouch: false }, this.getNum)
  9. }
  10.  
  11. getNum: function(){
  12. let { timeStart, isTouch } = this.data;
  13. let timeNow = this.getTime();
  14. let timeNum = 200;
  15. let num = timeNow - timeStart;
  16. let touchType = num < timeNum ? '單擊': '長(zhǎng)按';
  17. if(isTouch){
  18. // fnc 執(zhí)行想要做的事
  19. this.timer = setTimeout(this.getNum, 100)
  20. }
  21. else{
  22. clearTimeout(this.timer)
  23. }
  24. }
  25.  
  26. getTime: function(){
  27. let time = new Date()
  28. return time.getTime()
  29. } //獲取當(dāng)前時(shí)間的毫秒數(shù)
 

微信小知識(shí)

this.setData為一個(gè)異步函數(shù), 如果有業(yè)務(wù)需要當(dāng)數(shù)據(jù)寫入成功后執(zhí)行的話,可以使用這個(gè)方法來執(zhí)行  this.setData({}, cb) cb 為回調(diào)函數(shù)

 

BUG修改

雖然按照以上情況能實(shí)現(xiàn)預(yù)期效果,但是還不夠完美,經(jīng)過實(shí)測(cè),當(dāng)快速點(diǎn)擊并松開(在100ms內(nèi)),想要執(zhí)行的函數(shù)并不會(huì)觸發(fā),為了能兼容這種情況,我做出了一點(diǎn)改變,添加了一個(gè)bindtap函數(shù),并在添加一個(gè)狀態(tài)來判斷是否觸發(fā)執(zhí)行函數(shù)

 

				
  1. //bindtap 函數(shù)
  2. tap: function(){
  3. let { isSend } = this.data
  4. if(!isSend){
  5. // fnc 執(zhí)行函數(shù)
  6. }
  7. }
  8.  
  9. //getNum 做適應(yīng)性改變
  10. getNum: function(){
  11. let { timeStart, isTouch, isSend } = this.data;
  12. let timeNow = this.getTime();
  13. let timeNum = 200;
  14. let num = timeNow - timeStart;
  15. let touchType = num < timeNum ? '單擊': '長(zhǎng)按';
  16. if(isTouch){
  17. // fnc 執(zhí)行想要做的事
  18. this.setData({isSend: true }) // 添加的代碼
  19. this.timer = setTimeout(this.getNum, 100)
  20. }
  21. else{
  22. clearTimeout(this.timer)
  23. this.setData({ isSend:false }) //添加的代碼
  24. }
  25. }
  26. //

因?yàn)樗接邢蓿荒芡ㄟ^這種方式來進(jìn)行修改,如果有更好的方法,歡迎提出意見和建議



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉(cāng)庫(kù):starfork
本文地址:http://www.xiuhaier.com/wxmini/doc/course/24331.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢
AI智能客服 ×