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

小程序模板網(wǎng)

在小程序中做一個單擊長按判斷

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

事情的起源

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

 

邏輯分析

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

 

代碼實現(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 ? '單擊': '長按';
  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. } //獲取當前時間的毫秒數(shù)
 

微信小知識

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

 

BUG修改

雖然按照以上情況能實現(xiàn)預期效果,但是還不夠完美,經(jīng)過實測,當快速點擊并松開(在100ms內),想要執(zhí)行的函數(shù)并不會觸發(fā),為了能兼容這種情況,我做出了一點改變,添加了一個bindtap函數(shù),并在添加一個狀態(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 做適應性改變
  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 ? '單擊': '長按';
  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ōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.xiuhaier.com/wxmini/doc/course/24331.html 復制鏈接 如需定制請聯(lián)系易優(yōu)客服咨詢:800182392 點擊咨詢
QQ在線咨詢
AI智能客服 ×