javascript - 使用普通 JavaScript 的脉冲效果

标签 javascript canvas

尝试使用普通 javascript 的 Canvas 对象创建脉冲效果。每个函数似乎都在正确调用并且我的所有值都正确记录,但由于某种原因在 ballShrink() 函数中调用 drawBall() 函数时没有任何反应。我期待它动画缩小,但它没有。 ballRadius 正在减小,但没有动画发生。我的代码在这里,JSFiddle 在这里 https://jsfiddle.net/96hthyw0/

function draw() {
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        drawBall();
  }

function ballGrow() {
    ballRadius += 1;
    drawBall();
    if (ballRadius === 20)  {
        clearInterval(ballGrowInterval);
        ballShrinkInterval = setInterval(ballShrink, 100);
    } 
}

function ballShrink()   {
    ballRadius -= 1;
    drawBall();
    if (ballRadius === 0)   {
       clearInterval(ballShrinkInterval);
    }
}

function testInterval() {
    ballGrowInterval = setInterval(ballGrow, 100);
}  

testInterval();
draw();

最佳答案

问题是您没有清除上一张图,而只是在现有图上添加新图。这是一个更新的 fiddle :https://jsfiddle.net/96hthyw0/1/但简而言之,我所做的就是将您的 ballShrink 函数更改为:

function ballShrink()   {
  ballRadius -= 1;
  draw(); // clear canvas - note you could add this to ball grow too
  drawBall();
  if (ballRadius === 0) {
    clearInterval(ballShrinkInterval);
  }
}

关于javascript - 使用普通 JavaScript 的脉冲效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37150792/

相关文章:

javascript - 检测和响应任何多边形内的球与墙碰撞

javascript - 如何将 JSON 传递给 Fetch API 响应

javascript - 如何处理react-redux应用中加载中断的情况

javascript - 从 Google 表单中检索到响应的链接

javascript - 颜色比例取决于绘制点的频率(JS Canvas)

javascript - 如何制作一系列图形圆圈,以便我可以定期重绘到屏幕上?

javascript - 使用 Twitter API 的 Jquery Ajax 401 响应

javascript - AngularJS 在属性中传递常量

java - JSplitPane 和 Canvas

c++ - 一个接一个地运行动画的方法