2009-04-09 4 views
28

Если элемент удаляется, я хотел бы его погасить и сдвинуть остальные элементы, чтобы заполнить пустое пространство. Теперь, когда я использую fadeOut(), элемент не имеет высоты в конце, что приводит к тому, что другие предметы подпрыгивают (вместо того, чтобы скользить вверх хорошо).jQuery: FadeOut then SlideUp

Как я могу slideUp() и элемент сразу после fadeOut()?

+0

я переписал мое, так что это переключение в настоящее время. – Powerlord

+1

Следует отметить, что причина, по которой fadeOut вызывает скачок, заключается в том, что после того, как непрозрачность анимирована до 0, на дисплее установлено значение none. fadeTo не делает этого, поэтому решения работают ниже. –

ответ

39
jQuery.fn.fadeThenSlideToggle = function(speed, easing, callback) { 
    if (this.is(":hidden")) { 
    return this.slideDown(speed, easing).fadeTo(speed, 1, easing, callback); 
    } else { 
    return this.fadeTo(speed, 0, easing).slideUp(speed, easing, callback); 
    } 
}; 

Я тестировал его на JQuery 1.3.2, и он действительно работает.

Редактировать: Код, из которого я его вызываю. # Слайд-то фейдерное это идентификатор кнопки элемента, статья-текст представляет собой класс на сОн теге:

$(document).ready(function() { 
    $('#slide-then-fade').click(function() { 
    $('.article-text').fadeThenSlideToggle(); 
    }); 
}); 

Edit 2: Модифицированный использовать встроенный slideUp.

Edit 3: переписан как переключатель, и используя fadeTo

+0

Мне пришлось отказаться от параметра «easing», чтобы заставить «callback» работать. – bart

+0

А, ОК. Насколько я помню, слайды и затухания имеют разные аргументы для ослабления, поэтому аргумент ослабления в любом случае бесполезен. – Powerlord

+1

Можно ли сделать это вложенным? Я пробовал это> http://jsfiddle.net/59CQf/2/, но он не работает – deathlock

1

Не можете ли вы его связать?

$('myelement').fadeOut().slideUp(); 

EDIT:

this Может поможет, а?

+0

Нет, он никуда не исчезает, а затем делает жесткий шаг на элементе DOM. –

+0

А я вижу, это боль. – Kezzer

+0

Нет, он вскакивает в конец fadeOut(). – bart

-1

Функция FADEOUT принимает второй необязательный аргумент функции обратного вызова, так что вы должны быть в состоянии сделать что-то вроде этого:

$('elementAbove').fadeOut(500, function() { 
    $('elementBelow').slideUp(); 
}); 

EDIT: забыл добавить скорость FADEOUT в качестве первого параметра

+0

Он все еще вскакивает :( – bart

+0

Что такое HTML и CSS, которыми вы управляете? –

+0

это не работает, потому что вы эссеально сделали то же самое, что и цепочка.вам нужно сначала угаснуть до 1%, а затем свернуться с –

54

Похоже, было бы лучше использовать JQuery fadeTo команду

$(function() { 

    $("#myButton").click(function() { 
     $("#myDiv").fadeTo("slow", 0.00, function(){ //fade 
      $(this).slideUp("slow", function() { //slide up 
       $(this).remove(); //then remove from the DOM 
      }); 
     }); 

    }); 

}); 

Working Demo here.

Выполняя каждую команду в функции обратного вызова предыдущей команды, команда не будет работать до тех пор, пока не завершится предыдущая. «переход» происходит, когда элемент удаляется из DOM, не дожидаясь завершения SlideUp.

+0

приятная демонстрация, пожелайте, чтобы больше людей это сделали. – redsquare

+2

Пожелание stackoverflow обеспечило бы sandbox –

+0

Спасибо. Я обнаружил jsbin здесь в stackoverflow и использовал его с тех пор, чтобы предоставить работоспособные демонстрации в ответах - http://jsbin.com –

1
$("#id").fadeIn(500, function() { 

    $("#id2").slideUp(500).delay(800).fadeOut(400); 

}); 
1

Попробуйте $('.row').animate({ height: 'toggle', opacity: 'toggle' }, 'slow').slideUp();

demo Here