我有一个用于检查用户位置的应用,如果他们很近(小于.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语句放进去,但这也不起作用。
有没有人知道当两个条件都成立时最好的方法是什么?
答案 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查找两点之间的距离