尝试检测 CSS 属性 "left"时出现 JavaScript NaN 错误?

标签 javascript html css if-statement nan

这个问题源于我昨天问的一个问题。那个问题是:

"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;
}

从逻辑上讲,以下两行代码是否应该检测 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 的if 语句之前变量?

最佳答案

您正在查询 .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>

关于尝试检测 CSS 属性 "left"时出现 JavaScript NaN 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43310034/

相关文章:

javascript - Uncaught ReferenceError : script is not defined

javascript - 显示按钮以在滑动后向下滑动标题

jquery - Grails:如何添加 Flexslider?或其他图书馆?

html - 我怎样才能制作背景图片 scalebale

html - 如何在未设置高度的父 DIV 中适应 IMAGE?

javascript - 查找特定类型的输入框及其值

javascript - 有没有办法阻止IE10/IE11显示打开或保存提示

javascript - jQuery:影响相同深度的列表元素

javascript - 在移动设备上隐藏复选框的奇怪问题

html - 带有 CSS 的 2 个部分中间的按钮