2014-02-20 104 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