4

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

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

4

3 回答 3

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>
于 2009-01-11T19:09:26.833 回答
0

直接的答案是否定的,但正如您正确地说的那样,您可以将事件附加到所有内容并进行相应的轮询。对每个 onmousemove 实例进行认真的编程会很昂贵,因此您可能会发现在页面周围创建多个区域并轮询 onmouseover 事件会更好。

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

  1. 将 onmousemove 处理程序添加到正文
  2. 移动整个页面(例如更改正文的页边距顶部)
  3. 当 onmousemove 处理程序触发时,获取位置并删除处理程序。您可能也需要对此事件进行超时(当鼠标离开视口时)

Uberhack,但它可能会起作用。

于 2009-01-11T18:56:50.777 回答
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>
于 2009-01-11T20:05:37.533 回答