Как сделать так, чтобы несколько вызовов jQuery animate () работали один за другим?

0

Когда я нажимаю блок "aa", одновременно отображаются оба "aa" и "bb". Вызывает ли javascript функцию animate(), не блокирующую отдельные потоки? Или эта функция вводится несколько раз с тысячами обратных вызовов, которые используют вызовы функций блокирующего типа? Как я могу заставить анимацию() работать с элементами по одному, когда это необходимо (возможно, использование таймера может быть выполнено, но я должен всегда использовать таймер?)?

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
    <script>

        function growbits(i,j) {
            $(i).animate({ height: "500px" }); // looks working concurrently
            $(j).animate({ width: "500px"});   // with this one
        };

    </script>
</head>
<body>
    <p id="bb" style="background: #f00; height: 50px; width: 255px; margin: 10px;">asdasd</p>  
    <p id="aa" onclick="growbits(aa,bb);" style="background: #f00; height: 50px; width: 255px; margin: 10px;">
        gfhjjjgfhgkjfhkjtkjyhtkjyhkhfukhgkudfgk

    </p>
</body>
</html>

Ive нашел следующий код в файле min.js:

self.element.animate(
            $.extend(style, top && left ? { top: top, left: left } : {}), {
                duration: o.animateDuration,
                easing: o.animateEasing,
                step: function() {

                    var data = {
                        width: parseInt(self.element.css('width'), 10),
                        height: parseInt(self.element.css('height'), 10),
                        top: parseInt(self.element.css('top'), 10),
                        left: parseInt(self.element.css('left'), 10)
                    };

                    if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });

                    // propagating resize, and updating values for each animation step
                    self._updateCache(data);
                    self._propagate("resize", event);

                }
            }
        );
  • 0
    Зависит от движка JavaScript…
  • 1
    В JavaScript нет встроенной функции animate . Вы можете видеть, что это метод объекта jQuery. Проверьте исходный код jQuery.
Показать ещё 3 комментария
Теги:
animation
jquery-animate

2 ответа

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

Из документации jQuery:

.animate( properties [, duration ] [, easing ] [, complete ] )

полный
Тип: Функция()
Функция для вызова после завершения анимации.

Так:

function growbits(i,j) {
    $(i).animate({ height: "500px" }, {}, 400, function () {
        $(j).animate({ width: "500px"});
    });

};
  • 0
    Да, это работает. Спасибо.
1

Ответ Квентина работает, но в эти дни я бы предположил, что он может быть более чистым, используя версию опций:

.animate( properties, options )

Как таковой:

javascript function growbits(i,j) { $(i).animate({ height: "500px" }, { duration: 400, done: function() { $(j).animate({ width: "500px"}); } }); };

(done может быть заменено на (старая опция) complete или always, always, done, и fail - это популярные в настоящее время события Promise)

EDIT: Чтобы уточнить, причина, по которой я предлагаю это, втрое:

1) Вам не нужно предоставлять атрибуты, которые не имеют для вас значения (в этом случае, ослабление),

2) Если вы решите, что другие атрибуты имеют значение, они часто тривиальны, чтобы добавить,

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

  • 0
    Большое спасибо.

Ещё вопросы

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