網(wǎng)上也有很多鎖定行列的方法,,一個(gè)是使用css,,另一個(gè)就是專(zhuān)門(mén)的控件附帶有鎖定的功能。css的大多數(shù)鎖定行,,而不能鎖定列,。好像看過(guò)園子里的司徒正美,寫(xiě)過(guò)一個(gè)用css鎖定行列的,,當(dāng)時(shí)css比較爛看不懂,,也沒(méi)有保存那個(gè)網(wǎng)址(很后悔),現(xiàn)在想要找卻又找不到了,。
另一個(gè)就是第三方控件,,這種控件很強(qiáng)大,,鎖定行列只是附帶的一個(gè)小功能。但是有一個(gè)比較明顯的缺點(diǎn),,必須使用它的控件,,我想鎖定GridView,那就不行了,。除非你能把他的鎖定方法給研究出來(lái),。 最近我在學(xué)jQuery,我覺(jué)得找個(gè)需求來(lái)學(xué)習(xí),,進(jìn)步會(huì)比較快,,于是就選擇了鎖定行列的這個(gè)需求。 目的: 1,、針對(duì)<table>來(lái)鎖定,,只要是table標(biāo)簽的形式都能鎖定。支持GridView等控件,。 2,、可以鎖定行、鎖定列,、同時(shí)鎖定行列,、鎖定多行多列。 3,、使用簡(jiǎn)單,,無(wú)需修改后臺(tái)代碼(后置代碼)。只需要在前臺(tái)稍微做點(diǎn)調(diào)整即可,。 4,、效率不能太差,最好支持多種瀏覽器,。 目的確定下來(lái),,然后就要想辦法實(shí)現(xiàn)了。其實(shí)以前也做過(guò)兩個(gè)版本,,因?yàn)橐郧癹s很爛,,也不知道有jQuery這樣的東東,于是就想了一個(gè)笨法,。先做一個(gè)div(divMain),,把要鎖定的table放進(jìn)去,再做三個(gè)div,,然后把要鎖定的table拷貝到三個(gè)div里面,,然后調(diào)整div的寬度、高度和位置,,分別放在要鎖定的行,、列和行列交叉的地方放,。然后在寫(xiě)一個(gè)滾動(dòng)事件,在divMain的滾動(dòng)條滾動(dòng)的事件里,,同時(shí)滾動(dòng)上面的div和左面的div,。這樣就形成了一個(gè)鎖定的效果。 這個(gè)方法的缺點(diǎn)很多了,,但是水平很爛,,也只能這樣了。現(xiàn)在想要提高一下js水平,,那么就要弄個(gè)更好一點(diǎn)的,。把整個(gè)table都拷貝過(guò)去是不是太浪費(fèi)了?能不能只拷貝要鎖定的行,、列,? 于是呢,就要jQuery動(dòng)態(tài)創(chuàng)建div和需要的table,,然后調(diào)整他們的寬度,、高度和位置,這樣在滾動(dòng)的時(shí)候效率就高了很多,,不過(guò)也有個(gè)問(wèn)題,,那就是精確獲取、設(shè)置td的高度和寬度,,要能夠支持被撐高的td,。這個(gè)問(wèn)題困擾了我好久,昨天在群里得到了各位高手的幫忙,,尤其是“紫風(fēng)鈴”的指點(diǎn),,才得以突破。 說(shuō)了這么多,,可能大家都煩了,,說(shuō)一下使用方法。 1,、引用jquery-1.4.2.js 2,、引用scroll-1.0.js (下載:http://demo./aspnet_client/Nature/scroll-1.0.js) 3、在要鎖定的table外面加上一個(gè)div,,并且設(shè)置id 4、調(diào)用js函數(shù),,myScroll('div_Main',1,1,'tableID') 第一個(gè)參數(shù):要鎖定的table外面的div的ID,, 第二個(gè)參數(shù):要鎖定的行數(shù)(從上面數(shù)),可以是0,,表示不鎖定行,。 第三個(gè)參數(shù):要鎖定的列數(shù)(從左面數(shù)),,可以是0,表示不鎖定列,。 第四個(gè)參數(shù):要鎖定的table的ID,。 好了搞定。有幾個(gè)注意事項(xiàng),。 1,、如果div里只有一個(gè)table,沒(méi)有其他的,,那么可以不傳遞tableID這個(gè)參數(shù),。 2、table的width不能設(shè)置百分比的形式,,比如100%,,這樣很可能造成table被擠在div里面,沒(méi)有橫向的滾動(dòng),。 對(duì)了,,還要說(shuō)一下缺點(diǎn): 1、代碼比較爛,。初學(xué)jQuery,,js的功底也很差,所以現(xiàn)在的1.0版本的代碼只是實(shí)現(xiàn)了基本的功能,,代碼的美觀,、運(yùn)行效率那就很差了,以后還需要繼續(xù)前進(jìn),。 2,、td的高度和寬度還是差了一些,不過(guò)基本上可以忍受,。還需要繼續(xù)調(diào)整,。 3、table的行數(shù)比較多時(shí)(大于100行),,初始化時(shí)間會(huì)很長(zhǎng),。初始化就是創(chuàng)建鎖定的行、列的部分,。 最后是在線演示的地址:http://demo./Nonline/other/default.aspx 下一步除了修改bug外,,還要實(shí)現(xiàn)交替色、鼠標(biāo)跟隨,、單擊,、雙擊、選擇變色等功能,。 |
|
來(lái)自: 血色殘陽(yáng)夢(mèng) > 《javascript》