Создание функции плагина с помощью jQuery

#jquery #jquery-plugins

#jquery #jquery-плагины

Вопрос:

Эй, чуваки, у меня есть следующая функция:

 $.fn.slideOut = function(speed,dir) { 
        this.animate({
            dir: '-1000px'
        }, speed);
    };
  

Но направление ( dir ) не переносится и также не выдает мне ошибку.

Я называю это примерно так: $('#element').slideOut(500,'top');

Итак, мой вопрос = почему это не анимируется? 🙁

Ответ №1:

Вы не можете использовать переменную в левой части (имя) инициализатора свойства литерала объекта, то, что у вас есть, на самом деле является именем свойства «dir». Вам придется сделать это следующим образом:

 $.fn.slideOut = function(speed,dir) { 
    var opts = {};
    opts[dir] = '-1000px';
    this.animate(opts, speed);
};
  

Немного не по теме, но, вероятно, стоит указать, что эта функция плагина не будет подключаться по цепочке. Если у вас нет веской причины не делать этого, верните this для обеспечения цепочки (в этом случае вы можете просто вернуть то, что animate возвращает, поскольку animate возвращает this ):

 $.fn.slideOut = function(speed,dir) { 
    var opts = {};
    opts[dir] = '-1000px';
    return this.animate(opts, speed);
};
  

Ответ №2:

Если вы хотите использовать имя свойства переменной, вы не можете использовать объектные литералы. Сначала вам нужно создать объект, а затем задать свойство с синтаксисом «доступ к массиву»:

 $.fn.slideOut = function(speed,dir) {
    var options = {};
    options[dir] = '-1000px';
    this.animate(options, speed);
};
  

Комментарии:

1. Отлично, спасибо — это имеет большой смысл на самом деле 1 для вас — будет принято через 11 минут : D

2. О, я не знаю, ты был на целых 11 секунд впереди меня. 😉

3. @both — ну, я проголосовал за @T.J и я принимаю @Felix, потому что справедливо есть справедливо : )

Ответ №3:

вы вызываете

 this.animate({
  dir: '-1000px'
}
  

в вашем плагине. Нормально, что он не использует полученную в качестве параметра.

Комментарии:

1. Итак, вы подтверждаете, что его код не работает, но не предоставляете решения?