在Javascript中,当我点击滚动条(页面中显示的任何滚动条)并将鼠标悬停在图像上时,图像会再次开始拖动。
只应在鼠标按钮状态下拖动图像。
所以我试图通过了解鼠标按钮状态(mousedown或mouseup)来解决这个问题
此问题仅存在于 IE 和 chrome 中,而不存在于我尝试的其他浏览器中。
使用Javascript:
document.onmousemove = mouseMove;
document.onmousedown = mouseDown;
document.onmouseup = mouseUp;
function mouseMove(ev) {
var mouseButtonState;
// put code here to get mouseButtonState variable
console.log('state of mouse is'+mouseButtonState);
}
当我移动鼠标时,程序应显示所需的值mouseButtonState
向上或向下
我如何知道鼠标按钮的当前状态?
答案 0 :(得分:4)
我不太确定为什么你的系统决定在浏览器之外(或在图像之外)发生点击时拖动图像 ..以便正确回答我需要看到你的实际代码(只是鼠标事件会这样做)。但是,如果你实现了我在下面提到的系统,那么你就不应该得到你所问的问题。
古老的Quirksmode对此有一些说法...这基本上是因为W3C无法检测到鼠标移动处理器中是否按下了左键,因为没有按下任何按钮{{1}报告0,当按下左键时 - 猜猜是什么? - e.button
报告0! (适用于W3C complient浏览器)。这是我完全同意Internet Explorer的“二进制标志”实现的时候之一:
http://www.quirksmode.org/js/events_properties.html#button
获得鼠标状态的唯一方法 - 我所知道的 - 是使用e.button
和mousedown
来检测和记录 - 这听起来就像你正在做的那样。现在我没有机会玩任何较新的“触摸”事件,他们可能能够帮助你......但是让它在crossbrowser上运行会很棘手。在一天结束时,有时您必须接受您在浏览器环境中工作,它将永远不会像专门设计的应用程序那样顺利。
适用于Internet Explorer的快速代码:
mouseup
适用于IE及其他任何内容的快速代码:
document.body.onmousemove = function(e){
e = e ? e : Event;
if ( e.button == 1 ) {
/// mouse button is pressed
}
}
正如其他海报所指出的那样,你可以尝试一个可以检测用户指针何时离开/重新进入浏览器环境的系统 - 但是我多年来对此的所有尝试从未如此成功。 Flash对此有更好的支持,但我怀疑你会想去那里......
就像今天可能仍然有用的一些历史信息一样,在处理拖动图像时,旧版本的Internet Explorer需要在拖动成功之前将以下内容应用于图像。这阻止了默认的浏览器拖动系统切入和阻碍。除了使用内联处理程序之外,还有更好的方法来实现它,但为了简单和清晰起见,我将其放在此处。
var delm = document.documentElement ? document.documentElement : document.body;
var buttonPressed = false;
delm.onmousdown = function(e){
buttonPressed = true;
}
delm.onmousup = function(e){
buttonPressed = false;
}
delm.onmousmove = function(e){
if ( buttonPressed ) {
/// the button is pressed, but only whilst being
/// detected inside the browser
}
}
答案 1 :(得分:1)
在您描述的情况下,问题是您只处理mouseup
和mousedown
个州。您还应该考虑处理blur
事件以了解鼠标已离开对象。您可能希望为mouseup
分配相同的处理程序。
答案 2 :(得分:0)
为什么不使用可以处理此类事件的jquery拖动?
如果你真的想要绑定mouseup和mousedown,你可以使用jquery
$(object).on("mouseup",function(){});