2015-10-06 86 views
2

我想获得一个移动div的位置(使用CSS3动画动画)和连续检查它我使用的是while(true)像下面javascript代码挂在网页

function detectCollision(){ 

    alert(document.getElementById("obstacle").style.left) 

    while(true){ 
     var temp = getObstaclePosition(); 

     var temp2 = getPlanePosition(); 
     if(temp[0] <= temp2[0]+500){ 
      document.getElementsByClassName("plane")[0].style.display = "none"; 
      break; 
     } 
    } 
} 

这里的问题是,经过第一个提醒页面挂起。此外,如果我在while循环中放置一个警报,那么它会一直弹出并且代码正常工作,但不会以其他方式工作。 让我知道如何解决这个问题?

+4

不使用',而(真)',使用[requestAnimationFrame(HTTPS:/ /developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) – trebor

+0

循环中的任何内容都不会改变'temp [0]',所以没有任何东西会使循环退出。 – Pointy

+0

虽然循环只是要锁定您的浏览器,这将阻止其他进程运行。您需要使用间隔或超时来防止锁定。 – epascarello

回答

2

而不是使用一个while (true),这是昂贵的,你可以使用setInterval

a = setInterval(function() { 
    var temp = getObstaclePosition(); 

    var temp2 = getPlanePosition(); 
    if(temp[0] <= temp2[0]+500){ 
     document.getElementsByClassName("plane")[0].style.display = "none"; 
     clearInterval(a); 
    } 
}, 100); 
+1

这不会按照你所做的方式工作,如果if语句返回“false”,什么都不会发生。 –

+0

@StephanBijzitter哪种说法? – 2015-10-06 14:11:48

+0

'声明',编辑修复这个错字哈哈 –

2

的JavaScript运行在同一个线程,因此,如果在某个循环中占有这个具有无限循环,剩下的就是不能再运行。

至于你的循环替代,你可以使用setInterval,其中重复执行的函数或代码片段:

setInterval(new function() { 
    // whatever 
}, 100); // repeat every 100 ms, i.e. 10 times per second