параметризовать функцию jquery - PullRequest
0 голосов
/ 30 января 2011

У меня есть функция jquery animate для анимации списка, который указан с помощью

    $li = $("ol#update > li");

одушевленная функция

function animate_li()
{
   $li.filter(':first')
      .animate({
         height:  'show',
         opacity: 'show'
      }, 250, function(){
        animate_li();
      });
    $li = $li.not(':first');
}

Теперь я хочу параметризовать функцию animate_li, которую я сделал:

function sp_animate_li(sp)
{
    console.log ( $li );
    function animate_li()
    {
        $li.filter(':first')
        .animate({
         height:  'show',
         opacity: 'show'
        }, sp, function(){
            animate_li();
        });
        $li = $li.not(':first');
    }
}

но теперь я не могу получить анимацию, используя вызов

sp_animate_li(100);

Любая помощь

спасибо

Ответы [ 4 ]

1 голос
/ 30 января 2011

Вы не вызываете внутреннюю функцию и не возвращаете ее, поэтому вы не можете ее вызвать. Попробуйте это:

function sp_animate_li(sp)
{
    console.log ( $li );
    function animate_li()
    {
        $li.filter(':first')
        .animate({
         height:  'show',
         opacity: 'show'
        }, sp, function(){
            animate_li();
        });
        $li = $li.not(':first');
    }
    return animate_li;
}

var inner = sp_animate_li(100);
inner(); // calls the inner function
1 голос
/ 30 января 2011

Почему бы не определить вашу функцию как:

function animate_li($li, sp)
{
   sp = sp || 250;
   $li.first()
      .animate({
            height:  'show',
            opacity: 'show'
          }, 
          sp, 
          function(){
              animate_li($li.not(':first'), sp);
          }
      );
}

Это также позволяет избежать использования переменных из более высоких областей, что может сбить с толку ...

Обновление: Исправлен рекурсивный вызов.

0 голосов
/ 30 января 2011
function animate_li( sp)
{
   sp = sp || 250;
   $li.filter(':first')
      .animate({
         height:  'show',
         opacity: 'show'
      }, sp, function(){
        animate_li( sp);
      });
    $li = $li.not(':first');
}
0 голосов
/ 30 января 2011

Не удивительно, потому что animate_li нигде не вызывается. Почему бы вам не добавить параметр в animate_li вместо переноса?

...