0

視差スクロールを利用したウェブサイトを開発しています。クロムでは美しく見えますが、キャンバスに描画したい画像はどれもFirefoxでレンダリングされていません. 私は困惑しています。

HTMLは次のとおりです。

<!DOCTYPE html>

<html>

<head>
    <meta charset='utf8'>
    <link rel='stylesheet' type='text/css' href='style.css'>
</head>

<body>
    <canvas id='canvas' width="400" height="200"></canvas>
    <img id='dog' src='dog.gif'>

    <script src='script.js'></script>
</body>

</html>

そしてJavascript:

  //  shim layer with setTimeout fallback
window.requestAnimFrame = (function(){
  return  window.requestAnimationFrame       ||
          window.webkitRequestAnimationFrame ||
          window.mozRequestAnimationFrame    ||
          window.oRequestAnimationFrame      ||
          window.msRequestAnimationFrame     ||
          function( callback ){
          window.setTimeout(callback, 1000 / 60);
          };
})();

(function(win, d){

    var $ = d.querySelector.bind(d);
  var w = window.innerWidth;
  var h = d.height;
    var canvas = $('#canvas');
    var ctx = canvas.getContext('2d');
  var dog = $('#dog');
  var ticking = false;
  var relativeY = win.scrollY / h;

  function updateElements(){
    ctx.drawImage(dog, 10, pos(50, 0, relativeY, 0));
  };

  function paint(){
    requestAnimFrame(updateElements)
  };

  function onScroll(){
    if(!ticking){
      ticking = true;
      requestAnimFrame(updateElements);
      var lastScrollY = win.scrollY;
    }
  }

    function pos(base, range, relY, offset) {
    return base + limit(0, 1, relY - offset) * range;
  }

  function limit(min, max, value) {
    return Math.max(min, Math.min(max, value));
  }

  win.addEventListener('load', paint, false);
  win.addEventListener('scroll', onScroll, false);

})(window, document);

ありがとうございました!

4

1 に答える 1

0

私はいくつかの異なる操作システムとFirefoxと異なるPCの最後のバージョンでゲームを実行してチェックし、20 fpsを取得するため、Firefoxは良好なパフォーマンスを表示する準備ができていないと思います

Chromeで同じゲームを実行すると、60 fpsになりました

このゲームテスターを実行して自分で試すことができます

左側上部に小さなウィンドウ テスターが表示され、firefox でのパフォーマンスが 30 になると表示されます。悪いと思います。

于 2013-02-12T19:59:52.473 に答える