2010-11-17 90 views
4

我想要一個推拉門的效果,用戶點擊一個鏈接,並在當前內容下降,並揭示新內容。克里斯凱里在原型中做到了這一點,但我想使用jQuery。有沒有插件或教程?我看到一個,但它非常基本。如何使滑動門的效果?

prototype example

回答

5

這裏有一個基本的例子,讓你開始:

試試看:http://jsfiddle.net/yuF8S/3/(更新切換內容)

JS

$('a').click(function() { 
    var index = $(this).index(); 
    $('#door').animate({top:0}, 500, function() { 
     $('#content > .contentItem').hide() 
      .eq(index).show(); 
     $(this).animate({top: -200}, 500); 
    }); 
}); 

HTML

<div id='container'> 
    <div id='content'> 
     <div class='contentItem'>content display 1</div> 
     <div class='contentItem'>content display 2</div> 
     <div class='contentItem'>content display 3</div> 
    </div> 
    <div id='door'></div> 
</div> 

<div id='links'> 
    <a href='#'>content 1</a> 
    <a href='#'>content 2</a> 
    <a href='#'>content 3</a> 
</div> 

CSS

#container { 
    float:left; 
    width: 200px; 
    height: 300px; 
    clip: auto; 
    overflow: hidden; 
    position: relative; 
} 
#content { 
    width: 100%; 
    height: 200px; 
    background: yellow; 
    position: absolute; 
    bottom: 0; 
} 
.contentItem { 
    display:none; 
} 
.contentItem:first-child { 
    display:block; 
} 
#door { 
    width: 100%; 
    height: 100%; 
    position: absolute; 
    top: -200px; 
    background: black; 
} 
#links { 
    float: left; 
} 
a { 
    display: block; 
} 
+0

WOW你在哪找到的?尋找類似的東西 – MyHeadHurts 2010-11-17 18:40:57

+1

@NEW:我剛剛做到了,它的確很簡單 – user113716 2010-11-17 18:44:06

+0

缺少的唯一東西是當「門」完全「關閉」時切換舊內容和新內容 – jball 2010-11-17 18:50:32

1
$("#elementId").click(function(){ 
    $(this).slideUp(); 
}); 

了slideDown()是倒數。

+3

強制性[文檔參考](http://api.jquery.com/category/effects/)鏈路。 – Phrogz 2010-11-17 18:33:40

+3

'slideUp()'將隱藏顯示:none的元素,網站上顯示的效果是一個移動的div,而不是一個消失的效果。 – 2010-11-17 18:37:24

+0

是的。因此幻燈片在名稱。重點是一旦動畫完成,div需要保持可見並始終保持相同的高度,另一個原因是「slideUp()」不合適。 – 2010-11-17 18:49:56

1

基本上想要使用animate function點擊新位置時移動絕對位置的div。

$('#moving-div').click(function() { 
    if ($(this).position().top < 150) { 
     $(this).animate({ 
      top: 200px 
     }, 1000); 
    } else { 
     $(this).animate({ 
      top: 100px 
     }, 1000); 
    } 
}); 
+0

這會是div還是這是什麼?對不起,我在這個 – MyHeadHurts 2010-11-17 18:39:24

+0

真的很新,沒問題,我的代碼是相當一般的。 jQuery首先選擇你想要移動的div(在代碼的第一行),然後綁定一個函數,當一個點擊甚至發生在div上時被執行。當它發生時,函數代碼決定是否給this賦值(這是一個點擊事件綁定到的移動div,當然你必須自己決定這些邊界) – 2010-11-17 18:45:10

1

正在發生的事情有,就是他有三個獨立的DIV組成三個菜單中,只有一個是一次明顯的。覆蓋所有這些菜單DIV是一個「門」,因爲他稱之爲封面,如果您正確設置定位,它會比菜單DIV更高的z-index,因此出現在它的頂部。蓋子可以拉伸高度,導致菜單頂部的「門」增長。

的過程是:

  1. 讓按鈕上的點擊事件觸發動畫
  2. 動畫()在其默認大小蓋的高度提高,以完全覆蓋菜單
  3. 隱藏()當前可見的菜單,並顯示()一個可見
  4. animate()蓋的高度減少到默認大小

如果您有以下HTML(使第一個菜單最初可見,其他人隱藏,並且封面位於可見菜單正上方的「打開」高度處,並具有更高的z-index覆蓋可見菜單):

<div id="menu-container"> 
    <div id="cover"></div> 
    <div id="menu-contact" class="menu"></div> 
    <div id="menu-home" class="menu"></div> 
    <div id="menu-products" class="menu"></div> 
</div> 


<div id="buttons"> 
    <div id="contact" class="menu-button"></div> 
    <div id="home" class="menu-button"></div> 
    <div id="products" class="menu-button"></div> 
</div> 

那麼你的jQuery的可能是:

$('.menu-button').click(function() { 
    var cMenuButton = $(this); 
    var cMenuID = cMenuButton.attr('id'); 

    var coverHeight = $('#cover').height(); 
    var cVisibleMenu = $('.menu:visible'); 
    var cVisibleHeight = cVisibleMenu.height(); 

    $('#cover').animate({'height': coverHeight + cVisibleHeight}, 600, 'linear', function() { 
     $('.menu').hide(); 
     $('#menu-' + cMenuID).show(); 

     var newMenuHeight = $('#menu-' + cMenuID).height(); 
     var coverHeight = $('#cover').height(); 

     $('#cover').animate({'height': coverHeight - newMenuHeight}, 600, 'linear'); 
    }); 
}); 

的是以毫秒爲單位的過渡,可以改變,以適應速度。這比你給出的例子稍微複雜一點,因爲我決定展示如何處理可變高度菜單將是有用的。如果菜單的高度是固定的,則可以取消高度的計算並僅使用開放和封閉的高度。

1

patrcik DW做一個很好的例子開始,任何方式對你說:

上升顯露新內容

因此,這裏僅僅是一個主意,讓你這是怎麼回事:

的javascript:

$('p').hide(); 
$('a').click(function() { 
    $('#door').animate({top:0}, 500, function() { 
     $(this).animate({top: -200}, 500); 
     $('p').show(); 
    }); 
}); 

HTML:

<a href='#'>click me</a> 
<div id='container'> 
    <div id='content'> 
     <p>some content to display</p> 
    </div> 
    <div id='door'></div> 
</div> 

CSS:

#container { 
    width: 200px; 
    height: 300px; 
    clip: auto; 
    overflow: hidden; 
    position: relative; 
} 
#content { 
    width: 100%; 
    height: 200px; 
    background: yellow; 
    position: absolute; 
    bottom: 0; 
} 
#door { 
    width: 100%; 
    height: 100%; 
    position: absolute; 
    top: -200px; 
    background: black; 
} 

它是完全一樣的patrcik's代碼隱藏()和show()函數。

祝你好運!

嘗試here