是否有可能获得鼠标位置与JavaScript页面加载后,没有任何鼠标移动事件(不移动鼠标)?
当前回答
我实现了一个水平/垂直搜索,(首先让一个div充满垂直排列的竖线链接,然后让一个div充满水平排列的竖线链接,然后简单地看看哪个有悬停状态),就像Tim Down上面的想法,它工作得相当快。遗憾的是,不工作在Chrome 32上的KDE。
jsfiddle.net/5XzeE/4/
其他回答
您不必移动鼠标来获得光标的位置。除了鼠标移动之外,位置也会在其他事件中报告。这里有一个点击事件的例子:
document.body.addEventListener('click',function(e)
{
console.log("cursor-location: " + e.clientX + ',' + e.clientY);
});
我设想,也许您有一个带有计时器的父页面,在一定时间或任务完成后,您将用户转发到一个新页面。现在你想要光标的位置,因为它们在等待,所以它们不一定会碰到鼠标。因此,使用标准事件跟踪父页面上的鼠标,并通过get或post变量将最后一个值传递给新页面。
你可以在你的父页上使用JHarding的代码,这样最新的位置总是在全局变量中可用:
var cursorX;
var cursorY;
document.onmousemove = function(e){
cursorX = e.pageX;
cursorY = e.pageY;
}
这将无法帮助通过父页面以外的方式导航到此页面的用户。
是的,这是可能的。
如果你在文档中添加"mouseover"事件,它会立即触发,你可以得到鼠标的位置,当然,如果鼠标指针在文档上。
document.addEventListener('mouseover', setInitialMousePos, false);
function setInitialMousePos( event ) {
console.log( event.clientX, event.clientY);
document.removeEventListener('mouseover', setInitialMousePos, false);
}
以前可以通过窗口读取鼠标位置。事件,但现在已弃用。
最简单的解决方案,但不是100%准确
$(':hover').last().offset()
结果:{上:148,左:62.5} 结果取决于最近的元素大小,当用户切换选项卡时返回undefined
如果你渲染2000 x 2000 <a>个元素,@Tim Down的答案是不性能的:
OK, I have just thought of a way. Overlay your page with a div that covers the whole document. Inside that, create (say) 2,000 x 2,000 elements (so that the :hover pseudo-class will work in IE 6, see), each 1 pixel in size. Create a CSS :hover rule for those elements that changes a property (let's say font-family). In your load handler, cycle through each of the 4 million elements, checking currentStyle / getComputedStyle() until you find the one with the hover font. Extrapolate back from this element to get the co-ordinates within the document. N.B. DON'T DO THIS.
但是你不需要一次呈现400万个元素,而是使用二分搜索。只需使用4 <a>元素即可:
第一步:考虑整个屏幕作为开始搜索区域 步骤2:将搜索区域分割成2 × 2 = 4个矩形<a>个元素 步骤3:使用getComputedStyle()函数确定鼠标悬停在哪个矩形中 步骤4:将搜索区域缩小到该矩形,并重复步骤2。
这样你将需要重复这些步骤最多11次,考虑到你的屏幕不超过2048px。
所以你将生成最多11 x 4 = 44 <a>个元素。
如果你不需要确定鼠标位置精确到一个像素,但说10px的精度是可以的。您将重复这些步骤最多8次,因此您将需要绘制最多8 x 4 = 32 <a>个元素。
生成并销毁<a>元素也不能执行,因为DOM通常很慢。相反,您可以重用初始的4 <a>元素,并在循环执行步骤时调整它们的顶部、左侧、宽度和高度。
现在,创建4 <a>也是多余的。相反,您可以在每个矩形中测试getComputedStyle()时重用相同的<a>元素。因此,不需要将搜索区域分割为2 × 2 <a>元素,只需要重复使用一个<a>元素,使用顶部和左侧样式属性移动它。
所以,所有你需要的是一个<a>元素改变它的宽度和高度最多11次,改变它的顶部和左侧最多44次,你就会有准确的鼠标位置。
推荐文章
- 如何使用Jest测试对象键和值是否相等?
- 将长模板文字行换行为多行,而无需在字符串中创建新行
- 如何在JavaScript中映射/减少/过滤一个集?
- Bower: ENOGIT Git未安装或不在PATH中
- 添加javascript选项选择
- 在Node.js中克隆对象
- 为什么在JavaScript的Date构造函数中month参数的范围从0到11 ?
- 使用JavaScript更改URL参数并指定默认值
- 在window.setTimeout()发生之前取消/终止
- 如何删除未定义和空值从一个对象使用lodash?
- 检测当用户滚动到底部的div与jQuery
- 在JavaScript中检查字符串包含另一个子字符串的最快方法?
- 检测视口方向,如果方向是纵向显示警告消息通知用户的指示
- ASP。NET MVC 3 Razor:在head标签中包含JavaScript文件
- 禁用从HTML页面中拖动图像