В функции оживления jquery есть код ниже. newleft variable содержит неправильные значения после добавления. Не уверен, что я делаю правильный путь.
step: function( now, fx ) {
if(fx.prop==="left") {
var newleft= $("p").offset().left+ now;
}
$("p").css("left",newleft)
}
now
всегда будет абсолютным значением свойства, оно не относится к предыдущему шагу.
Это означает, что вы должны now
вычесть из исходного положения элемента p
, а не его текущего положения:
$("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");
}
}
});
});
Это работает только потому, что div
находится в 0
. Если были расположены по- другому, вы должны вычесть div
исходную позицию из now
первых, чтобы получить относительное движение:
$("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");
}
}
});
});
Но если все, что вы хотите сделать, - это перемещение обоих элементов на одну относительную величину, то просто используйте -=200
качестве значения анимации:
$("button").click(function () {
$("div, p").animate({left: '-=200'});
});
Попробуйте добавить px
в newleft
переменную newleft
:
var newleft= $("p").offset().left+ now + "px";
или добавьте px
когда вы установите left
значение вашего абзаца:
$("p").css("left",newleft + "px")