2016-08-01 166 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