2014-02-20 66 views
0

在jquery的动画函数中有下面的代码。在添加之后,newleft变量包含不正确的值 。不知道我是否正确的做法。关于jQuery的浮点计算

step: function(now, fx) { 

    if(fx.prop==="left") { 
     var newleft= $("p").offset().left+ now; 
    } 
    $("p").css("left",newleft) 
    } 
+0

CSS左边属性应该有一个单位,例如“px”,“em”等。 –

+0

$(“p”).css(“left”,newleft +“px”) –

+0

非常感谢您的信息。 jsfiddle.net/hLYJD newleft在动画结束时应该有400-200 = 200px,但它会得到奇怪的值,如2382.546875。这是在css函数之前。 – Arav

回答

2

now永远是绝对物业的价值,它是不是r elative到上一步。
这意味着你必须从p元素的位置减去now,而不是它的当前位置:

$("button").click(function() { 
    var a = $("p").offset().left; // get original position 

    $("div").animate({left: '-200px'}, { 
     step: function (now, fx) { 

      if (fx.prop === "left") { 
       var b = now; 
       var newleft = a + b; 
       $("body").append("<div>" + a + "::::::" + b + "------" + newleft + "</div>"); 
       $("p").css("left", newleft + "px"); 
      } 

     } 
    }); 
}); 

http://jsfiddle.net/hLYJD/1/

这仅适用于因为div位于0。如果它被定位不同,你必须从now减去div的原始位置第一,得到的相对运动:

$("button").click(function() { 
    var a = $("p").offset().left; 
    var b = $("div").offset().left; 

    $("div").animate({left: '-200px'}, { 
     step: function (now, fx) { 
      if (fx.prop === "left") { 
       var newleft = a + (now - b); 
       $("p").css("left", newleft + "px"); 
      } 
     } 
    }); 
}); 

http://jsfiddle.net/hLYJD/2/


但是,如果你想要做的是移动两个元素由相同的相对数量,那么只需使用-=200作为动画值:

$("button").click(function() { 
    $("div, p").animate({left: '-=200'}); 
}); 
+0

非常感谢您的信息。不知道如何使用简单的方法。 $(“div,p”)。animate({left:' - = 200'});非常感谢您的时间和解释。 – Arav

+0

不客气! –

+0

因为我收到一条消息,我需要等待20个小时,所以我无法向您颁发200+奖金。稍后再做。 – Arav

1

尝试添加pxnewleft变量:

var newleft= $("p").offset().left+ now + "px"; 

或追加px当你设置left值的段落:

$("p").css("left",newleft + "px") 
+0

感谢您的信息。当我打印$(“p”).css函数之前得到不正确值的newleft值时。 “px”的添加不会纠正它。 – Arav

+0

你可以创建一个小提琴来复制你的问题吗? – Felix

+0

http://jsfiddle.net/hLYJD/ newleft在动画结束时应该有400-200 = 200px,但它会得到奇怪的值,如2382.546875 – Arav