Почему эти функции Javascript дают разные результаты?

#javascript #jquery #function #animation

#javascript #jquery #функция #Анимация

Вопрос:

У меня есть функция:

 var myAnimation = function(){
    $(".next_action").css({'bottom':"-100%","left":"0"}).animate({'bottom':"0"},1000);
    $('.active').animate({'top':"-100%"},1000);
}
  

это берет два объекта и анимирует их, создавая эффект скольжения.

Чтобы получить поддержку нескольких направлений, я инкапсулировал позиции в аргументы:

  var myAnimation = function(inE,outE){
        $(".next_action").css({inE:"-100%","left":"0"}).animate({inE:"0"},1000);
        $('.active').animate({outE:"-100%"},1000);
    }
  

Которую я теперь могу вызвать таким образом:

 myAnimation('bottom','top');
  

Насколько я понимаю, эти функции должны быть полностью эквивалентны, но первая работает, вторая — нет. Анимация вообще не выполняется, новый объект просто переходит в нужное положение.

Ответ №1:

{inE:"-100%","left":"0"} создает объект с ключом inE и key left . Единственный раз, когда вам нужно заключить ключ в кавычки в JavaScript, это если это зарезервированное слово ( if , else и т.д.) Или содержит управляющие символы ( - , : { ).

Вместо этого вам понадобится что-то вроде этого;

 var myAnimation = function(inE, outE) {
    var animObjA = {
        left: 0
    };
    var animObjB = {};
    var animObjC = {};

    animObjA[inE] = "-100%";
    animObjB[inE] = "0";
    animObjC[outE] = "-100%";

    $(".next_action").css(animObjA).animate(animObjB, 1000);
    $('.active').animate(animObjC, 1000);
}
  

Который использует обозначения в квадратных скобках для задания свойств объектов