2011-10-08 2 views
11

Можно ли сделать что-то вроде этого:Проверьте, если mousedown с утверждением if?

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

Я думал, что будет работать, но это не так.

Дополнительная информация: Я пытаюсь проверить, если кнопка мыши нажата, когда мышь покидает определенную DIV, так что если человек держит кнопку мыши в то время как их мышь покидает DIV, сделать это, в противном случае сделай это.

+0

Вы хотите знать, если левая кнопка мыши нажата на элементе, или если они просто прижала его где-нибудь на этой странице? – Ben

+0

Вы пытаетесь определить, какое событие вызвало функцию/метод? –

+0

Обновленный вопрос, да левая кнопка вниз на div. –

ответ

19

Самый простой способ, которым я могу думать о том, чтобы связать mousedown и mouseup обработчики событий 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"); 
    } 
}); 

Вот working example из вышеперечисленного.

+0

Было бы проблематично использовать '$ .data()' для присоединения переменной 'down' к элементу' # example'? –

+0

Нет, совсем не проблематично. Хорошее мышление, чтобы избежать использования глобальной переменной. –

+0

Я думаю, если это нужно, например, для более чем одного элемента. Единственное, о чем я думал, это скорость. –

1

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

Хорошо, хорошо лучший вариант, я могу дать вам это: http://jsfiddle.net/qK8rr/2/

+0

Это будет звучать как сломанная запись, но, пожалуйста, напишите свой фактический код в ответе (это считается лучшей практикой в ​​SO). ':)' –

5

Отвечая на исходный вопрос, да, это возможно. Когда событие mousedown срабатывает над элементом, элемент становится активным и выбирается псевдоселектором: активным. В jQuery, если ничего не выбрано, возвращается пустой массив, мы можем использовать это в наших интересах в сочетании с свойством .length array и превращать активный псевдо-селектор в проверку, чтобы увидеть, находится ли мышь над определенным элементом или нет так:

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

Проверяется мыши было вниз по конкретному элементу в данный момент времени является другим событием и не идет с названием этого вопроса и должны быть изменено могу добавить. Google привел меня сюда, и этот ответ для тех, которые неизбежно последуют.

0

Проверьте это. http://jsfiddle.net/b1Lzo60n/

Mousedown запускает таймер, который проверяет, находится ли мышь по-прежнему вниз через 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'); 
}); 
Смежные вопросы