отмена выполнения обработчика...
приветствую всех...
вопрос такой: как остановить выполнение обработчика события из другого обработчика этого же события ?? конкретно в моем случае - я пишу плеер и нужно чтобы при клике на play устанавливался второй обработчик на ту же кнопку который будет останавлить проигрывание первого обработчика (тоесть обработчика который проигрывает), и наоборот (удалялся второй обработчик и ставился первый обратно чтобы снова начать проигрывание) привожу пример :
var play = function() {
doSomething();
removeHandler(buttonPlay, "click", pause);
}
var pause = function() {
doAnotherthing();
removeHandler(buttonPlay, "click", play);
}
addHandler(buttonPlay, "click", play);
addHandler(buttonPlay, "click", pause);
function addHandler(element, event_name, handler) {
try {
element.addEventListener(event_name, handler, false);
}catch(e) {
element.attachEvent("on" + event_name, handler);
}
}
function removeHandler(element, event_name, handler) {
try {
element.removeEventListener(event_name, handler, false);
} catch(e) {
try {
element.detachEvent("on" + event_name, handler);
} catch(ee) {
element["on" + event_name] = null;
}
}
}
но по такой логике второй обработчик начинает выполняться только после того, как первый закончит свое выполнение, как сделать чтобы второй обработчик останавливал (прерывал) первый во время его выполнения второго и наоборот? |
Цитата:
|
danik.js,
но что писать вместо event ? название события ? (onclick, onmouseover,...) или ссылку на объект которая в обработчике первым параметром ? |
Цитата:
|
danik.js,
этот e.stopImmediatePropagation() в моем случае не помог вообще ((( он работает только в IE и OPERA, и останавливает только тогда когда обработчик закончит выполняться - например если в обработчике вызывается функция которая работает рекурсивно, то этот e.stopImmediatePropagation() ждет пока закончится рекурсия, мне нужно чтобы рекурсия прерывалась на клике на ту же кнопку что и запуска обработчика (в котором запускается эта рекурсивно работающая функция) - мой случай -
function runCycle(callback, timer) {
if (index < pics.length) {
buttonPlay.src = "buttons/button_pause.png";
var id = setTimeout (function() {
callback();
runCycle(callback, timer);
}, timer);
}
else buttonPlay.src = "buttons/button_play.png";
}
var runAll = function(e) { // это главный обработчик
runCycle(playNext, 1000); // это рекурсивно выполняющаяся функция выполняющая все действия
}
addHandler(buttonPlay, "click", runAll); // вешаем обработчик
|
| Часовой пояс GMT +3, время: 19:06. |