У меня эти две несвязанные функции, по крайней мере, нет возможности сделать обратный вызов. Сначала я хочу, чтобы список скользил вверх, ТОГДА другой вниз. Чтобы заставить его работать практически, по крайней мере, как-то, я добавил delay()
.
Я не могу сделать fsFiddle, так как код слишком сложный, и все <a>
имеют href
в нем, но вы можете увидеть рабочий пример здесь: http://liebdich.biz/.
Что будет делать здесь работа и как: queue
, promise
?
$('a').click(function(e){
e.preventDefault();
$(this).parent().find('ul').delay(500).slideDown(500);
$('a').removeClass('bold');
$(this).addClass('bold');
if ($(this).is('ul ul a')) {
return;
} else {
$('a').not(this).parent().find('ul').slideUp(500);
}
});
Извините, но я не могу создать jsFiddle, так как все <a>
в навигации имеют href
.
Это было бы подходящим местом для использования объекта обещания, чтобы избежать дублирования обратных вызовов:
$('a').click(function (e) {
e.preventDefault();
var $this = $(this);
$('a').removeClass('bold');
$this.addClass('bold');
if ($this.is('ul ul a')) {
$this.parent().find('ul').slideDown(500);
return;
} else {
$('a').not(this).parent().find('ul').slideUp(500).promise().done(function(){
$this.parent().find('ul').slideDown(500);
});
}
});
$this.parent().find('ul').slideDown(500);
дважды, поэтому я удалил первый, все еще работает !! ;) Я должен понять, что ты сделал сейчас. Хорошо тебе провести время!! : D
С JQuery часто у вас есть анимация - функция обратного вызова, которая вызывается после завершения анимации. Вот документация slideUp: http://api.jquery.com/slideUp/
Как вы можете видеть, если вы используете два параметра, второй из них касается полной функции, которая вызывается после завершения анимации.
$('a').click(function(e){
var _link = $(this);
$('a').not(_link ).parent().find('ul').slideUp(500, function() {
$(_link).parent().find('ul').delay(500).slideDown(500);
});
});
Я редактировал свой код с некоторым кодом. Я по-прежнему считаю, что вам нужно будет использовать функцию обратного вызова для вашей проблемы.
$('a').not(this).parent().find('ul').slideUp(500, function() {
$(this).parent().find('ul').delay(500).slideDown(500);
});
this
, вам нужно хранить его во временной переменной.
.promise().done(fnhere)
а не полный обратный вызов, так что это произойдет только один раз..promise()
о.promise()
? Спасибо!