我能想出的最好的部分滑動格上述股利如下:
var toggleMinHeight = 30,
duration = 2000,
easing = 'swing';
$('.toggles').each(
function(){
$(this).attr('data-height',$(this).height());
}).click(
function(){
var curH = $(this).height();
if ($(this).is(':animated')){
return false;
}
else if (curH == $(this).attr('data-height')) {
$(this).animate(
{
'height' : toggleMinHeight
}, duration, easing);
}
else if (curH == toggleMinHeight){
$(this).animate(
{
'height' : $(this).attr('data-height')
}, duration, easing);
}
});
JS Fiddle demo。
這個演示有一些問題,但是:
- 沒有寬鬆的功能超出了由基本jQuery庫(給訪問「搖擺」和「線性」)規定,這可以通過包括jQuery用戶界面得到改善但是。
- 幾乎可以肯定可以做成一個插件,看起來有點不好看。
- 需要一個大的功能但不漂亮的
if
/else if
聲明。
- 需要至少一次
each()
的通過才能指定div元素的「默認」/「自然」高度。
- 如果
div
s爲不position: absolute
他們縮小到了在線元件的基線(因爲他們是display: inline-block
),這可能不是一個問題,如果他們float: left
(或float: right
,很明顯)。
希望它是有用的,但它目前的狀態肯定不理想。
編輯張貼以上的插件,ISED版本(它保留了所有相同的問題前):
(function($) {
$.fn.slideTo = function(slideToMin, duration, easing) {
var slideToMin = slideToMin || 30,
duration = duration || 500,
easing = easing || 'linear';
$(this)
.attr('data-height', $(this).height())
.click(
function() {
var curH = $(this).height();
if ($(this).is(':animated')) {
return false;
}
else if (curH == $(this).attr('data-height')) {
$(this).animate({
'height': slideToMin
}, duration, easing);
}
else if (curH == slideToMin) {
$(this).animate({
'height': $(this).attr('data-height')
}, duration, easing);
}
});
return $(this);
};
})(jQuery);
$('.toggles').slideTo(50,1500,'swing');
JS Fiddle demo。
- slideToMin:這可以是要麼引用字符串,如「3EM」,「20像素」,或一個沒有引號的數目,如
30
,並代表高度要的元件滑動至。如果沒有提供單位,那麼默認情況下,高度被認爲是以像素爲單位。
- 持續時間:動畫持續的毫秒數。
- easing:
一個引用的字符串,用於定義要在動畫中使用的緩動類型;沒有jQuery UI,這是'線性'或'擺動'。 與 jQuery UI其他選項也許是可能的,但這是未經測試的。如果未指定,則動畫默認爲「線性」。由於在引用字符串中使用單位會導致最後的else if
返回false(顯然,我想......嘆了口氣),請僅爲此變量使用不加引號的數字參數(或編輯插件以正確處理帶單位的帶引號的字符串...)。
,我還沒有意識到,直到我張貼了這個更大的問題是,該插件的版本只允許一個迭代的動畫。我對此感到困惑,儘管對其他人來說很明顯。
好的,它似乎是在if
聲明中的高度評估。使用3em
導致最後的else if
:curH == toggleMinHeight
返回false。可能是由於該變量中存在單位(em
)。上述指導已經過編輯,以反映應使用而不是。
參考文獻:
jQuery有'.fadeTo'。如果它有一個本地的'.slideTo'將會很好。 – karim79
你的意思是SlideFadeToggle – jQuerybeast
@jQuerybeast:不,我認爲他的意思是'.slideTo(heightToSlideElementTo)'=)但是,嘿,'slideFadeToggle()'也可能太棒了! = D –