获取没有"px"的样式值的数字 后缀

B1C*_*0PS 46 html javascript css

我正在使用Javascript和HTML制作RTS游戏.听起来雄心勃勃我知道,但我不是在为这里的明星拍摄.只是一些让我受理的东西.

我目前正在研究游戏的运动部分.我有一个应该工作的运动引擎,但是有一个问题.在我的脚本中,我使用不等式语句(><)将绝对定位字符的当前左值和最高值与其目标(可能正在移动)的值进行比较.问题是我得到的反馈形式document.getElementById(nameVar).style.left是字符串(例如200px)而不是数字(例如200),因此比较不起作用.

我的问题是,有没有办法把字符串变成一个我可以操纵我想要的方式的数字?要么通过使用更改的地址,要么一旦我得到它就通过反馈预先形成一些程序.

任何帮助都会很棒.

kon*_*ddy 69

parseInt 给你数值:

var tmp = parseInt(document.getElementById(nameVar).style.left, 10);
console.log(tmp);
Run Code Online (Sandbox Code Playgroud)

或者,正如@PeteWilson在评论中建议的那样,使用 parseFloat

  • 如果你使用[`parseInt`](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt),请确保传递`10`作为第二个参数.当它没有通过时,行为并不总是可预测的.`parseInt(x,10)`. (6认同)
  • @IvanCastellanos 1)不要微观优化; 2)仍然将它留作字符串,而不是数字,所以例如`result + 5`变为`"2005"`而不是`205`. (6认同)
  • 还有一个问题:有时x和y值保持在部分像素中(至少在Firefox和Chrome的XP机器上).parseInt()扼杀了那些东西.而不是parseInt(),我发现我必须使用parseFloat(),它工作得很好,并且还具有处理整数的额外优点.也许这只是我特定设置引起的意外.但是我已经将这段代码运行了六个月并且没有遇到任何问题.您可能需要考虑使用parseFloat(). (5认同)
  • 我认为document.getElementById(nameVar).style.left.replace('px','')效率更高一点 (3认同)

Dav*_*mas 11

Konsolenfreddy的另一种方法是使用:

var numericValue = window
    .getComputedStyle(document.getElementById('div'),null)
    .getPropertyValue('left')
    .match(/\d+/);
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

这种方法的好处是它可以检索CSS中的值集,无论style在元素的属性中设置的值还是链接的样式表中,我认为 Konsolenfreddy的方法受到限制.

参考文献:

  • 您可能需要在所有内容的末尾添加一个[0],以访问值本身 (2认同)

Mar*_*har 7

您还可以使用:

element.getBoundingClientRect()
Run Code Online (Sandbox Code Playgroud)

它返回 DOMRect 对象(带有一些有用的坐标)。


Thi*_*iff 5

您可以使用.offsetLeft.offsetTop获取不带值的值,px并且返回类型为数字。

演示:http//jsfiddle.net/ThinkingStiff/2sbvL/

脚本:

var result = document.getElementById( 'result' ),
    position = document.getElementById( 'position' );

result.textContent = position.offsetLeft + ', ' + position.offsetTop;
Run Code Online (Sandbox Code Playgroud)

HTML:

<div id="position"></div>
<div id="result"></div>
Run Code Online (Sandbox Code Playgroud)

CSS:

#position {
    border: 1px solid black;
    height: 50px;
    left: 50px;
    position: absolute;
    top: 50px;
    width: 50px;
}
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入图片说明

  • 如果您使用 CSS 过渡,则当 div 移动时,offsetLeft 与 style.left 属性不同。很抱歉投了反对票。 (2认同)