2010-07-15 5 views
0

Я пытаюсь сделать что-то очень просто: непрерывно контурное фоновое изображение. Я делаю это через "Background Position Animations" plugin.Как зацикливать простую функцию JQuery?

Мой текущий код:

$(function skyloop() { 
    $('#header').animate ({backgroundPosition:"(-250 0)"}, {duration:1000}); 
}); 

Мне нужен способ, чтобы вызвать функцию «skyloop» в конце анимации, которое приводит его к петле, но я не могу показаться, чтобы найти путь для этого.

[EDIT] Я прочитал все ответы, и я не могу понять это; ничего не работает. Он просто отказывается бежать снова. Единственное, о чем я могу думать, это то, что проблемы вызваны плагином, когда я изменяю фоновое изображение. Я попытаюсь найти другой способ постоянно перемещать фоновое изображение (кстати, я пытаюсь имитировать небо).

ответ

3

Там есть параметр обратного вызова для одушевленных: http://api.jquery.com/animate/

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

EDIT:

Ваша задача в этом случае (а также необходимости обратного вызова) является backgroundPosition:(-250 0), вместо этого следует использовать относительные операторов держите декрементирующую позицию фона, например: backgroundPosition: "-=250".

+0

+1 для ссылки на документацию и ссылки, которые в первую очередь (на мой взгляд, наиболее надежным и выгодным способом обучения в долгосрочной перспективе - понимание и работы со ссылками), но вы должны также возможно добавить часть ответа на ваш вопрос, который напрямую отвечает на вопрос OP (чтобы отличить этот ответ от любого другого вопроса, связанного с обратным вызовом jQuery 'animate'). –

+0

Да. Я посмотрел документацию и попытался добавить простой обратный вызов в конце, но он просто не работал. Я начинаю думать, что это, вероятно, вызывает плагин, который я использую для анимации фона. – steelfrog

1

Вы можете сделать это следующим образом:

function skyloop() { 
    $('#header').animate({backgroundPosition:"(-250 0)"}, 
         {duration:1000}, 
         skyloop); 
} 
$(skyloop); //call it on document.ready to kick it off 
2

demo

function skyloop() { 
    $('#header').animate ({"background-position":"-=250"}, 1000, skyloop); 
} 
+0

Я пробовал это, но он не повторяется так, как предполагалось. – steelfrog

+0

Я думаю, что из-за этого '' (-250 0) «его все равно каждый раз ... – Reigel

+0

Я сделал несколько демо для вас ... посмотрите .... – Reigel

2
$(function(){ 
    var skyloop = function(){ 
     $('#header') 
      .animate({backgroundPosition:"(-250 0)" }, { duration: 1000 }) 
      .queue(skyloop); 
    } 
}); 

queue добавляет функцию, которая срабатывает в конце вашей анимации.

0

Вам не нужен этот плагин. Используйте более новую версию jQuery, поддерживающую .animate. (1.4.2 является последним)

Метода одушевленного поддерживает функцию обратного вызова, когда текущая анимация завершается ..

2
setInterval("skyloop()", 1001); 
function skyloop() { 
    $('#header').animate ({backgroundPosition:"(-250 0)"}, {duration:1000}); 
}; 
0

Хотя это может выглядеть лучше использовать .animate метод для прокрутки фона; вы можете начать видеть высокий уровень использования процессора после его запуска. В зависимости от фонового изображения вы можете проверить jquery-randomised-background-scrolling-effect-tutorial. Вы можете взять изображение неба и прокрутить эту установку.

Но вернемся к вопросу о том, как один из способов справиться с повторным набором JS setInterval должен был сделать трюк. хотя я бы это и написал.

setInterval(function(){ $('#header').animate ({backgroundPosition:"(-250 0)"}, {duration:1000});} , 1000); 
Смежные вопросы