【问题标题】:Strange doings when moving a div移动 div 时的奇怪行为
【发布时间】:2012-09-08 19:17:36
【问题描述】:

我想用箭头键和 javascript(不带 jquery)移动多个 DIV。 我所有的 DIV 都有“位置:绝对”等... 我为此做了一个函数:

function move(orig, val) {
    var num = parseInt(orig);
    return ((num + val) + "px");
}

我像这样应用移动功能:

myDiv.style.left= move(myDiv.style.left, moveX);

它只是“有效”,因为我注意到当我的一个 DIV 的左样式 0 的 DIV “移动”比他快。所以如果我来回重复,最后我所有的 DIV 都有相同的左边(没有尝试这个垂直移动和顶部值)。

提前感谢您的帮助(请原谅我的英语不好)。

【问题讨论】:

  • moveX 是不变的吗?或尝试parseInt(orig, 10)。如果两者都不能解决问题,能否提供一个 jsFiddle 演示?
  • 感谢您的回答。 moveX 不是一个常数,它是一个“速度”变量。似乎问题来自 parseInt 部分。当我将var num = parseInt(orig); 替换为var num = orig.replace('px','')*1; 时,它似乎有效。

标签: javascript dom-manipulation


【解决方案1】:

我怀疑parseInt 不适合您的情况。如果您使用的是非整数,则添加例如由于整数舍入,1.5 将有效地表现为您添加了2。这会不经意间让它移动得更快。

您有多种选择:

  • 使用parseFloat 保留小数部分。
  • 使用+orig.replace("px", ""),它适用于非整数(或其他技巧,如* 1)。

【讨论】:

  • 你是对的。但我的问题并不完全来自 Integer rounding 。事实上,它来自 parseInt 应用于负左值和正左值之间的差异:-10.5 变为 -10(右侧比正常多)和 10.5 变为 10(左侧比正常多)所以最后,每个 DIV 都有与左侧的更多相同的左侧值。感谢您的回答 pimvdb
  • @Baptiste Pillon:我没有考虑过;感谢您的跟进!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 2020-09-05
  • 2018-03-04
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多