有两个条件的循环始终为真

时间:2019-06-19 18:24:55

标签: javascript jquery

我有一个用于检查用户位置的应用,如果他们很近(小于.05 m),他们可以单击一个div;如果他们很远(大于.05 m),他们可以无法单击它。

问题是我在不同地方的坐标不同,如果您位于其中之一,则应该可以单击它。这使条件始终为真,因为对于某些位置,您可能会很远,但是对于某些位置,它就会是正确的(如果您受约束)

我尝试了while语句,当您进入某个位置时该语句有效,但是如果您退出,则永远不会消失也不显示我的横幅。

//BEING ABLE TO CLICK DIV
while (distance < .05) {
   restaurantImAt = nameRestaurant

   $('.div-image').attr('src', '/assets/picture.svg')
   $('#div').removeClass('disable')

//THIS DOESNT WORK EVENT IF ITS TRUE IF YOURE NOT OUTSIDE THE .05
   if (distance > .05){
      disableDiv()
      $('.page-intro').prepend(
                            `<p class="outside-location"><i class="fas fa-exclamation-circle"></i> You are currently out of bound</p>
      `);
   }
   break
}

我也尝试过只做while(distance){并将if语句放进去,但这也不起作用。

有没有人知道当两个条件都成立时最好的方法是什么?

3 个答案:

答案 0 :(得分:1)

您无法理解的是,一旦进入while循环,while循环之外的任何代码都将不再执行。

由于您的while循环distance 内部 没有任何变化,因此其中的代码将永远执行。

Javascript是单线程的,而while循环位于其中,它将是在该线程上执行的唯一代码,这确实意味着distance将永远保留进入循环时的值,因为任何可能更改distance的代码都永远不会有执行的机会。

您可以使用while循环,只需确保在distance条件下执行计算while的代码即可:

 while (getDistance() < .05) { /* do stuff */ }

(假设getDistance是返回当前distance的函数)。

答案 1 :(得分:0)

检查此部分:

while(condition){
    if(!condition){/*never executes*/}
}

您的循环中的代码仅在distance < 0.05时执行,而您的循环条件是检查distance > 0.05。如果您在循环内,则意味着第一个条件已满足,这意味着第二个条件(反条件)将永远不成立。

您应该解开逻辑……很难猜出您的用例,但是像每次距离改变时都会触发的回调之类的东西。收听onDistanceChange事件或类似事件以执行以下操作:

const onMouseMove = () =>{
    if( getDistance(position) > 0.05) {//Do something}
    if( getDistance(position) < 0.05) {//Do something different}
}

答案 2 :(得分:0)

此代码从未达到

    if (distance > .05)
    {
      disableDiv()
      $('.page-intro').prepend(`<p class="outside-        location"><i class="fas fa-exclamation-circle"></i> You are         currently out of bound</p>
    `);
    }
    break

似乎如何计算两点之间的距离存在问题,请尝试使用此https://m.wikihow.com/Find-the-Distance-Between-Two-Points查找两点之间的距离