2013-07-18 54 views
1

我该如何编码mouseenter事件来触发定时器关闭和mouseleave事件触发定时器Mouseenter和Mouseleave触发定时器打开/关闭

如果达到定时器间隔,则网页将刷新。

我试图做到这一点,但不能工作了:

<script> 
    $(document).ready(function() { 
     var timer; 
     function start() { 
      timer = setInterval(function(){refresh()}, 5000); 
     } 
     start(); 
     $('body').mouseenter(function() { 
      clearTimeout(timer); 
     }); 
    }).mouseleave(function(e) { 
     var pageX = e.pageX || e.clientX, 
      pageY = e.pageY || e.clientY; 

     if (pageX <= 0 || pageY <= 0) { 
      start(); 
     } 
     else 
      clearTimeout(timer); 
    }); 

    function refresh() { 
     window.location.reload(true); 
    }); 
</script> 

(此代码是部分从这里取:https://stackoverflow.com/a/17714300/2593839

+0

哦,上帝,你基本上重现了可怕的'元refresh'标签。 – adeneo

+0

不是真的,我基本上刷新了基于用户活动的全屏幕iFrame,更具体地说是一个mouseenter/mousleave事件。元刷新标签不适合我的特定需求。 – Yuvi100

回答

2

此代码应工作:

function refresh() { 
    window.location.reload(true); 
} 

var timer; 
function start() { 
    timer = setTimeout(function(){refresh()}, 5000); 
} 

jQuery(document).ready(function() { 
    start(); 

    jQuery('body').mouseenter(function() { 
    clearTimeout(timer); 
    }).mouseleave(function(e) { 
    var pageX = e.pageX || e.clientX, 
     pageY = e.pageY || e.clientY; 

     if(pageX <= 0 || pageY <= 0) { 
     start(); 
     }else { 
     clearTimeout(timer); 
     } 
    }); 
}); 
+0

作品非常感谢:) – Yuvi100

0

就拿

clearInterval(timer); 

不是

clearTimeout(timer); 
+0

那么,最好是将'setInterval()'调用改为使用'setTimeout()',因为该函数最多可以运行一次 –

+0

这样做也会奏效,对不起,我没有足够的信誉点投票! – Yuvi100

0

你可以做这样的事情:

var mytimeout; 
$('.box').on('mouseenter', function() { 
    if(mytimeout) { 
    clearTimeout(mytimeout); 
    } 

}).on('mouseleave', function() { 
    mytimeout = setInterval(function() { 
    console.log('tick'); 
    },1000);  
}); 

见琴:http://jsfiddle.net/uXrKG/

0

这应该为你工作。

var mytimeout, i; 
i = $('.box').text(); 

$('.box').on('mouseenter', function() { 
    if(mytimeout) { 

     clearInterval(mytimeout); 
    } 

}).on('mouseleave', function() { 
    mytimeout = setInterval(function() { 
     $('.box').text(i++); 
    },1000);  
}); 

DEMO

如果我们可以使用clearInterval不clearTimeout