Jquery / Javascript - добавить обратный вызов в мою маленькую функцию, применять этот конкретный обратный вызов только тогда, когда я решу - PullRequest
0 голосов
/ 16 марта 2011

Когда я запускаю функцию scrollMyScreen, я хочу иметь возможность ИНОГДА вызывать обратный вызов (который я хочу сделать своей функцией flashArrow), который, я думал, будет выглядеть примерно так: scrollMyScreen(flashArrow()), но, очевидно, это не работает , моя функция flashArrow на самом деле будет больше, чем просто предупреждение, это только для примера.

function scrollMyScreen() { 
    $('body').delay(600).animate({scrollTop: $(target).offset().top}, 1000, callback)
}

function flashArrow () { 
    alert('FLASHING ARROW!')
};

Итак, что я могу сделать, чтобы заставить эту работу? Я хочу вызвать scrollMyScreen, а затем иногда добавить функцию flashArrow () в качестве обратного вызова или произойти после завершения scrollMyScreen.

пример дела:

case "header": 
    scrollMyScreen()
    break
case "wrapper": 
    scrollMyScreen(flashArrow())
    break

Ответы [ 3 ]

4 голосов
/ 16 марта 2011

Вам нужно передать ссылку на flashArrow, а не результат вызова flashArrow():

case "header": 
    scrollMyScreen();
    break;
case "wrapper": 
    scrollMyScreen(flashArrow);   // change here
    break;

(и не забудьте также объявить параметр callback для scrollMyScreen()!)

0 голосов
/ 16 марта 2011
function scrollMyScreen(callback) { 
$('body').delay(600).animate({scrollTop: $(target).offset().top}, 1000, 
                              typeof(callback) == "function" ? callback : null);
}

Затем вы можете позвонить:

scrollMyScreen(someFunction);

или

scrollMyScreen();

Обновление: исправлена ​​ошибка с нулевым обратным вызовом

function scrollMyScreen(callback) { 
if (typeof(callback) == "function")
    $('body').delay(600).animate({scrollTop: $(target).offset().top}, 1000, callback);
else
    $('body').delay(600).animate({scrollTop: $(target).offset().top}, 1000);
}
0 голосов
/ 16 марта 2011
var callback = null;

switch(something) {
    case "wrapper": 
        callback = flashArrow;
        break;
    case "somethingElse": 
        callback = flashSomethingElse;
        break;
}

scrollMyScreen(callback);



function scrollMyScreen(callback) { 
    $('body').delay(600).animate({scrollTop: $(target).offset().top}, 1000, callback);
}
...