2009-10-28 57 views
0

我正在創建一個頁面頂部的圖像和下面的菜單。當用戶點擊3個菜單按鈕時,圖像上移和頁面向下滾動,菜單位於頁面頂部,然後右側.content div淡入。slideUp應該只在用戶第一次出現點擊按鈕。

jQuery的幻燈片和標籤的最佳方法

什麼絕對最好的方式來做到這一點與jQuery?(無插件)

我還需要知道我無法阻止它在已經可見的頁面褪色如果我點擊兩次相同的按鈕?

我使用相對的代替HREF,因爲在href做出的頁面跳轉,即使回假

這是我到目前爲止有:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function(){ 

    imgVisible = true; 

    $('#mainmenu a').click(function(){ 
     var $activeTab = $(this).attr('rel'); 
     if(!imgVisible){ 
      $('html:not(:animated),body:not(:animated)').animate({scrollTop:$('#mainmenu').offset().top-20},500); 
      $('.content').hide(); 
      $($activeTab).fadeIn(); 
     } else{ 
      $('#imgholder').slideUp(500,function(){ 
       imgVisible = false; 
       $('#mainmenu a[rel="'+$activeTab+'"]').click(); 
      }); 
     } 
     return false; 
    }); 

}); 
</script> 

<div id="imgholder"><img src="image.jpg" /></div> 

<div id="mainmenu"> 
    <ul> 
     <li><a rel="#tab1"></a></li> 
     <li><a rel="#tab2"></a></li> 
     <li><a rel="#tab3"></a></li> 
    </ul> 
</div> 

<div id="container"> 

    <div class="content" id="tab1"> 
     content 
    </div> 


    <div class="content" id="tab2"> 
     content 
    </div> 


    <div class="content" id="tab3"> 
     content 
    </div> 

</div> 
+0

爲什麼你不想使用插件? – SLaks 2009-10-28 15:07:23

+1

2個原因。我想學習如何自己做。對於像這樣簡單的事情使用插件有點矯枉過正。 – 2009-10-28 15:12:23

+0

http://blog.qumsieh.ca/2009/10/27/building-jquery-tabs-that-open-close/ – 2009-10-28 16:50:05

回答

2

下面的代碼來完成你所需要的:

$('#mainmenu a').click(function(){ 
    var myrel=$(this).attr('rel'); 
    $('.content:not([id='+myrel+'])').hide(); 
    $('#imgholder').slideUp(500,function(){   
     $('#'+myrel).fadeIn(); 
    });   
}); 

.... 
    <li><a href='#' rel='tab0'></a></li> 

我已從您的rel =''部分刪除'#'符號;-)

我不知道你爲什麼要滾動頁面。當用戶點擊菜單時,他/她已經將其聚焦(因此在當前視口內可見)。但是,你有一個非常大的頂部圖像?如果是這種情況,請告訴我,我將修改該代碼段。 (但是,這取決於頁面第一次加載時可見菜單下方的內容數量。)

此外,對於SEO原因,您可能希望使用href而不是rel屬性並創建單獨的內容保存頁面。以下片段將刪除導航操作。

$('#mainmenu a').each(function(){ 
    var myhref = $(this).attr('href'); 
    $(this).attr('href','#').attr('rel',myhref); 
}).click(function(){ 
    var myrel=$(this).attr('rel'); 
    $('.content:not([id='+myrel+'])').hide(); 
    //....etc 
+0

我確實有一個大的頂部的圖像,所以我需要動畫滾動。並且slideUp只發生一次,並且由於fadeIn代碼是slideUp的回調,它只會在您第一次單擊時消失,這是錯誤的。關鍵是,slideUp應該只在用戶第一次點擊按鈕時發生。 – 2009-11-01 12:12:15

+0

您是否運行我提供的代碼?當slideUp被第二次調用時,fadeIn完美運行。我會稍後嘗試提交滾動代碼。 乾杯, – Ivanhoe 2009-11-01 19:05:43

+0

是的,我已經運行了代碼。它確實工作。我之前曾想過這樣的事情,但我並不認爲fadeIn會起作用,因爲它在slideUp內部。無論如何,謝謝:D – 2009-11-05 22:34:46

2

我覺得這是一個什麼樣的尋找一個很好的例子:Organic Tabs

1
var imgVisible = true; 
var $activeTab, $lastTab; 
var $mainmenu = $('#mainmenu'); 
var offset = $mainmenu.offset().top - 20; 

$mainmenu.find('a').click(function() { 

    $activeTab = $($(this).attr('rel')); 

    if (!imgVisible) { 
     // dont fire any events if already open 
     if ($lastTab.attr('id') == $activeTab.attr('id')) return false; 
     $lastTab.fadeOut('normal', function() { 
      $activeTab.fadeIn(500, function() { 
       $lastTab = $activeTab; 
      }); 
     }); 
    } else { 
     $('#imgholder').slideUp(500, function() { 
      imgVisible = false; 
      window.scrollTo(0, offset); 
      $activeTab.fadeIn(500, function() { 
       $lastTab = $activeTab; 
      }); 
     }); 
    } 

    return false; 

}); 

我強烈建議增加<a href="#">因爲這如果使用得當,將確保您的錨鏈接驗證不會使頁面跳轉。有人告訴我,如果我錯過了一些東西,它可以很快得到解決(或者如果你有一個優化或改進,你可以爲我做這件事)。