隨筆-1  評論-44  文章-3  trackbacks-0
          ??????發(fā)一個原創(chuàng)的表格列向拖動的代碼。
          ??????其實這個代碼寫了1年多了,最初寫的是一個動態(tài)拖動的,就是鼠標移動的同時列寬跟著改變,可是那種在有些機器性能差的機器上跑起來很吃力(javascript效率不高我也沒辦法啊)。后來就索性改成了現(xiàn)在這種。代碼不復(fù)雜,就是對鼠標的的定位,把鼠標的位移量得到后,對表格的列寬進行改變。由于時間倉促,肯定有很多不足,大家有興趣的可以幫忙改改
          ??????代碼如下,復(fù)制后保存成*.htm即可:
          ??????
          <HTML><HEAD><TITLE>信息列表</TITLE>
          <META content="text/html; charset=gb2312" http-equiv=Content-Type>
          </head>
          <style>
          .aline{
          ?position:absolute;
          ?width:1px;
          ?height:100px;
          ?background-color:#000000;
          }
          .headdiv{
          ?width:100%;
          ?cursor:default;
          ?height:100%;
          ?white-space:nowrap;
          ?text-align:center;
          ?text-valign="middle";
          }
          tr{
          ?background: window;
          }
          td{
          ?color: windowtext; font: menu; padding: 1px; padding-left: 5px; padding-right: 5px;
          ?border-top: 1px solid buttonhighlight;
          ?border-left: 1px solid buttonhighlight;
          ?border-right: 1px solid buttonshadow;
          ?border-bottom: 1px solid buttonshadow;
          }
          table{
          ?BORDER-COLLAPSE: collapse;
          ?border-top: 1px solid buttonshadow;
          ?border-left: 1px solid buttonshadow;
          }
          thead td{
          ?background: buttonface;
          ?font: menu;
          ?border: 1px outset white;
          ?cursor: default;
          ?padding:0 3 0 0;
          ?border-top: 1px solid buttonhighlight;
          ?border-left: 1px solid buttonhighlight;
          ?border-right: 1px solid buttonshadow;
          ?border-bottom: 1px solid buttonshadow;
          ?height:16px;
          }
          </style>
          <script language="javascript">
          /**
          * 動態(tài)改變列寬度的代碼
          * 作者:黑旋風(fēng)(QQ:23929003 EMAIL:lewclear97@163.com)
          * 版權(quán)沒有,隨便拷貝、修改,不過希望大家能把改后的代碼發(fā)給我一份,互相學(xué)習(xí),謝謝
          */
          var ListTitleTdStartX=null;//記錄鼠標按下時的X坐標
          var ListTitleTdStartWidth=0;//記錄所在td在鼠標按下時的寬度
          var ListTableStartWidth=0;//記錄整個table的寬度
          var MouseIsDown=false;//表示是否處于鼠標按下狀態(tài)
          var ListTableResizeTd=null;//記錄所操作的td對象
          var ListResizeLine=null;
          /**
          *鼠標按下時觸發(fā)的事件
          *其作用主要是記錄所需部件的初始值
          */
          function MouseDownResizeTd(obj){
          ? if(event.srcElement.id!="resizehead"){
          ?? return;
          ? }
          ? allleft=event.srcElement.offsetLeft+obj.parentElement.parentElement.parentElement.offsetLeft;
          ? if(setOperatorTd(obj,allleft)){//設(shè)置操作的td
          ?? ListResizeDiv=ListTableResizeTd.parentElement.parentElement.parentElement;//外層div
          ?? ListTitleTdStartX=event.x;? //記錄初始值
          ?? ListTitleTdStartWidth=parseInt(obj.clientWidth);
          ?? ListTableStartWidth=parseInt(ListTableResizeTd.parentElement.parentElement.parentElement.clientWidth)
          ?? MouseIsDown=true;
          ?? ListResizeLine=document.createElement("div");
          ?? ListResizeLine.className='aline';
          ?? document.body.appendChild(ListResizeLine);
          ?? ListResizeLine.style.height=ListResizeDiv.offsetHeight
          ?? ListResizeLine.style.left=document.body.scrollLeft+event.x-2;
          ?? ListResizeLine.style.top=ListResizeDiv.offsetTop;
          ?? ListTableResizeTd.setCapture();
          ? }
          }
          /**
          * 判斷哪個才是所要操作的td
          * 成功獲得返回true,否則返回false
          */
          function setOperatorTd(obj,allleft){
          ?if(event.x-allleft<3){//如果按到的是下一個td
          ??? tableobj=obj.parentElement.parentElement.parentElement;
          ??? for(var i=0;i<tableobj.rows.length;i++){????
          ???? if(tableobj.rows[0].cells[i]==obj){
          ????? if(i==0)return false;
          ????? ListTableResizeTd=tableobj.rows[0].cells[i-1];
          ????? return true;
          ???? }
          ??? }
          ? }else{
          ?? ListTableResizeTd=obj;
          ?? return true;
          ? }
          }
          /**
          *雙擊設(shè)置最合適寬度
          */
          function setMinWidthForTd(){
          ?ListTableResizeTd.style.width='20px'
          }
          /**
          *鼠標松開將一切參數(shù)還原
          */
          function document.onmouseup(){
          ? if(MouseIsDown){
          ? width=event.x-ListTitleTdStartX;
          ? if(Math.abs(width)>2&&width+ListTitleTdStartWidth>0){
          ?? ListTableResizeTd.style.width=ListTitleTdStartWidth+width;
          ?? //ListTableResizeTd.parentElement.parentElement.style.width=ListTableStartWidth+width;
          ? }
          ? //參數(shù)全部還原
          ? ListTitleTdStartX=null;
          ? ListTitleTdStartWidth=0;
          ? ListTableStartWidth=0;
          ?? MouseIsDown=false;
          ?? document.body.removeChild(ListResizeLine);
          ?}
          ?if(ListTableResizeTd!=null){
          ???ListTableResizeTd.releaseCapture();
          ?}
          }
          /*
          *鼠標移動時改變td及所在table的寬度
          */
          function document.onmousemove(){
          ?if(MouseIsDown){
          ? ListResizeLine.style.left=document.body.scrollLeft+event.x-2;
          ?}
          }
          </script>
          <BODY>
          ?<table border=1 cellpadding="0" cellspacing="0" onselectstart="return false;" >
          ? <thead>
          ?? <tr id="testtr">
          ???? <Td id="resizehead" style="width:20px;cursor:col-resize;overflow:none;" ondblclick="setMinWidthForTd()" onmousedown="MouseDownResizeTd(this)"><div class="headdiv">姓名</div></td>
          ???? <Td id="resizehead" style="cursor:col-resize;" ondblclick="setMinWidthForTd()" onmousedown="MouseDownResizeTd(this)"><div class="headdiv">性別</div></td>
          ???? <Td id="resizehead" style="cursor:col-resize;" ondblclick="setMinWidthForTd()" onmousedown="MouseDownResizeTd(this)"><div class="headdiv">電話</div></td>
          ???? <Td id="resizehead" style="cursor:col-resize;" ondblclick="setMinWidthForTd()" onmousedown="MouseDownResizeTd(this)"><div class="headdiv">住址</div></td>
          ???? <Td id="resizehead" style="cursor:col-resize;" ondblclick="setMinWidthForTd()" onmousedown="MouseDownResizeTd(this)"><div class="headdiv">政治面貌</div></td>
          ???? <Td id="resizehead" style="cursor:col-resize;" ondblclick="setMinWidthForTd()" onmousedown="MouseDownResizeTd(this)"><div class="headdiv">學(xué)歷</div></td>
          ???? <Td id="resizehead" style="cursor:col-resize;" ondblclick="setMinWidthForTd()" onmousedown="MouseDownResizeTd(this)"><div class="headdiv">備注</div></td>
          ?? </tr>
          ?</thead>
          ?? <script language="javascript">
          ??? for(i=0;i<10;i++){
          ?? var html=' <tr id="testtr">';
          ????? html+='<Td>人員'+i+'</td>';
          ????? html+='<Td>男</td>';
          ????? html+='<Td>45345</td>';
          ????? html+='<td>asdfasfasfasfasdf</td>';
          ????? html+='<td>sffdfgdgd</td>';
          ??? html+='<td>sfdgdfgdfg</td>';
          ????? html+='<td>asdfasfasfasfasdfdfgdfg</td>';
          ???? html+='</tr> ';
          ???? document.write(html);
          ??? }
          ?? </script>
          ?</table>
          ? </BODY>
          </HTML>
          posted on 2006-08-10 10:58 黑旋風(fēng) 閱讀(2751) 評論(5)  編輯  收藏

          評論:
          # re: 表格列寬鼠標拖動 2006-09-18 09:24 | 陳朋奕.
          黑旋風(fēng)就是你?好東西,收下了。  回復(fù)  更多評論
            
          # re: 表格列寬鼠標拖動 2006-09-18 09:35 | 黑旋風(fēng)
          @陳朋奕.
          哦?你認識我嗎?叫黑旋風(fēng)的人不少哦!不知我傍了哪個大俠的威名....(偷笑ing....)  回復(fù)  更多評論
            
          # re: 表格列寬鼠標拖動 2006-10-31 15:06 | bsc2xp
          非常好,能否擴展一下表頭固定效果?  回復(fù)  更多評論
            
          # re: 表格列寬鼠標拖動 2006-10-31 17:33 | bsc2xp
          拖動列改變寬度有bug。經(jīng)常不是鼠標所觸發(fā)的位置。  回復(fù)  更多評論
            
          # re: 表格列寬鼠標拖動 2007-09-04 10:10 | yyy1121
          好東西收藏了  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 长子县| 旺苍县| 浦江县| 达拉特旗| 偏关县| 手机| 大竹县| 海伦市| 镇巴县| 永康市| 黎平县| 正阳县| 花莲市| 嘉兴市| 乌恰县| 宁城县| 太仆寺旗| 玛曲县| 尚志市| 濮阳市| 加查县| 微博| 金湖县| 鸡西市| 福建省| 监利县| 汕头市| 北流市| 盱眙县| 台中市| 松潘县| 磐安县| 南投县| 沅陵县| 东光县| 三穗县| 贺兰县| 桦南县| 思南县| 宁陵县| 平远县|