Обработка события внутри события
Какие есть способы в жс обработки события внутри обработчика другого события? Например мне нужно обработать движение мыши с зажатой кнопкой, есть ли какие-нибудь альтернативы кроме:
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, время: 02:06. |