在Chrome中拖动时锁定鼠标光标

6
这不是与其他问题相同的问题。 我已经防止Chrome在拖动时进入文本选择模式。 (编辑:我只想锁定图标/外观, 不限制位置或移动,并且只在mousedown和mouseup之间)我希望避免的问题是,Chrome在拖动时更改光标,使其变成鼠标下方的任何内容(即-在文本输入控件上方时为i-beam,在超链接上方时为手等)。
IE和FireFox/Moz支持element.setCapture(),我在mousedown事件中调用它,可以将这些浏览器“锁定”到元素上,以便鼠标光标停留在该元素的光标上...非常好。 Chrome不支持该函数或类似的函数,据我所知。
通过在文档对象上监听mousemove和mouseup事件,而不是单击的元素,我仍然能够获得setCapture()行为的大多数效果,因为我可以跟踪发生在元素之外甚至浏览器窗口之外的鼠标事件。但是,我仍然有一个问题,那就是Chrome中鼠标光标的变化。

如果您在不同的浏览器上单击按钮并拖动鼠标到页面上,您将看到问题的根源。在IE和FF中,鼠标图标保持为按钮设置的内容(因为按钮“捕获”鼠标同时按下按钮)。在Chrome中,随着拖动的改变鼠标也会改变。也许Chrome用户喜欢这种情况,更可能他们从未注意过或不关心,但对于我的特定用途(在表格中拖动以调整列宽),它会分散注意力,似乎是我的用户的“错误”。 - eselk
2个回答

3
我相信您正在寻找指针控制锁定API,这是一种最近推出的方式,让用户可以控制用户输入设备(在允许的情况下)。主要用例是游戏。
如果没有安全且受支持的API,允许网站接管用户输入控件将非常灾难性(即点击劫持和强制恶意软件下载),因此,如果您想“锁定”光标,则这很可能是您唯一的选择。

1
我会更新我的问题,希望能更清楚地表达 -- 我想要锁定光标外观(图标),而不是限制移动范围或位置。就像其他浏览器中setCapture()所做的那样,并且据我所知已经这样做了10多年,没有任何安全问题。 - eselk

0

通常我会在鼠标按下时将一个元素放置在所有其他元素之上,并在鼠标抬起时将其移除。虽然不是最干净的方法,但对我来说很有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接