2013-07-10 2 views
0

Я пытаюсь обернуть централизовать вызова JQuery .animate н мое приложениеКак обернуть jquery aimate?

$('#' + this.elmItem).animate({"top": moveTo}, speed, function() { 
     var item = scope.getItemSizeDom(); 
     scope.saveItemSize(item); 
    }); // This works 

Я пытаюсь обернуть в методе без успеха, не могли бы вы сказать мне, что я делаю неправильно здесь пример того, как исправить Это?

this.itemAnimate = function(direction, moveTo, speed) { 
    $('#' + this.elmItem).animate({direction: moveTo}, speed, function() { 
     var item = scope.getItemSizeDom(); 
     scope.saveItemSize(item); 
    });// This does not work 
}; 

this.itemAnimate("top", moveTo, "fast"); 
+0

Вы видите ошибки? – cfs

+0

Что такое 'this', и зачем itemAnimate быть цепным, это просто функция? – adeneo

+0

извините ... метод item анимировать он есть в классе – GibboK

ответ

2

Вы можете передать объект в качестве параметра для анимации метод:

this.itemAnimate = function (direction, moveTo, speed) { 
    var param = {}; 
    param[direction] = moveTo; 
    $('#' + this.elmItem).animate(param, speed, function() { 
     var item = scope.getItemSizeDom(); 
     scope.saveItemSize(item); 
    }); // This does not work 
}; 
+0

Что мне нужно! благодаря! – GibboK

+0

Не могли бы вы рассказать мне, что такое param [direction] ??? – GibboK

+1

Используя объектную литературную нотацию, вы можете определить ключ свойства объекта, используя переменную строку. Я не знаю, если это ваш вопрос. Этот код дает объект: '{top: moveTo}' где moveTo - это значение, переданное как param –

0

Некоторые чтения: http://odetocode.com/blogs/scott/archive/2007/07/05/function-apply-and-function-call-in-javascript.aspx

Функция не знает, что this происходит потому, что он не имеет контекст. Дайте ему контекст, как это:

this.itemAnimate.apply(this, ["top", moveTo, "fast"]); 

, а не

this.itemAnimate("top", moveTo, "fast"); 

Но было бы лучше, если бы вы псевдонимами this в какой-то другой переменной, чтобы он не затерялся в цепочке областей видимости.

var my_thing = this; // be descriptive about what it is exactly. 
my_thing.itemAnimate.apply(my_thing, ["top", moveTo, "fast"]); 
1

Вам нужно создать базовый JQuery плагин:

$.fn.itemAnimate = function(direction, moveTo, speed) { 
    var params = {}; 
    params[direction] = moveTo; 
    $(this).animate(params, speed, function() { 
     //do something here 
    }); 
}; 

А потом называют это:

$("whatever").itemAnimate("top", moveTo, "fast"); 

И в jsFiddle