我想在超时回调中获得鼠标位置。Javascript:是否可以在事件处理程序之外获得鼠标位置?
据我所知,这不能直接完成。一个解决方法可能是在document.body上设置一个onmousemove事件,并保存这个位置,稍后提取。然而,这将是相当昂贵的,并不是最干净的方法。
我想在超时回调中获得鼠标位置。Javascript:是否可以在事件处理程序之外获得鼠标位置?
据我所知,这不能直接完成。一个解决方法可能是在document.body上设置一个onmousemove事件,并保存这个位置,稍后提取。然而,这将是相当昂贵的,并不是最干净的方法。
我认为你必须做同样的事情@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>
直接的答案是否但正如您所说的,您可以将事件附加到所有事项并相应地进行轮询。它将昂贵的做每个onmousemove实例严肃的编程,所以你可能会发现围绕页面创建几个区域和轮询onmouseover事件更好。
另一种选择将是(我不知道这是否在所有工作)设定循环超时:
Uberhack但威力工作。
有趣的想法。 – enobrev 2009-01-11 19:48:24
正如你所描述的,最直接的方式做到这一点是设置在身体上的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>
加载任务管理器并在移动鼠标时查看CPU图形。使用Linux上的Firefox3时,它快速移动时几乎会消耗整个CPU。基于时间的民意调查(仍然使用大部分代码)会表现得更好。 – Oli 2009-01-12 10:21:35