Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как узнать, что левая клавиша мыши не зажата (https://javascript.ru/forum/events/25418-kak-uznat-chto-levaya-klavisha-myshi-ne-zazhata.html)

FINoM 04.02.2012 23:59

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

var mousedown;
document.addEventListener('mousemove', function(){
    if( mousedown /* && вот здесь нужно как-то узнать, что клавиша мыши не зажата */) {
       resizeDiv();
    }
});

el.addEventListener('mousedown', function(){
    mousedown = true;
});

el.addEventListener('mouseup', function(){
    mousedown = false;
});


Проблема в том, что если человек зажимает левую клавишу мыши, доводит курсор до области, выходящей за рамки окна, отпускает её, затем снова возвращает курсор в окно, то скрипт "считает", что клавиша всё еще зажата и элемент, предназначенный для масштабирования "ходит" вместе с курсором, пока снова не вызовется событие mouseup. Надеюсь, что всё понятно объяснил. Как решить эту проблему?
(Код сильно упростил, поэтому возможны ошибки)

Nekromancer 05.02.2012 00:09

<body>
<div id="test">test</div>
<script>
document.getElementById('test').addEventListener('mousedown', function(e){
document.body.appendChild(document.createTextNode('|down'));
e.preventDefault();
document.addEventListener('mouseup', function mouseup(){
document.body.appendChild(document.createTextNode('|up'));
document.removeEventListener('mouseup', mouseup, false)
},false)
}, false);
</script>
</body>

Ну и там ещё по надобности всякие драг-дропы отменить.

FINoM 05.02.2012 00:32

Я наверно плохо объяснил, минуту.

FINoM 05.02.2012 00:34

1. http://my.jetscreenshot.com/6628/20120204-7v41-9kb — зажимаю клавишу.
2. http://my.jetscreenshot.com/6628/20120204-fitx-66kb — переношу курсор, отпускаю клавишу
3. http://my.jetscreenshot.com/6628/20120204-7v41-9kb — снова навожу

FINoM 05.02.2012 00:44

Цитата:

Сообщение от nasqad
в-третьих кроме event`a доступа к состояниям мыши нет вроде бы

Вот мне вот это третье "вроде-бы" и нужно, то есть наоборот. Может быть есть возможность узнать, ушел ли курсор за область окна?

Nekromancer 05.02.2012 00:48

FINoM,
Ну ваще у меня нет это паршивой строки от windows, возможно конечно она творит такие чудеса, но например ФФ пофиг где вы отпускаете клавишу, если событие весит на документе - оно сработает. Если вы используете другой браузер, например Хром и у вас это не работает, попробуйте отлавливать потерю фокуса у окна в то время, когда клавиша была зажата. Должно помочь.

Magneto 05.02.2012 00:54

if (event.which == 1) // если нажата левая клавиша

1 - левая
2 - колесик
3 - правая

Вроде так, кажется я ответил только на название темы ))

А в каком браузере не обрабатывается Апп вне браузера?

Раед 05.02.2012 01:10

если растягиваемый элемент в контейнере, то может можно в mousemove проверить координаты мыши и сравнить с координатами контейнера)

Раед 05.02.2012 01:11

Magneto,
человеку не кнопка нужна а её состояние

Magneto 05.02.2012 01:37

Цитата:

Сообщение от nasqad
во-первых событие mouseup происходит вне браузера и не ловится

Например в IE очень даже ловится.

Цитата:

Сообщение от FINoM
если человек зажимает левую клавишу мыши, доводит курсор до области, выходящей за рамки окна,

Может попробовать отслеживать mouseOut на document или window.


Часовой пояс GMT +3, время: 16:17.