2012-02-23 2 views
-1

Моя простая функция JQ выглядит, чтоJQuery функция вопрос

$.fn.animateHighlight = function(highlightColor,type, duration) { 
    var highlightBg = highlightColor || "#FFFF9C"; 
    var animateMs = 1500; 
    this.stop().css(type, highlightBg).delay(duration).animate({ 
     type: "black" 
    }, animateMs); 
}; 

Вызов как этот

$("#qparamstitle").animateHighlight("red","color", 3000); 
$("#params").animateHighlight("red","border-color", 3000); 

пытается сделать тип - переменную. Все работает хорошо, кроме анимации. Что я сделал не так, и как заставить его работать?

+1

Так объяснить, что сломано, и что вы ожидаете произойдет вместо этого. Кроме того, публикация примера jsFiddle поможет людям помочь вам. – Sparky

+3

Наведите указатель мыши на стрелку вниз, чтобы увидеть некоторые веские причины для голосования. Жаловаться на подавляющее количество голосов и вызывать пользователей этих имен форума, скорее всего, даст вам намного больше голосов. – Sparky

+0

@ Sparky672 'type:" black "' type является переменной. Это может быть пограничный цвет, цвет .. что-то еще. Функция анимации не принимает переменные paramaeter – heron

ответ

1
{ 
    type: "black" 
} 

Это объект с ключом "type". Вы не можете использовать переменные как ключи в объектных литералах.

Необходимо сначала указать переменную, а установить значение с помощью [].

$.fn.animateHighlight = function(highlightColor,type, duration) { 
    var highlightBg = highlightColor || "#FFFF9C"; 
    var animateMs = 1500; 
    var animateVal = {}; // declare object 
    animateVal[type] = 'black'; // set `type` value 
    this.stop().css(type, highlightBg).delay(duration).animate(animateVal, animateMs); 
}; 
+0

Oh .. кажетсяграничный цвет не будет работать. для css это 'border-color' для анимации' borderColor'. Как я могу исправить эту проблему? – heron

+1

Попытайтесь понять это решение. 'border-color' будет работать так же, как' borderColor', но _You не может использовать переменные как ключи в объектных литералах_ – elclanrs

+0

@elclanrs тестовое решение, под которое вы прокомментировали – heron

0

Вам нужно JQuery UI, чтобы иметь возможность animate colors, JQuery только не поддерживает его.

Кроме того, способ передачи объекта опции в функцию анимации не сработает. Вы должны создать объект вне функции и передать объект:

$.fn.animateHighlight = function(highlightColor,type, duration) { 
    var highlightBg = highlightColor || "#FFFF9C"; 
    var animateMs = 1500; 
    // create objects for the animation options 
    var o = {}; 
    // using the array notation 
    // you can create a property of name "type" 
    o[type] = 'Black'; 
    this.stop().css(type, highlightBg).delay(duration).animate(o, animateMs); 
}; 

DEMO

+0

Я уже включил jquery-ui в проект. Поэтому вы можете предложить свое решение jq-ui. – heron

Смежные вопросы