2017-02-23 87 views
3

我想使用webworker来检测我的空闲时间。如何在javascript/jquery中使用webworker来检测空闲时间?

我在写一些代码。我还需要添加什么才能让我的计数器在鼠标移动或按键上重新启动?

我是新来的编码。请帮忙。这里是我的代码:

<ul id="message-list"></ul> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
<script type="text/javascript"> 
    var worker = new Worker('demo.js'); 
    worker.onmessage = function(e){ 
    var message =e.data; 
    $('#message-list').append('<li>'+message+'</li>'); 
    } 
</script> 

这是我的主HTML文件和demo.js低于:

var idleTime = 0; 
var idleInterval = setInterval(timerIncrement, 1000); 
function timerIncrement() { 
idleTime = idleTime + 1; 
self.postMessage(idleTime); 
    if (idleTime == 15) { // 15 seconds 
     self.close(); 
    } 
} 

在这段代码回路将15秒运行,那么工人将终止。我想要的是,如果我移动鼠标或按下键盘上的任何键,此循环将再次从0开始。

$(document).keypress(function(e){ 

       worker.postMessage({ 
       type: 'KEYPRESS', 
       keycode: e.which 
      }); 
    }); 

而在你woker听:

+0

是否有任何特定的原因,你决定使用这个工人?这似乎是在主线程中运行得很好的东西? – adeneo

+0

@adeneo还有一些其他的东西,我将添加在这个demo.js,我想如果有一种方法,我可以在工作人员内使用这个js – Frank

+0

@adeneo我从来没有使用过工人,因此我想问我们可以有多个postmessage和onmessage ...就像一个postmessage发送一些不同的对象,另一个postmessage发送不同的对象,通过主页中的onmessage读取? – Frank

回答

1

由于网络工作者没有访问DOM,你可以从你的主线程当一个键按下时或鼠标移动发布消息你的工人消息:

self.onmessage = function(msg) { 
    switch (msg.data.type) { 
    case 'KEYPRESS': 
    console.log("Key pressed"); 
    idleTime = 0; 
    break; 
    }}