#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:
что-то вроде этого?
Код:
<!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');
});