canvas drawImage 闪屏问题

代码如下 在进行

if(-ballX >= canvas.width-10){
     ballX = 0
     ctx.drawImage(img,canvas.width, 0,0,0); 
}

这个地方判断的二次重新绘制的时候会出现闪屏 有大神知道怎么解决吗?
<!DOCTYPE html>
<html lang="en">
<head>

<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>loading</title>
<style>
    #loading{
        display: block;
        margin: 0 auto;
    }
</style>

</head>
<body>

<canvas id="loading" width="187" height="91"></canvas>
<script>
    var requestAnimationFrame = requestAnimationFrame ? requestAnimationFrame : webkitRequestAnimationFrame,
          cancelAnimationFrame  = cancelAnimationFrame ? cancelAnimationFrame : webkitCancelAnimationFrame;
    var canvas = document.getElementById('loading')
    var ctx = canvas.getContext("2d")
    /*  
    设置背景  
        createPattern(img,平铺方式)  
        平铺方式:repeat,repeat-x,repeat-y,no-repeat  
    */  
    var imgs = new Image();  
    var xspeed = -2;
    var ballX = 0
    // imgs.src = "../loading/images/bg.png";  
    // imgs.onload = function() {  
    //   ctx.drawImage(imgs, 0, 0);  
    // }
    var img = new Image();
        img.src = "../loading/images/bg.png"; 
    function animate(){
        requestAnimationFrame(animate);
        draw();
    }
    requestAnimationFrame(animate);
    function draw(){
        
           ballX += xspeed;
        ctx.beginPath();
        if(-ballX >= canvas.width-10){
           ballX = 0
           ctx.drawImage(img,canvas.width, 0,0,0); 
        }else{
           ctx.clearRect(0,0,canvas.width,canvas.height);
           ctx.drawImage(img,ballX, 0); 
        }
        ctx.closePath();
    }
</script>

</body>
</html>

阅读 7.3k
1 个回答

闪烁是因为图片从无到有,视觉上的差异性导致的,不是代码的问题,你可以改下实现逻辑,如:渐进式的 无--有--无

var img = new Image();
img.onload = animate;
img.src = "http://p0.so.qhimgs1.com/bdr/200_200_/t01f83d392c3132fa1a.jpg"; 
function animate(){
    requestAnimationFrame(animate);
    draw();
}
function draw(){
    ballX += xspeed;
    ctx.beginPath();
    ballX = (-ballX >= canvas.width-10)?canvas.width:ballX
    ctx.drawImage(img,ballX, 0); 
    ctx.closePath();
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题