2009-04-09 33 views
28

如果一個項目正在被刪除,那麼我想淡出它並將其他元素向上滑動以填充空白空間。現在,當我使用​​時,該項目的末端沒有高度,導致其他項目跳起來(而不是很好地滑動)。jQuery:FadeOut SlideUp

如何才能slideUp()和元素之後​​?

+0

我重寫我的所以這是一個撥動了。 – Powerlord 2009-04-09 16:05:02

+1

應該注意的是,fadeOut導致跳轉的原因是在不透明度設置爲0之後,顯示設置爲無。 fadeTo不這樣做,這就是爲什麼下面的解決方案工作。 – 2011-07-13 07:40:59

回答

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上測試了它,它確實有效。

編輯:這是我從它調用它的代碼。 #滑動然後褪色是按鈕元件的ID,物品文本是div標籤的類:

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

編輯2:修改爲使用內置的效果基本show。

編輯3:改寫爲肘,以及使用fadeTo

1

難道你不能鎖鏈嗎?

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

編輯

也許this將幫助呢?

+0

不,它會消失,然後在DOM元素上做了一個艱難的過程。 – 2009-04-09 14:54:24

+0

啊我明白了,那是一種痛苦。 – Kezzer 2009-04-09 14:55:22

+0

不,它會在fadeOut()的末尾跳轉。 – bart 2009-04-09 14:56:11

-1

的淡出功能需要一個回調函數的第二個可選的參數,所以你應該能夠做這樣的事情:

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

編輯:忘了淡出的速度添加作爲第一個參數

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完成時發生「跳躍」。

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

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

}); 
1

嘗試$('.row').animate({ height: 'toggle', opacity: 'toggle' }, 'slow').slideUp();

demo Here