2016-08-01 165 views
0

我在我的應用程序創建空閒計時器,我想每次點擊,滾動復位定時器等。這似乎是一句廢話來調用每一個onPress事件我resetTimer()功能。在網上,我會做的事件偵聽器,如:$(document).mousemove()$(document).mousedown()$(document).scroll()陣營本地監聽所有事件

任何建議上有一些頂級的事件偵聽器可以調用resetTimer()上的任何觸摸事件作出反應本土?

回答

3

調查矩形的本地代碼,我發現fbjs包含TouchEventUtils(Facebook的使用在他們本地的反應測試),它允許經過一天的使用不同的觸摸事件狀態的功能(onTouchMove(event)onTouchStart(event)onTouchEnd(event))。

所以我做了什麼:

npm install fbjs --save 

,只需添加onTouchStart到到wrapps我的路我的頂級根組件,因此,我爲我使用它在所有屏幕的所有畫面覆蓋/視圖包裝。

所以我的代碼看起來是這樣的:

/* rest of my imports */ 
import TouchEventUtils from 'fbjs/lib/TouchEventUtils'; 

class Root extends Component { 

    onTouchStart(){ 
     //my code to properly reset session timer 
    } 

    render() { 
     return (
      <View 
       onTouchStart={this.onTouchStart} 
      > 
       {/*My routes*/} 
      </View> 
     ) 
    } 
} 

並且那是,那是對accesing頂級事件偵聽器,並做一些對每一個事件的解決方案。我沒有深入挖掘(因爲這對我的情況來說已經足夠了),所以我不確定它得到的是什麼對象,以及它是否有助於確定任何其他屬性(即記錄被單擊的元素)。

+0

謝謝!這正是我需要的屏幕保護功能。 – pmont

+1

請注意,導入TouchEventUtils不是必需的。 onTouchStart是View組件的內置支持道具。 – pmont

+0

你是我的救星! – Bigdragon

1

我不認爲這是一個官方的API爲這一點。

由於調查我們如何使用Cycle.js with React Native的一部分,我們做了實驗猴修補由BatchedBridge模塊定義的__fbBatchedBridge全球監聽來自本地側進入全球所有的事件。

這是不適合我們,因爲所有我們得到的是原始的觸摸事件,這是不可能的篩選不同種類的事件類型。但是,如果您確實需要知道何時發生觸摸事件,那麼該解決方案可能適用於您。

它將,當然,是脆,哈克:)

+0

很高興再次見到你(我們見過@ Cycle.js的conf)! :)好的建議,就像你說的那樣有點拙劣,但我認爲這足夠我需要。 :) –

+0

哈哈這很有趣,正是在CycleConf,我首先開發了這個黑客。雖然沒有認出你的名字,但只是一個純粹的巧合:) – jevakallio