【问题标题】:JavaScript NaN error when trying to detect CSS property "left"?尝试检测 CSS 属性“左”时出现 JavaScript NaN 错误?
【发布时间】:2017-09-04 17:19:41
【问题描述】:

这个问题背离了我昨天提出的一个问题。那个问题是:

"if" statement parameters not functioning as intended. JavaScript

但现在我在实现以下代码时遇到 NaN 错误:

var targetBoxLeft = parseFloat(document.getElementById("targetBox").style.left);
bulletOne.style.left = bulletOneLeft;

if (bulletOneLeft > targetBoxLeft){
document.getElementById("targetBox").style.opacity = "0";   
};

昨天我没有使用“parseFloat”,但是我的问题是,如果我专门将 targetBoxLeft 的参数描述为 CSS style.left 属性;为什么不是一个特定的数字?为什么不采用 left: 310px;由元素属性本身指定?

#targetBox{
position: absolute;
background-color: green;
height: 20px;
width: 20px;
top: 30px;
left: 310px;
opacity: 1;
}

从逻辑上讲,以下 2 行代码应该检测 ACTUAL 数字吗?;

var bulletOneLeft = bulletOne.style.left;
var targetBoxLeft = targetBox.style.left;

然后一旦上述变量被检测为实际数字,下面的 if 语句代码是否能够在任何给定时间根据它们的值比较它们是否移动(bulletOneLeft++;) 参与?:

if (bulletOneLeft > targetBoxLeft){
document.getElementById("targetBox").style.opacity = "0";   
};

我不完全确定发生了什么,但由于当代码读取 targetBox.style.left 时出现 NaN 错误,我猜测可能 CSS 属性需要额外的代码才能转换为实际数字/在我使用相应的 VAR's 运行 if 语句之前的变量?

【问题讨论】:

  • 也许脚本在 CSS 不确定之前先加载,或者尝试访问任何其他属性
  • 如果我把“px”拿出来,它仍然把它当作一个“字符串”——310不是一个数字吗?不是要讽刺,我的意思是css style.left 310的属性不是实际数字吗?

标签: javascript html css if-statement nan


【解决方案1】:

您正在查询.style.left 属性,该属性与计算样式不同。 .style 元素的属性引用 style 属性值。 parseFloat("") 返回NaN。使用window.getComputedStyle()

var div = document.querySelector("div");
console.log(div.style.left, parseFloat(div.style.left));
console.log(parseFloat(window.getComputedStyle(div).getPropertyValue("left")));
div {
  position: relative;
  left:310px;
}
<div>div</div>

【讨论】:

  • 您没有在 jsfiddle 的 2930 行的 Answer 处实施方法? targetBoxLeft 仍然是 if 语句块 jsfiddle.net/7hm1jrvw/1 处的字符串
  • 在哪里?为什么targetBoxLeft 在您引用的行后面的if 语句块中是一个空字符串?请参阅 console 链接的 jsfiddle 上一条评论。
  • “它不在 jsfiddle 链接中” ?这就是stackoverflow.com/questions/43310034/… 提出的问题;也就是说,执行没有返回预期结果? “不想用复合的不工作的代码让兔子整个不工作的代码”您可以部分调整代码,然后在某些返回预期结果时移动到下一部分,而不是尝试解决一次完成整个代码。
  • "targetBox" 不是htmlvar targetBox = document.querySelector("targetBox"); 元素,您还可以覆盖之前分配的targetBox 变量var targetBox = document.getElementById("targetBox"); 的值。此外,元素引用应传递给window.getComputedStyle(),而不是字符串,(parseFloat(window.getComputedStyle("targetBox").getPropertyValue("left")));jsfiddle.net/7hm1jrvw/3
  • 哇,太感谢了,我会非常仔细地阅读这篇文章,因为它有点复杂,但我认为一旦我对你所做的事情有了深刻的理解,它将对我的其余部分有所帮助这个项目。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多