|
|
|
| Добрый день,
пытаюсь передать параметр через переменную, но почему то не работает. Что я делаю не правильно?
Пример кода который анимацией меняет положение абсолютного блока. В переменную передается название параметра, например: left или top
$('.block').hover( function() {
name_param = $(this).data('param');
$(this).animate({
name_param: '0px'
}, 500 );
}, function() {
$(this).animate({
name_param: '-100px'
}, 500 );
});
|
| |
|
|
|
|
|
|
|
для: tima2010
(14.10.2013 в 15:10)
| | Если вы используете объект data источника, то зачем переменная?
$('.block').hover( function() {
$(this).animate({
$(this).data('param'): '0px'
}, 500 );
}, function() {
$(this).animate({
$(this).data('param'): '-100px'
}, 500 );
});
|
| |
|
|
|
|
|
|
|
для: confirm
(14.10.2013 в 20:46)
| | Спасибо за ответ, но при вашем варианте получают ошибку в консоли: Uncaught SyntaxError: Unexpected token this
Использование переменной мешает работе?
Использовал переменную для удобства и сокращения кода. Чтобы не писать $(this)......
просто переменная указанная в свойство не преобразуется в top или left когда я ее подставляю
видимо нельзя передать название свойства? | |
|
|
|
|
|
|
|
для: tima2010
(14.10.2013 в 20:58)
| | нашел ответ. тут http://javascript.ru/tutorial/object/intro#dobavlenie-svoystv
Есть два синтаксиса добавления свойств в объект. Первый - точка, второй - квадратные скобки:
// эквивалентные записи
o.test = 5
o["test"] = 5
Квадратные скобки используются в основном, когда название свойства находится в переменной:
var name = 'test'
o[name] = 5
Здесь имя свойства "test" является ключом в ассоциативном массиве, по которому лежит значение 5. | |
|
|
|
|
|
|
|
для: tima2010
(14.10.2013 в 21:32)
| | Это я знаю. Но что вы хотите сделать? Если то, что я спрашивал ниже, то то что вы сейчас цитируете, нужно использовать не так. | |
|
|
|
|
|
|
|
для: tima2010
(14.10.2013 в 20:58)
| | Это потому что я ошибку допустил, хотел как надо, а получилось как всегда. )
Это потому, что именем переменной пытаются переопределить имя объекта (в параметре анимации). То же самое вы пытаетесь сделать и с помощью переменной. А должно быть так:
$('.block').data({p:60});
$('.block').hover( function() {
$(this).animate({
top: $(this).data('p')
}, 500 );
}
|
Вы хотите написать один обработчик, а ему передавать куда уже его сдвигать? | |
|
|
|
|
|
|
|
для: confirm
(14.10.2013 в 21:45)
| | Да, верно, один обработчик чтобы не писать длинные условия
if(name_param == 'left')
{
}.....
>> то то что вы сейчас цитируете, нужно использовать не так.
сейчас мой код выглядит так:
$('.block').hover( function() {
n_p = $(this).data('param');
o_p = new Object();
o_p[n_p] = '0px';
$(this).animate(o_p, 500 );
}, function() {
o_p[n_p] = '-100px';
$(this).animate(o_p, 500 );
});
|
| |
|
|
|
|
|
|
|
для: tima2010
(14.10.2013 в 21:51)
| | Значит вы поступаете не правильно, это надо писать по иному - писать свою функцию передавая ей аргументы. Почитайте как в jQuery можно добавить свои объекты - $.extend(), посмотрите как пишутся плагины.
А объявить объект проще так - obj = {name : var} | |
|
|
|
|
|
|
|
для: confirm
(14.10.2013 в 22:20)
| | Вы имеете ввиду что то вроде этого?
$.fn.my_animate = function() {
var make = function() {
n_p = $(this).data('param');
o_p = {
begin: {},
end: {}
};
o_p.begin[n_p] = '0px';
o_p.end[n_p] = '-100px';
$(this).hover( function() {
$(this).animate(o_p.begin, 500 );
}, function() {
$(this).animate(o_p.end, 500 );
});
};
return $(this).each(make);
}
|
а для чего использовать extend?
Не могли бы вы объяснить чем плох этот вариант решения?
$('.block').hover( function() {
n_p = $(this).data('param');
o_p = {
begin: {},
end: {}
};
o_p.begin[n_p] = '0px';
o_p.end[n_p] = '-100px';
$(this).animate(o_p.begin, 500 );
}, function() {
$(this).animate(o_p.end, 500 );
});
|
Ведь он работает у любого объекта которому я присвою класс block.
Я делаю не правильно с точки зрения решения или с точки зрения правил?
заранее спасибо! | |
|
|
|
|
|
|
|
для: tima2010
(14.10.2013 в 23:07)
| | Я имею ввиду "да", но совсем не так как как вы пишите. Польза будет тогда, когда переданы аргументы, при этом некоторые могут быть по умолчанию.
Мне просто сейчас некогда писать много, но поищите в сети что-то типа "как написать свой jquery плагин, добавить свой метод...". Можете быть уверены, что это будет полезно. | |
|
|
|