js使用while条件判断之后,页面刷新无响应

1、问题背景是一个简单的关于canvas画一个曲线的页面,我需要在某个时候停止画布的绘制动作,其中使用了定时器,判断条件是变量var i 的值。当i达到预定值时,清除定时器。用if进行判断的时,绘制完成之后,刷新页面可以立即重新绘制。可是使用while判断时,页面刷新一直是无响应。

clipboard.png

2、源代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>canvas demo-01</title>
</head>

<body>
    <canvas id="drawing" width="1000" height="500">This is a canvas</canvas>
</body>

<script type="text/javascript">
  var drawing = document.getElementById("drawing");
  if(drawing.getContext){
    //获取canvas的上下文
    var context = drawing.getContext('2d');
    //到现在为止canvas里面还是没有东西的
    //如果需要在canvas中画东西获取上下文之后,进行下面的操作
    context.moveTo(0,250);
    context.strokeRect(0,0,1000,500);

    //------------开始--------------
    var timer = window.setInterval(function(){
      run(context);
    },100);
    //i:表示横坐标
    var i = 0;

    function run(ctx){
      //条件限制---使用if没毛病
      // if(i==50){
      //   console.log("lllll");
      //   window.clearInterval(timer);
      // }
      //限制条件---使用while时刷新页面无响应
      while(i==160){
        window.clearInterval(timer);
      }
      var lon = 3*i;
      var lat = 250+Math.sin(i/10)*100;
      ctx.lineTo(lon,lat);
      ctx.strokeStyle = "#0000ff";
      ctx.stroke();
      ctx.fillStyle = "#0000ff";
      i = i+1;
        
    }
    //-------------结束----------

  }else{
    console.log("Browser is not supported!");
  }
</script>

</html>

3、在我的理解里if和while在我的这段代码中功能是一样的,怎么会有这样的问题存在。平时一般都是用if比较多,不知while是否有什么坑,希望大家指点

阅读 4.1k
3 个回答

在while里面加一个break,不然当i等于160的时候,就是死循环了,所以页面才会挂掉

while会执行好多遍,只要条件不变就反复运行你的代码,if只是执行一遍你的代码。

简单来说,while会出现死循环,if不会

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题