#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. Итак, вы подтверждаете, что его код не работает, но не предоставляете решения?