在IE中存在.setCapture(); .releaseCapture()函数。 在不使用jQuery的情况下,Firefox中的这些功能相当于什么? (我的客户不想使用它)
答案 0 :(得分:12)
如上所述,Firefox不提供此功能,您可以通过监控整个文档上的事件来解决此问题。为了确保没有更好的技巧,我刚刚检查了jQuery UI,看起来他们使用相同的方法。因此,例如,如果你想在jQuery中关闭鼠标时捕获鼠标移动,你可以这样做:
$("#someElement").
mousedown(function() { $(document).mousemove(captureMouseMove) }).
mouseup(function() { $(document).unbind("mousemove", captureMouseMove) });
function captureMouseMove(event)
{
// ...
}
答案 1 :(得分:8)
https://developer.mozilla.org/en-US/docs/DOM/element.setCapture
setCapture和releaseCapture已于2011年3月22日添加到Firefox 4(随Gecko 2发布)。但是,WebKit(Chrome / Safari)仍缺乏这些功能。
答案 2 :(得分:2)
在任何时候捕获鼠标都不是好行为,我认为这就是为什么不提供setCapture
的原因。
但是,要捕获鼠标进行拖放操作,您只需要处理document
对象的鼠标事件(鼠标{up,down,move}),这可能会在拖动时触发甚至在客户区外。
<html>
<head>
<title>Capture test</title>
</head>
<body>
<script type="text/javascript">
document.onmousedown = function () {
state.innerHTML = "Dragging started";
};
document.onmousemove = function (e) {
coord.innerHTML = e.clientX + ',' + e.clientY;
}
document.onmouseup = function (e) {
state.innerHTML = "Dragging stopped";
}
</script>
<p id="state">.</p>
<p id="coord">.</p>
</body>
</html>
答案 3 :(得分:2)
我认为从FF4开始,将element.setCapture()和document.releaseCapture()添加到Firefox: https://developer.mozilla.org/en/DOM/element.setCapture
“在处理mousedown事件期间调用element.setCapture()方法,将所有鼠标事件重新定位到此元素,直到释放鼠标按钮或调用document.releaseCapture()为止。”
答案 4 :(得分:2)
@ JanZich的解决方案效果很好,但如果鼠标位于元素之外,它不会捕获鼠标按下事件。这对我来说效果更好:
$("#someElement").mousedown(function() {
$(document).mousemove(captureMouseMove);
$(document).mouseup(captureMouseUp);
});
function captureMouseMove(event) {
console.log("mouse move");
}
function captureMouseUp(event) {
console.log("mouse up");
$(document).unbind("mousemove", captureMouseMove);
$(document).unbind("mouseup", captureMouseUp);
}
答案 5 :(得分:1)
使用事件冒泡:将冒泡鼠标事件的事件侦听器添加到高级容器(甚至可能是document
)并使用变量来跟踪哪个元素应该是捕获的。
如果没有关于你要做什么的进一步信息,那就没有什么可说的了。
答案 6 :(得分:0)
SetCapture和ReleaseCapture是您发现的IE专有功能。在Firefox中没有以相同方式操作内容菜单的原生方式。
Gimme似乎可以在http://www.codeplex.com/gimme/Wiki/Recent.aspx找到它。这里有一篇博文:http://blog.stchur.com/2007/11/21/setcapture-with-gimme描述了使用它来替换函数的一种情况。
答案 7 :(得分:0)
setCapture()和releaseCapture()是Internet Explorer特有的非标准方法。 Firefox中没有实现。有一个名为Gimme的框架,它为您提供了一些鼠标捕获功能。 http://www.codeplex.com/gimme/
答案 8 :(得分:-1)
使用true
作为要捕获的addEventListener
方法的第三个参数。例如:
document.addEventListener("click", function(event){location.hash=event.target}, true)
使用具有相同参数的removeEventListener
来发布:
document.removeEventListener("click", function(event){location.hash=event.target}, true);
<强>参考强>
答案 9 :(得分:-3)
FF / JavaScript中没有这样的功能。捕获函数仅存在于JScript中。