@aleksandrozz

Действие во время анимации jQuery?

Здравствуйте! Подскажите пожалуйста как лучше сделать. Есть каруселька, которая, в данном случае, должна прокрутиться на 500px. Видимость ограничена первыми 5 элементами, где центральный 300*300, следующий и предыдущий от него 200*200, все остальные 100*100. Центральный имеет класс large, по бокам от центрального middle. Надо чтобы при прокрутке классы тоже двигались на следующие элементы, сейчас это работает, но с опозданием, потому что присвоение классов происходит после анимации. Как сделать чтобы присвоение классов следующим элементам было во время анимации?

Для наглядности: https://s.mail.ru/9isi/UWMbPwcAj

Вот кусок кода где это происходит:

var offset = 100;

while (offset < 500) {
    carousel.animate({ left : "-" + offset + "px"}, speed,
        function() {
            elem_m.removeClass('middle');
            elem_l.removeClass('large');

            elem_m = elem_m.next();
            elem_l = elem_l.next();

            elem_m.addClass('middle');
            elem_l.addClass('large');
    });

    offset += 100;
}
  • Вопрос задан
  • 402 просмотра
Пригласить эксперта
Ответы на вопрос 2
agmegadeth
@agmegadeth
Веб-разработчик в дизайн студии
У тебя функция передвижения классов в коллбэке animate - вот и отрабатывает после завершения. Высунь ее наружу из animate
Ответ написан
@MrTimon
Ввможете задейсвовать css анимацию по увеличению/уменьшению размеров скорость которой будет соответствовать стокорости полной js анимации. Здесь Пример анимации. обратите внимание на строку

transition: width 1s linear, height 1s linear;

там в секундах указано скорость анимации. А в js Я просто изменяю класс. Тоесть вам не нужно делать это в цикле. Вы просто изменяете классы для элементов и запускаете анимацию карусели. Должно все получиться в лучшем виде.

Есть и другой более сложный вариант. В js ф-ции animate есть параметр step это ф-ция отвечающая за один крок анимации. Вот пример з дока:

$( "li" ).animate({
  opacity: .5,
  height: "50%"
}, {
  step: function( now, fx ) {
    var data = fx.elem.id + " " + fx.prop + ": " + now;
    $( "body" ).append( "<div>" + data + "</div>" );
  }
});


Тоесть Вы можете прописать в здесь все изменения, которые должны происходить с Вашем блоком. Ну там сдвиг влево/вправо ну и увлечения/уменьшения некоторых элементов. И в конце анимации поменять классы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы