弹跳球在Firefox中消失了

时间:2015-06-06 21:16:58

标签: javascript firefox animation two.js

我用Two.js写了一个简单的弹跳球动画。这只是一个从墙上弹起的球。它对我来说在Chrome中运行得很好,但是在Firefox中,球会消失并在几秒钟后再次出现在屏幕的另一部分,这意味着球正在移动,随机变得暂时不可见。

这是我的代码:

var elem=document.querySelector("div");
var h=window.innerHeight;
var w=window.innerWidth;
var two=new Two({fullscreen: true}).appendTo(elem);
var vy=5, vx=5;

var circle1=two.makeCircle(300,200,50);
circle1.fill="orange";
circle1.stroke="purple";
circle1.linewidth=5;

two.bind("update", function(frameCount){
    circle1.translation.x+=vx;
    circle1.translation.y+=vy;
    if(circle1.translation.x+30>w||circle1.translation.x-30<0){
        vx*=-1;
        circle1.translation.x+=vx;
    }
    if(circle1.translation.y+30>h||circle1.translation.y-30<0){
        vy*=-1;
        circle1.translation.x+=vy;
    }
}).play();

JSFiddle Example

同样,Chrome中也能正常运行。

此外,如果我用画布替换div并使用它,它在Chrome和Firefox中都能正常工作:

var canvas=document.querySelector("canvas");
var w=window.innerWidth, h=window.innerHeight;
canvas.width=w;
canvas.height=h;
var context=canvas.getContext("2d");
var vx= 5, vy=5;

var ball={
    x: 300,
    y: 200,
    radius: 50
};

function draw(){
    context.fillStyle="orange";
    context.beginPath();
    context.arc(ball.x,ball.y,ball.radius,0,Math.PI*2,false);
    context.closePath();
    context.fill();
}

(function animate(){
    var timer=setInterval(function(){
        context.clearRect(0,0,w,h);
        ball.x+=vx;
        ball.y+=vy;
        if(ball.x+ball.radius>w||ball.x-ball.radius<0){
            vx*=-1;
            ball.x+=vx;
        }
        if(ball.y+ball.radius>h||ball.y-ball.radius<0){
            vy*=-1;
            ball.y+=vy;
        }
        draw();
    },1000/60);
}());

如果有人能解释这种奇怪的行为,那就太好了。

0 个答案:

没有答案