Как узнать, что левая клавиша мыши не зажата
Делаю элемент, который можно растягивать.
var mousedown; document.addEventListener('mousemove', function(){ if( mousedown /* && вот здесь нужно как-то узнать, что клавиша мыши не зажата */) { resizeDiv(); } }); el.addEventListener('mousedown', function(){ mousedown = true; }); el.addEventListener('mouseup', function(){ mousedown = false; }); Проблема в том, что если человек зажимает левую клавишу мыши, доводит курсор до области, выходящей за рамки окна, отпускает её, затем снова возвращает курсор в окно, то скрипт "считает", что клавиша всё еще зажата и элемент, предназначенный для масштабирования "ходит" вместе с курсором, пока снова не вызовется событие mouseup. Надеюсь, что всё понятно объяснил. Как решить эту проблему? (Код сильно упростил, поэтому возможны ошибки) |
<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> Ну и там ещё по надобности всякие драг-дропы отменить. |
Я наверно плохо объяснил, минуту.
|
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,
Ну ваще у меня нет это паршивой строки от windows, возможно конечно она творит такие чудеса, но например ФФ пофиг где вы отпускаете клавишу, если событие весит на документе - оно сработает. Если вы используете другой браузер, например Хром и у вас это не работает, попробуйте отлавливать потерю фокуса у окна в то время, когда клавиша была зажата. Должно помочь. |
if (event.which == 1) // если нажата левая клавиша 1 - левая 2 - колесик 3 - правая Вроде так, кажется я ответил только на название темы )) А в каком браузере не обрабатывается Апп вне браузера? |
если растягиваемый элемент в контейнере, то может можно в mousemove проверить координаты мыши и сравнить с координатами контейнера)
|
Magneto,
человеку не кнопка нужна а её состояние |
Цитата:
Цитата:
|
Цитата:
|
nasqad,
Ага, давай лешим его прав и уволим. А если серьёзно, то браузер должен предоставлять наиболее полную и гибкую возможность управлять окном. Отжатие кнопки мыши вне окна, это всё ещё событие браузера, если до этого, нажатие было в нём. Это предоставляет возможность решать вот такие проблемы как у автора темы. Вот когда браузеры начнут рассказывать на каком окне произошло отжатие кнопки, тогда будите рассказывать про "превышение полномочий". |
Magneto, спасибо, я думал что event.which нет у mousmove.
|
Цитата:
делал по другому: при нажатии ставил флаг при отпускании сбрасывал. соответственно при выходе за пределы рабочей области в любом случае обнулял.а вариантов определения курсор в рабочей области или нет множество,от определения координат(станут ундефенит) до события маусоут при соответственном построении интерфейса ,либо как предложил Magneto, |
Часовой пояс GMT +3, время: 05:40. |