Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Отмена выполнения ф-ии (https://javascript.ru/forum/dom-window/39611-otmena-vypolneniya-f-ii.html)

hoax 05.07.2013 13:58

Отмена выполнения ф-ии
 
Как сделать так

if (функция уже выполняется) игнорировать ее повторное выполнение

Alim 05.07.2013 14:19

http://javascript.ru/forum/misc/3949...tml#post259643

hoax 05.07.2013 20:56

Не помогло. Мне надо, что при выполнении функции (анимации), повторные клики/наведения мыши (события) не запускали ее сначала.

т.е.

block.onmouseover = function() {
// какой-то код, который игнорировал повторное наведение и перезапускал ф-ю сначала

animate(.....)

}

что-то типо этого

var process = arguments.callee;
  if (process.busy) return;
  process.busy = true;


Перерыл весь рунет, так и не нашел инфы о busy, о arguments читал

danik.js 05.07.2013 21:08

block.onmouseover = function() {

    block.onmouseover = null
    animate(.....)

}

hoax 06.07.2013 15:00

Не помогает(
Смысл в том, что когда человек резко наводит/уводит несколько раз мышь с объекта, это объект прыгает, т.е. если наводит на div - объект выполняет анимацию, уводит - выполняет другую. Так и работает, но не когда человек наводит/уводит мышь, анимация выполняется несколько раз и получается некрасиво.

Мне нужно что-то типо :

block.onmouseover = function () {

if(block.onmouseover > 1) return; // т.е. надо игнорировать другие клики, пока анимация не закончится
animateProp(...)

}


В учебнике нашел такой пример http://learn.javascript.ru/play/tuto...jet/index.html
там повторные клики игнорируются, но я ума не приложу как сделать это в моем случае...

рони 06.07.2013 16:07

Цитата:

Сообщение от hoax
там повторные клики игнорируются, но я ума не приложу как сделать

точно также выставлять флаг и сбрасывать по окончании анимации
if (block.busy) return;
block.busy = true;
animateProp(...
block.busy = false;)

hoax 06.07.2013 17:32

вставляю вот так

block.onmouseover = function () {

if (block.busy) return;
block.busy = true;


animateProp(....)

block.busy = false;

}


Но не выходит игнорировать =(

А что такое busy? Это свойство объекта какого-то? В рунете инфу о нем не нашел...

рони 06.07.2013 17:43

Цитата:

Сообщение от hoax
block.busy = false;

это надо вставлять в конец анимации -- это флаг - свойство - имя любое - важно значение

hoax 06.07.2013 18:57

Что-то не выходит =(

Его надо ставить в вызов animateProp? Или после него?
Надо ли ставить arguments.callee или этого флажка достаточно?

рони 06.07.2013 19:30

Цитата:

Сообщение от hoax
Его надо ставить в вызов animateProp?

да


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