Вернуть функцию несколько раз вместо одного, используя .fadeOut ();

0

Я не знаю, можно ли это сделать, но я думаю, что это...

Сначала я подумал, что это может быть что-то не так со всем моим скриптом, и мне удалось создать новый файл на localhost и проверить только fadeOut(); функция.

По-видимому, он снова вернулся к функции снова, поэтому я пошел в jsfiddle, чтобы проверить, что там будет. То же самое произошло. В этом случае console.log(); вернулся дважды.

  • Что я сделал и что я пытаюсь сделать?

Ну, я хочу вернуть указанную функцию или в образец console.log();, указанный console.log(); только один раз. Однако я угасаю несколько элементов (два, если быть точным).

Есть ли способ сделать это, вместо того, чтобы одновременно дублировать каждый элемент на fadeOut?

Пример, который будет возвращать console.log(); дважды.

setTimeout(function () {

    $( ".one, .two" ).fadeOut(300, function () {
        console.log("Return Function!");
    });

}, 2000);

Пример, который будет возвращать console.log(); один раз.

setTimeout(function () {

    $( ".one" ).fadeOut(300);

    $( ".two" ).fadeOut(300, function () {
        console.log("Return Function!");
    });

}, 2000);

Предварительный просмотр скрипта : перенаправление скрипта

Теги:

4 ответа

5
Лучший ответ

В коллекции есть два элемента, поэтому fadeOut вызывается дважды, поэтому да, он должен это делать.

Вы можете иметь огонь обратного вызова только один раз, независимо от количества элементов в коллекции, используя возвращенное обещание от анимации и $.when и $.then

setTimeout(function () {

    $.when( $( ".one, .two" ).fadeOut(300) ).then(function () {
        console.log("Return Function!");
    });

}, 2000);

FIDDLE

  • 1
    Обратите внимание, что вы также можете просто сделать $( ".one, .two" ).fadeOut(300).promise().done(function(){... та же концепция
  • 0
    Запустить журнал, когда все будет сделано? Абсолютно..! Нравится это!
Показать ещё 2 комментария
3

Возможно, достаточно простого флага? Особенно, если вы хотите войти в консоль, как только первая была сделана (по какой-либо причине):

var already_returned = false;
setTimeout(function () {
    $( ".one, .two" ).fadeOut(300, function () {
        if (!already_returned) {
            already_returned = true;
            console.log("Return Function!");
        }
    });
}, 2000);
0

Вам нужно увидеть свой HTML-код, но мне кажется, что у вас может быть несколько элементов, назначенных с классом "два", что объясняет, почему во втором примере вы должны исходить из двух строк журнала...

В первом примере вы можете (и, вероятно,) выбрать 2 элемента (один с классом "один", а другой с классом "два").

  • 0
    Второй только регистрируется один раз.
  • 0
    Итак, в этом случае это даже проще ... Первый выбор получил два элемента (один назначен с классом «один», а другой - с классом «два»), а второй выбор получил только один элемент с классом «два».
0

Я проверил это из любопытства, и моя консоль показывает два разных объявления javascript:

Return Function! fiddle.jshell.net/dvLden/ApUYq/show/:38
Return Function! fiddle.jshell.net:38

Видимо, скрипка проходит дважды. если вы перейдете на страницу http://fiddle.jshell.net/dvLden/ApUYq/show/:38, вы получите только одну "функцию возврата" в своей консоли.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню