JavaScript:事件侦听器函数无法识别屏幕上超过某个点的事件



我有一个用JavaScript构建的游戏,你可以把硬币从龙下面拖到金库里得分。

游戏参考:https://codeeverydamnday.com/projects/dragondrop/dragondrop.html

只有当你把硬币扔到金库的范围内时,你才能得到分数。保险库边界在这些绝对位置内:

保险库的左边缘:距离屏幕左侧645px
保险库的右边缘:距离显示屏左侧915px
保险库的上边缘:距离屏顶边缘290px
1保险库的下边缘:距离画面顶边缘540px
2

在你扔硬币时运行的功能上,我有一个";如果";只有当你扔下的硬币有新的x-y坐标在保险库范围内时,才能将你的分数相加的语句(只显示相关代码,如果需要,可以提供更多(:

function moveDrop(e) {
e.preventDefault ();
coin.style.left = e.pageX - myX + 'px';
coin.style.top = e.pageY - myY + 'px';
// myX and myY are the coin's original x-y coordinates. This line resets their new x-y coordinates after the drop
if (
coin.style.left > "645" && 
coin.style.left < "915" && 
coin.style.top > "290" && 
coin.style.top < "540") {
// Function that adds your score each time you drop a coin in the vault
}
}

上面的函数可以正常工作。老实说,我不确定是怎么回事,因为coin.style.left的值会像700px一样,我要求它检查它是否大于645(没有px(,但它有效。

然而,我试图简单地将vault向右移动200px,使其新的x坐标边界从屏幕左侧的845到1115px(而不是645和915(。

当我将vault图像的绝对位置更新为845px时,它移动得很好。当我在上面的if语句中将coin.style.left > "645"更新为coin.style.left > "845"时,它工作正常。

然而,当我将coin.style.left < "915"更新为coin.style.left < "1115"时,我可以将一枚硬币拖到保险库中,但投掷监听器没有意识到硬币落在保险库边界内,因此不会将您的分数相加。

我做了一些测试,结果证明它是有效的,直到我将左边缘属性更改为coin.style.left < "999"。一旦我将其更改为1000或更高,它就会断开。我不确定这是否与数字1000本身有关,或者它现在是4个字符而不是3个字符。

movedrop事件处理程序正在侦听body元素上的操作,所以我认为文档正文可能只有1000px。然而,我在css中将其设置为1200px。

body {
width: 1200px;
height: 650px;
}

我试着用Chrome开发工具检查元素,看看1000px之后是否有隐藏的边距。我什么也看不见。有一个右边距,但仅超过1200像素。

我搜索了";1000〃;在我的index.html、style.css和script.js文件中到处都是,看看是否有其他设置为1000,但什么都没有。我是否遗漏了任何可能阻止函数在1000px以上正常运行的内容?

如果需要,我可以提供完整的代码。

我找到了问题的答案。我试图比较两个字符串值,而不是两个数值。

例如,在下面的代码(从上面的描述缩短为相关代码(中,coin.style.left值可能最终类似于"760px"

function moveDrop(e) {
coin.style.left = e.pageX - myX + 'px';
if (
coin.style.left > "645" {
// Do some stuff
}
}

然后,在if语句中,我问是否";760px";大于";645〃;。由于我在值周围使用引号,所以我比较的是字符串而不是数字。我不妨问一下;狗;大于";椅子"函数不知道该如何处理。

我通过首先将CCD_;px";之后,使用这个子字符串方法:

function moveDrop(e) {
coin.style.left = e.pageX - myX + 'px';
var finalLeft = coin.style.left.substr(0, coin.style.left.length-2);
if (
finalLeft > 645 {
// Do some stuff
}
}

变量CCD_ 15取CCD_;760px";,找到字符串的长度(在这种情况下为5(,并从末尾减去2个字符,只剩下"0";760〃;。然后,if语句可以比较760是否大于645。

一旦我进行了这个更新,我就可以成功地将宽度增加到1200px,而不会出现问题。

最新更新