Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не совсем коректная работа .animate (https://javascript.ru/forum/jquery/48688-ne-sovsem-korektnaya-rabota-animate.html)

Bond 12.07.2014 22:11

Не совсем коректная работа .animate
 
Всем здравствуйте.
Собственно вопрос в следующем - есть слайдер с простой сменой картинок, но с анимацией - движение картинки + увеличение - как бы эффект плавучести. Проблема в том что не корректно работает .animate - картинки движутся рывками - не могу понять в чем проблема.
Вот основной кусок кода который двигает картинки(показываю только пару эфектов для наглядности):
var cur_img = 0;//индекс текущего изображения
var hor_distance = 100;//горизонтальное расстояние, на которое перемещается картинка
var vert_distance = 100;//вертикальное расстояние, на которое перемещается картинка
var hor_zoom = 100;//горизонтальный зум, количество пикселей, на которые увеличивается картинка по горизонтали
var vert_zoom = 100;//вертикальный зум, количество пикселей, на которые увеличивается картинка по вертикали
switch(rand)
    {
       case 0: $("#slider img:eq("+cur_img+")").animate({left:"-="+hor_distance+"px",width:"+="+hor_zoom+"px"},zoom_delay); break;
        case 1: $("#slider img:eq("+cur_img+")").animate({right:"-="+hor_distance+"px",width:"+="+hor_zoom+"px"},zoom_delay); break;
        case 2: $("#slider img:eq("+cur_img+")").animate({top:"-="+vert_distance+"px",height:"+="+vert_zoom+"px"},zoom_delay); break;
        case 3: $("#slider img:eq("+cur_img+")").animate({bottom:"-="+vert_distance+"px",height:"+="+vert_zoom+"px"},zoom_delay); break;
       default: $("#slider img:eq("+cur_img+")").animate({left:"-="+hor_distance+"px",width:"+="+hor_zoom+"px"},zoom_delay); break;
    }

Полный код и как работает слайдер можно посмотреть здесь - http://1top-start.ru/slider/

Вопрос состоит в том - можно ли сделать что бы движение картинки было плавным и как это сделать.
Буду признателен за ответ.

рони 12.07.2014 23:08

Bond,
вот эта строка лишняя в вашем коде
setInterval("show_img();",slider_interval);

поставьте вызов show_img во все animate --
так на всякий случай

var slider_interval = 4000;//интервал между сменой слайдов, милисекунд
var zoom_delay = 4000;//время, в течение которого происходит увеличение и перемещение картинки, милисекунд

данные секунды никогда несовпадут -- и интервал запустит лишние анимации отсюда и рывки -- можно конечно ничего не менять добавив stop(true,true) перед animate -- но лучше в таких анимациях отказ от использования setInterval

Bond 13.07.2014 01:28

Извините Рони, а как тогда запускать анимацию что бы она циклически сменялась без setInterval ?

рони 13.07.2014 01:30

Цитата:

Сообщение от рони
как тогда запускать анимацию что бы она циклически сменялась без setInterval

Цитата:

Сообщение от рони
поставьте вызов show_img во все animate

куда именно в animate --посмотрите документацию

рони 13.07.2014 01:31

Bond,
zoom_delayСЮДА); break;

Bond 13.07.2014 11:36

Сделал правки http://1top-start.ru/slider/ но ситуация не изменилась.

рони 13.07.2014 11:59

Bond,
в каком браузере у вас рывки?

рони 13.07.2014 12:01

Bond,
тут рывки есть?
http://learn.javascript.ru/play/p8Jonb

Bond 13.07.2014 12:25

Здесь тоже есть рывки http://learn.javascript.ru/play/p8Jonb в Лисе больше в хроме меньше кроме того изображение не двигается а растягивается, на самом деле они слабо заметны (видно только если на границе блока назначить точку и наблюдать за ней) но все же есть.

рони 13.07.2014 13:10

Bond,
невижу рывков


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