2014-07-10 34 views
8

Tworzę obiekt Canvas (jestem nowym na tym płótnem) obiekt działa dobrze Chrome & Firefox, ale kiedy otwieram ten sam plik w ie9.Żądanie błęduAnimationFrame in ie9 dowolne alternatywne rozwiązanie

otrzymuję błąd jako „requestAnimationFrame” jest niezdefiniowany

Kiedy google błąd to mówi requestAniationFrame nie będzie działać na IE9.

Czy jakiekolwiek ciało może mi w tym pomóc, mamy alternatywny sposób rozwiązania tego problemu.

i tu jest mój kod

var canvas = document.getElementById("canvas"); 
     var context = canvas.getContext("2d"); 

     var degreeAngle = 0; 
     requestAnimationFrame(animate); 

     function drawRotatedCylinder(x, y, w, h, degreeAngle) { 
      context.save(); 
      context.translate(x + w/10, y + h/10); 
      context.rotate(degreeAngle * Math.PI/180); 
      drawCylinder(-w/10, -h/10, w, h); 
      context.restore(); 
     } 
function animate() { 
     //requestAnimationFrame(animate); 
     context.clearRect(0, 0, canvas.width, canvas.height); 
     drawRotatedCylinder(100, 100, 180, 180, degreeAngle++); 
} 

Uprzejmie mi pomóc w powyższym roztworze

Dzięki odniesieniu Maha

+1

https://gist.github.com/paulirish/1579671 – adeneo

+0

Ty naprawdę nie szukać dla niego, prawda ?! –

+0

hi @ A.Wolff Naprawiłem to, ale nie byłem w stanie znaleźć rozwiązania – user3820621

Odpowiedz

20

Erik Möller opracował solidne PolyFill że Paweł irlandzki teraz odbywają się w jego blog post about requestAnimationFrame. Jeśli użyjesz tego kodu, można użyć requestAnimationFrame w prawie każdej przeglądarce przejrzyście:

(function() { 
    var lastTime = 0; 
    var vendors = ['webkit', 'moz']; 
    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { 
     window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; 
     window.cancelAnimationFrame = 
      window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame']; 
    } 

    if (!window.requestAnimationFrame) 
     window.requestAnimationFrame = function(callback, element) { 
      var currTime = new Date().getTime(); 
      var timeToCall = Math.max(0, 16 - (currTime - lastTime)); 
      var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
       timeToCall); 
      lastTime = currTime + timeToCall; 
      return id; 
     }; 

    if (!window.cancelAnimationFrame) 
     window.cancelAnimationFrame = function(id) { 
      clearTimeout(id); 
     }; 
}()); 
+0

dzięki @ user1449556 to działało dobrze – user3820621

+0

Nie ma za co;) – user1449556

+0

Problem rozwiązany Podałem powyższy javascript przed moim kodem, który działał dobrze ie9 dzięki jeszcze raz dla wszystkich – user3820621