Обработка события внутри события
Какие есть способы в жс обработки события внутри обработчика другого события? Например мне нужно обработать движение мыши с зажатой кнопкой, есть ли какие-нибудь альтернативы кроме:
b.onmousedown = function() { b.onmousemove = function() { } } ? Как такое можно сделать через слушателя событий? Спасибо. |
Чтоб не плодить для разных объектов лишних слушателей обычно делается так.
А так и приведённый вами подход для единичных случаев подходит, нет никаких сложностей в смене el.onfoo = bar на el.addEventListener('foo', bar, false) . |
По человечески это пишеться так:
var mDown = false; b.onmousedown = function(){ mDown = true; }; b.onmousemove = function(){if(mDown ){}}; b.mouseup = function(){ mDown = false; }; Можно сделать ещё хардкорней https://developer.mozilla.org/en-US/...eEventListener или используя jquery методы on off |
Цитата:
Цитата:
<button id="test">нажми меня, держи и таскай</button> <span id="result"></span> <script> var button = document.getElementById('test'), result = document.getElementById('result'); function mousemove(e) { result.innerHTML = e.pageX + ', '+ e.pageY; } function mouseup() { button.removeEventListener('mousemove', mousemove); button.removeEventListener('mouseup', mouseup); } button.addEventListener('mousedown', function () { button.addEventListener('mousemove', mousemove); button.addEventListener('mouseup', mouseup); }); </script> |
Цитата:
|
Цитата:
|
grifangel, в обычном случае - ничем особым. Но например mousemove или там scroll вызываются многократно на каждое движение, и если будет много обработчиков висеть - могут возникнуть тормоза. Особенно на несвежем железе. Потому правилом хорошего тона - в рамках одного функционала использовать один подобный слушатель, один таймер итд. Само собой без фанатизма.
По поводу того - где использовать on, а где add я придерживаюсь следующего мнения: on следует использовать там где обработчик единственный и при этом элемент создан вами и никак не должен обрабатываться сторонним кодом. В остальных случаях - add. Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 15:21. |