2012-03-09 27 views
1

請參閱我創建的jsfiddle以複製我的問題。 http://jsfiddle.net/motocomdigital/22KFS/3/在滾動時將表格標題固定到窗口頂部,跳轉/跳過一行。 jQuery

在我的項目中,我創建了一個可排序的表格。我使用jquery table sorter來做到這是一個非常簡單的jquery插件。桌面分揀機也包含在jsfidde中。如果您單擊表格標題,則會注意到它將表格列從降序升序到升序。

這很好,我的問題是...

在我的生活網站,該表是大約125行高。我想避免不惜一切代價分頁。

所以我的想法是修復jQuery滾動時的表頭,這幾乎是工作。請參閱我的fiddle。我用來將頁頭修正到頁面頂部的jQuery工作。

問題是因爲表頭變得固定,表格向上移動,並使其非常糟糕。

任何人都可以幫助我消除毛刺,並在到達窗口頂部時阻止它跳過一行。

非常感謝任何幫助,謝謝。


見的jsfiddle這裏http://jsfiddle.net/motocomdigital/22KFS/3/


jQuery的

var $window  = $(window), 
    $tableHead = $(".table-head"), 
    offset  = $tableHead.offset(); 

$window.scroll(function() { 
    if ($window.scrollTop() > offset.top) { 
     $tableHead.addClass('fixed'); 
    } else { 
     $tableHead.removeClass('fixed'); 
    } 
}); 


CSS

.fixed { 
    position: fixed; 
    top: 0; 
} 


HTML

<table id="table-sorter" width="400" border="0" cellspacing="0" cellpadding="10">   
    <thead> 
      <tr class="table-head"> 
       <th width="100" height="18" valign="middle">Number</th> 
       <th width="100" height="18" valign="middle">First Name</th> 
       <th width="100" height="18" valign="middle">Surname</th> 
       <th width="100" height="18" valign="middle">System</th> 
      </tr> 
    </thead> 
    <tbody> 
      <tr> 
       <td>1</td> 
       <td>John</td> 
       <td>Smith</td> 
       <td>Wordpress</td>  
      </tr> 

      ... ... 

    </tbody> 
</table> 



+0

推薦將眼光放在http://biathlontime.com/2011-2012/ruhpolding/women-individual/- 這裏使用的jquery插件非常棒。 – YuS 2012-03-09 16:23:21

回答

3

解決您的問題。如果你還沒有意識到,它跳轉的原因是因爲當你修改位置時,你實際上是從表格中刪除標題行,所以表格的其餘部分跳轉到填補空白。

解決方案?那麼,這是爭論。爲了證明我的觀點,我所做的只是在修正實際標題時添加一個新的臨時標題。這使桌子保持原位並允許標題向下移動。當您向後滾動時,該臨時標題將被刪除。

這是最好的方法嗎?不確定,你可能想要克隆真正的頭文件作爲臨時解決方案,以防出現圖形故障。這也意味着,如果標題有多行(因此將高度向下推),則效果會保持不變,因爲它正在採取精確的克隆。

無論如何,在與代碼:http://jsfiddle.net/chricholson/22KFS/5/

$("#table-sorter").tablesorter({ 
widgets: ['zebra'] 
}); 


var $window  = $(window), 
    $tableHead = $(".table-head"), 
    offset  = $tableHead.offset(); 

$window.scroll(function() { 


    if ($window.scrollTop() > offset.top) { 
     $tableHead.addClass('fixed'); 
     if ($('#table-sorter thead tr.temp').length <= 0){ 
      $('#table-sorter thead').append('<tr class="temp"><td>hello</td></tr>'); 
     } 
    } else { 
     $tableHead.removeClass('fixed'); 
     $('tr.temp').remove(); 
    } 


}); 

好運。

編輯

下面是使用克隆() http://jsfiddle.net/chricholson/22KFS/8/

代碼工作產品:

$("#table-sorter").tablesorter({ 
    widgets: ['zebra'] 
}); 


var $window  = $(window), 
    $tableHead = $(".table-head"), 
    offset  = $tableHead.offset(); 

$window.scroll(function() { 


    if ($window.scrollTop() > offset.top) { 
     $tableHead.addClass('fixed'); 
     if ($('#table-sorter thead tr.temp').length <= 0){ 
      $tableHead.clone().appendTo('#table-sorter thead').removeClass('fixed').addClass('temp'); 
     } 
    } else { 
     $tableHead.removeClass('fixed'); 
     $('tr.temp').remove(); 
    } 


}); ​ 
+0

這很聰明。它不是很平滑,因爲像你說的樣式有點關閉,我似乎無法修復與CSS。它只有幾個像素。實際上可以克隆東西嗎?如果我可以克隆標題和排序功能,那就太棒了。這樣就會有桌子的移動。感謝您的幫助:-) – Joshc 2012-03-09 16:51:22

+0

你知道如何克隆和追加到一個div,然後刪除它.. – Joshc 2012-03-09 17:00:23

+0

你將不得不原諒我,我在我的手機上,所以不能給你完整的代碼。看到這裏的jQuery克隆http://api.jquery.com/clone/。我想你會想克隆,然後刪除並添加一個臨時類/ id,這將允許您稍後刪除它:$ tableHead.clone()。removeClass('fixed')。addClass('temp');這應該克隆它在同一個地方,並將類更改爲臨時。使用與之前相同的代碼刪除。正如我所說我在我的手機上,所以這沒有經過測試,你可能需要稍微改變它,使用我給你幫助的鏈接。 – Chris 2012-03-10 09:34:25

相關問題