使用if语句检查是否按下鼠标?

14

有没有可能像这样做:

if ($(this).mousedown() == true) {

我原以为那个方法会起作用,但其实并没有。

附加细节:我正在尝试检查鼠标在离开特定的 DIV 时是否按下了鼠标按钮,如果用户在鼠标离开 div 的同时仍然按住鼠标按钮,则执行一项操作,否则执行另一项操作。


你想知道鼠标左键是否按下在某个项目上,还是只是在页面的任何地方按下它吗? - Jess
你是否正在尝试确定哪个事件触发了一个函数/方法? - Jared Farrish
更新的问题,是的,在 div 上按下了左键。 - android.nick
你是想要判断用户是否正在拖动或选择元素/文本吗? - Jared Farrish
使用 mousemovee.which == 1 - Muhammad Umer
5个回答

27

我能想到的最简单方法是将 mousedownmouseup 事件监听器绑定到 document 上,并相应地更新全局变量。在您的元素的 mouseout 事件中,您可以检查该变量的状态并根据情况采取行动。(注意:这假设您不关心鼠标在 div 上按下与否...您需要在问题中澄清这一点)。

var down = false;
$(document).mousedown(function() {
    down = true;
}).mouseup(function() {
    down = false;  
});
$("#example").mouseout(function() {
    if(down) {
        console.log("down");  
    } 
    else {
        console.log("up");   
    }
});

这是上述问题的可运行示例


使用$.data()方法将变量down附加到#example元素上是否有问题? - Jared Farrish
不,完全没有问题。想得好,为了避免使用全局变量。 - James Allardice
我在考虑这个是否需要在多个元素上使用,例如。我所考虑的唯一事情就是速度。 - Jared Farrish

6

回答您的原始问题,是的,这是可能的。当mousedown事件在元素上触发时,该元素变为活动状态,并可通过伪选择器:active进行选择。在jQuery中,如果未选择任何内容,则返回一个空数组,我们可以利用这个特性与.length数组属性结合使用,将活动伪选择器转换为检查鼠标是否按下了特定元素的检查,如下所示:

if ( $('#id:active').length ) {
  //do something
}

检查鼠标在某个特定元素上是否按下,是一个不同的事件,与这个问题的标题无关,应该修改。谷歌把我带到了这里,这个答案是为那些将来必然会跟随的人准备的。


0

http://jsfiddle.net/5HrWF/

像这样的东西?

代码:

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <p>Press mouse and release here.</p>

<script>
    $("p").mouseup(function(){
      $(this).append('<span style="color:#F00;">Mouse up.</span>');
    }).mousedown(function(){
      $(this).append('<span style="color:#00F;">Mouse down.</span>');
    });

</script>

</body>
</html>

0

这可能听起来像是老生常谈,但请在答案中发布您的实际代码(这被认为是SO上的最佳实践)。 :) - Jared Farrish

0

看看这个。 http://jsfiddle.net/b1Lzo60n/

按下鼠标键启动一个计时器,检查鼠标在1秒后是否仍然按下。

<button id="button">Press me</button>
<div id="log"></div>

代码:

var mousedown = false;
var mousedown_timer = '';
$('#button').mousedown(function(e) {
    mousedown = true;
    $('#log').text('mousedown...');
    mousedown_timer = setTimeout(function () {
        if(mousedown) {
            $('#log').text('1 second');
        }
    }, 1000);
}).mouseup(function(e) {
    mousedown = false;
    clearTimeout(mousedown_timer);
    $('#log').text('aborted');
});

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