Javascript:是否可以在事件处理程序之外获取鼠标位置?

时间:2009-01-11 18:46:28

标签: javascript events mouse

我希望在超时回调中保持鼠标位置。

据我所知,这不能直接完成。一个解决方法可能是在document.body上设置onmousemove事件并保存此位置,稍后再获取。然而,这将是相当昂贵的,并不是最干净的方法。

3 个答案:

答案 0 :(得分:2)

我认为你必须和@Oli做同样的事情,但如果你使用的是jQuery,它会更容易。

http://docs.jquery.com/Tutorials:Mouse_Position

<script type="text/javascript">
jQuery(document).ready(function(){
  $().mousemove(function(e){
    $('#status').html(e.pageX +', '+ e.pageY);
  }); 
})
</script>

答案 1 :(得分:0)

直接答案是,但正如您所说,您可以将事件附加到所有内容并进行相应的轮询。在每个onmousemove实例上进行严格的编程都会花费很多,因此您可能会发现在页面周围创建多个区域并轮询onmouseover事件会更好。

另一种选择是(并且我不确定这是否有效)将重复超时设置为:

  1. 将onmousemove处理程序添加到body
  2. 移动整个页面(例如,更改正文的边距)
  3. 当onmousemove处理程序触发时,获取位置并删除处理程序。您可能还需要在此事件上超时(对于鼠标超出视口时)
  4. Uberhack但可能工作。

答案 2 :(得分:0)

如您所述,最直接的方法是在主体上设置onmousemove事件处理程序。它比你想象的要便宜:用于存储坐标的计算非常少,当鼠标移动时,事件每秒被触发50到100次。我怀疑一个典型的用户在查看网页时不会经常移动鼠标。

以下脚本有助于计算事件处理程序;在我的机器上,在Firefox中移动鼠标,这使我的CPU使用率增加了5%到10%。

<script type="text/javascript">
jQuery(document).ready(function(){
    var count = 0;
    $().mousemove(function(e){ count += 1; }); 
    $().click(function(e){ $('#status').html(count); });
}); 
</script>