2014-09-22 24 views
8

Chcę zaimplementować jQuery animacja zwrotnej metody postęp czy krok,jQuery setup animacja zwrotna wyrzuca błąd

ale w obu przypadkach Dostaję następujący błąd:

NS_ERROR_IN_PROGRESS: Component returned failure code: 0x804b000f (NS_ERROR_IN_PROGRESS) [nsICacheEntry.dataSize] 

Szukałem dużo ale nie jestem w stanie znaleźć niczego w kontekście, utknąłem tutaj, proszę zasugerować, co może spowodować ten błąd?

W skrzypcach próbowałem z krokiem i postępem i jego działaniem, ale nie mogłem go uruchomić w moim kodzie, po prostu patrzę, czy ktoś ma taki rodzaj błędu w animacji jquery?

Przykładowy kod jest:

this.taskHandle.find('img').stop(true, true).animate({ 
     //todo// 
     top: vtop, // this.taskHandle.outerHeight(), 
     //'top': 0 - $('.target.upper').height(), 
     width: 0, 
     opacity: 0 
    }, { 
     duration: 2000, 
     step: function(){ 
      console.log('I am called'); 
     } 
    }, 

    $.proxy(function() { 
     // some css clearing method 
    }, { 
     // some further actions after animation completes 
    }) 
); 
+0

Która wersja jQuery używacie w środowisku produkcyjnym? – GuyT

+0

Zgodnie z komunikatem o błędzie i niektórymi podsłuchami w kodzie źródłowym Firefoksa, jest to problem związany z elementem w pamięci podręcznej, który nie został jeszcze załadowany/zapisany. Nic w opublikowanym kodzie nie sugeruje, że używasz żadnych zasobów, które mogły nie zostać załadowane, więc myślę, że ciężko nam będzie ci pomóc, chyba że zobaczymy trochę więcej kodu. – Falle1234

+0

Czy to jest aplikacja na iOS? – SnareChops

Odpowiedz

3

masz jakieś błędy semantyczne tu dzieje. Idę odśwież swój kod, sformatowaną dla łatwiejszego odczytu:

this.taskHandle.find('img') 
    .stop(true, true) 
    .animate(
     { 
      //todo// 
      top: vtop , // this.taskHandle.outerHeight(), 
      //'top' : 0 - $('.target.upper').height(), 
      width : 0, 
      opacity : 0 
     }, 
     { 
      duration:2000, 
      step: function() { 
       console.log('I am called'); 
      } 
     }, 
     $.proxy(
      function() { 
       // some css clearing method 
      }, 
      { 
       // some further actions after animation completes 
      } 
     ) 
    ); 

pierwsze: animate() nie przyjmuje 3 parametry (przynajmniej nie te 3 parametry). Nie jestem pewien, co próbujesz zrobić ze swoim css clearing method, ale wszystko, co nie będzie się działo po zakończeniu animacji, powinno być w metodzie complete, którą dodajesz tuż obok metody step.

Po drugie: $.proxy() musi mieć kontekst, w którym ma działać jako drugi parametr, a nie jakaś inna "pełna" funkcja.

Oto nieco zmodyfikowany przykład, który działa. Możesz spróbować samemu w this fiddle.

var vtop = 100; 

$('div') 
    .stop(true, true) 
    .animate(
     { 
      top: vtop, 
      width: 0, 
      opacity : 0 
     }, 
     { 
      duration: 2000, 
      step: function() { 
       console.log('I am called'); 
      }, 
      complete: function() { 
       alert('complete');// some further actions after animation completes 
      } 
     } 
    ); 
+0

Powyższy kod jest uruchomionym kodem, więc nie mogę usunąć $ .proxy(), $ .proxy() jest po prostu wyczyścić wszystkie style docelowe spowodowane przez animację, takie jak resetowanie jej do pierwotnej szerokości, góry itp. i to jest w porządku, tylko zmiana zrobiłem tutaj, aby użyć wywołania kroku lub postępu. –

+0

Ok. Jeśli to działa, to za wszelką cenę używaj go jak jest. W każdym razie kody błędów wspomniane w pytaniu nie przypominają mi błędów JavaScript. Czy jesteś pewien, że twój problem nie jest gdzieś indziej? –

+0

Chodzi o to, że musiałem manipulować efektem animacji jako animowany cel, dlatego potrzebuję użyć kroku lub postępu, ale jak tylko piszę krok lub metodę wywołania zwrotnego postępu, to wyrzuca mi ten błąd, a nawet blok kodu wywołania zwrotnego dint, –

1

Można użyć Julian Shapiro Velocity.js, które animacje są (dyskusyjne) szybciej niż jQuery i CSS (read this dłużej)

To pozwala używać wywołania zwrotne, takie jak:

  • Rozpocznij
  • postęp
  • kompletny

jak:

var vtop = 100; 
jQuery(document).ready(function ($) { 
    $('div').find("img").velocity({ 
     top: vtop, 
     width: 0, 
     opacity: 0 
    }, { 
     duration: 2000, 
     begin: function (elements) { 
      console.log('begin'); 
     }, 
     progress: function (elements, percentComplete, timeRemaining, timeStart) { 
      $("#log").html("<p>Progress: " + (percentComplete * 100) + "% - " + timeRemaining + "ms remaining!</p>"); 
     }, 
     complete: function (elements) { 
      // some further actions after animation completes 
      console.log('completed'); 
      $.proxy(...); // some css clearing method 
     } 
    }); 
}); // ready 

Zawiadomienie, że po prostu trzeba wymienić .animate() przez .velocity()

Zobacz JSFIDDLE