1

我一直在测试一个简单的循环,它可以在屏幕上移动一些东西——但是在通过 jQuery 设置 CSS 属性时,我看到了奇怪的行为(几乎肯定与浮动错误有关)。

基本上我反复做这样的事情

var val = parseInt($(myobject).css("left));
val -= 7;
$(myobject).css("left",val+"px");

如果我在那之后测试“左”属性的值,我会看到如下结果

1042
1035
1028
1020 <<<< !!!!
1013
1006
...

进一步挖掘,似乎正在发生的是我这样做

$(myobject).css("left","1021px")
alert($(myobject).css("left"))

警报显示的是“1020.99876152371253716253px”

我能想到的是,jQuery 在内部剥离了“1021px”并分配了一个非圆形/固定/天花板/地板版本的数字!?

不知道在哪里提出这个问题,或者我是否遗漏了什么!?!?

ps 更新说我在最新的公共 Chrome/W7-64 上看到了这个

pps 我将我的整个代码(没有 webfont 和 1 个外部函数)复制到 JSFiddle 中并且它没有行为异常(即使在全屏模式下) - 但是代码在独立运行时继续行为异常(尽管在各个方面都是相同的代码!!)所以我对这个越来越迷惑了...

还有更多 ps 这只发生在 Chrome 中,在 IE (9) 和 Firefox (14) 中它可以正常工作 - 很明显我偶然遇到了一个怪癖,而且是一个非常具体的怪癖(因为它在 jsFiddle 中不可重现!!)

4

2 回答 2

0

根本不解析值,使用变量来保持值,只设置样式。

例子:

$(document).load(function(){
  var x = 2000;
  var timer = window.setInterval(function(){
    if (x > 10) {
      x -= 7;
      $('.myobject').css("left", x + "px");
    } else {
      window.clearInterval(timer);
    }
  }, 100);
});
于 2012-07-31T08:18:49.313 回答
0

jQuery 正在分配您指定的值(“1021px”)。产生浮点值的是浏览器。不久前,我在一个版本的 IE 中遇到了类似的问题。

你可以这样处理:

var val = Math.round( parseFloat( $( myobject ).css( 'left' ) ) );
于 2012-07-31T01:22:43.557 回答