Проверьте, наведен ли указатель мыши с помощью оператора if?

#javascript #jquery #if-statement #mousedown

#javascript #jquery #if-statement #наведение курсора мыши

Вопрос:

Возможно ли сделать что-то подобное:

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

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

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

Комментарии:

1. Вы хотите знать, нажата ли левая кнопка мыши на элементе, или они просто нажали ее в любом месте страницы?

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

3. Обновленный вопрос, да, левая кнопка нажата на div.

4. Вы пытаетесь увидеть, перетаскивает ли кто-то или выбирает элемент / текст?

5. используйте mousemove с e.which == 1;

Ответ №1:

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

Вот рабочий пример приведенного выше.

Комментарии:

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

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

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

Ответ №2:

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

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

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

Ответ №3:

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>
  

Ответ №4:

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

Комментарии:

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

Ответ №5:

Проверьте это. 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');
});