Что касается вычисления jQuery с плавающей запятой

0

В функции оживления jquery есть код ниже. newleft variable содержит неправильные значения после добавления. Не уверен, что я делаю правильный путь.

  step: function( now, fx ) {

    if(fx.prop==="left") {
       var newleft= $("p").offset().left+ now;
     }
     $("p").css("left",newleft)
   }
  • 0
    CSS-свойство left должно иметь единицу, например, «px», «em» и т. Д.
  • 0
    $ ("p"). css ("слева", newleft + "px")
Показать ещё 2 комментария
Теги:

2 ответа

2
Лучший ответ

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");
            }

        }
    });
});

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

Это работает только потому, что 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");
            }
        }
    });
});

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


Но если все, что вы хотите сделать, - это перемещение обоих элементов на одну относительную величину, то просто используйте -=200 качестве значения анимации:

$("button").click(function () {
    $("div, p").animate({left: '-=200'});
});
  • 0
    Большое спасибо за информацию. Не знал об использовании простого способа сделать это. $ ("div, p"). animate ({слева: '- = 200'}); Большое спасибо за ваше время и объяснения.
  • 0
    Пожалуйста!
Показать ещё 1 комментарий
1

Попробуйте добавить px в newleft переменную newleft:

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

или добавьте px когда вы установите left значение вашего абзаца:

$("p").css("left",newleft + "px")
  • 0
    Спасибо за информацию. Когда я печатаю значение newleft, получаем неправильное значение перед функцией $ ("p"). Css. добавление «px» не исправляет это.
  • 0
    Можете ли вы создать скрипку, чтобы повторить вашу проблему?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню