近來(lái)有客戶要求用table顯示一大串?dāng)?shù)據(jù),由于滾動(dòng)后就看不到表頭,很不方便,所以想到這個(gè)效果。上次做 table排序 對(duì)table有了一些了解,這次更是深入了解了一番,發(fā)現(xiàn)table原來(lái)是這么不簡(jiǎn)單。
還不清楚這個(gè)效果叫什么,有點(diǎn)像表頭固定的效果,就叫行定位吧,本來(lái)想把列定位也做出來(lái),但暫時(shí)還沒(méi)這個(gè)需求,等以后有時(shí)間再弄吧。 在 淘寶的商品搜索頁(yè) 也看到類似的效果,但淘寶的不是table,而是li,而我這個(gè)是用在table上的。
要說(shuō)明一下的是,我這個(gè)效果是用在一些普通的產(chǎn)品列表,當(dāng)數(shù)據(jù)比較多時(shí)提高用戶體驗(yàn),而不是單單做數(shù)據(jù)顯示,跟excel那樣的方式是不同的。
效果預(yù)覽
為方便預(yù)覽,建議縮小瀏覽器。
運(yùn)行代碼框
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運(yùn)行]
注意,使用ie8的兼容性視圖會(huì)有偏移。
程序原理
一開(kāi)始的需求只是表頭部分在滾動(dòng)時(shí)能一直固定在頭部,那關(guān)鍵要實(shí)現(xiàn)的就是讓tr能定位。首先想到的方法是給tr設(shè)置relative,用ie6/7測(cè)試以下代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<html xmlns="<body> <table cellpadding="5" cellspacing="0" border="1" width="100"> <tr style="position:relative; left:100px;"> <td>1</td> <td>2</td> </tr> <tr> <td>3</td> <td>4</td> </tr> </table> </body> </html>
給tr設(shè)置relative后就能相對(duì)table定位了,看來(lái)很簡(jiǎn)單啊,但問(wèn)題是這個(gè)方法ie8和ff都無(wú)效,而且存在很多問(wèn)題,所以很快就被拋棄了。 ps:該效果用來(lái)做tr的拖動(dòng)會(huì)很方便。
接著想到的是給table插入一個(gè)新tr,克隆原來(lái)的tr,并設(shè)置這個(gè)tr為fixed(ie6為absolute),例如:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<html xmlns="<body> <table cellpadding="5" cellspacing="0" border="1" width="100"> <tr style="position:fixed; left:100px;"> <td>1</td> <td>2</td> </tr> <tr style="position:absolute; left:200px;"> <td>3</td> <td>4</td> </tr> <tr> <td>5</td> <td>6</td> </tr> </table> </body> </html>
第一個(gè)問(wèn)題是fixed的tr在ie7中不能進(jìn)行定位,而且td在定位后并不能保持在表格中的布局,這樣在原表格插tr就沒(méi)意義了。 ps:fixed的相關(guān)應(yīng)用可參考仿LightBox效果。
最后我用的方法是新建一個(gè)table,并把源tr克隆到新table中,然后通過(guò)對(duì)新table定位來(lái)實(shí)現(xiàn)效果。用這個(gè)方法關(guān)鍵有兩點(diǎn),首先要做一個(gè)仿真度盡可能高的tr,還有是要準(zhǔn)確的定位,這些請(qǐng)看后面的程序說(shuō)明。
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁(yè) 下一頁(yè) JavaScript Table行定位效果 [2]
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|