隨筆-1  評論-44  文章-3  trackbacks-0
          ??????發一個原創的表格列向拖動的代碼。
          ??????其實這個代碼寫了1年多了,最初寫的是一個動態拖動的,就是鼠標移動的同時列寬跟著改變,可是那種在有些機器性能差的機器上跑起來很吃力(javascript效率不高我也沒辦法啊)。后來就索性改成了現在這種。代碼不復雜,就是對鼠標的的定位,把鼠標的位移量得到后,對表格的列寬進行改變。由于時間倉促,肯定有很多不足,大家有興趣的可以幫忙改改
          ??????代碼如下,復制后保存成*.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">
          /**
          * 動態改變列寬度的代碼
          * 作者:黑旋風(QQ:23929003 EMAIL:lewclear97@163.com)
          * 版權沒有,隨便拷貝、修改,不過希望大家能把改后的代碼發給我一份,互相學習,謝謝
          */
          var ListTitleTdStartX=null;//記錄鼠標按下時的X坐標
          var ListTitleTdStartWidth=0;//記錄所在td在鼠標按下時的寬度
          var ListTableStartWidth=0;//記錄整個table的寬度
          var MouseIsDown=false;//表示是否處于鼠標按下狀態
          var ListTableResizeTd=null;//記錄所操作的td對象
          var ListResizeLine=null;
          /**
          *鼠標按下時觸發的事件
          *其作用主要是記錄所需部件的初始值
          */
          function MouseDownResizeTd(obj){
          ? if(event.srcElement.id!="resizehead"){
          ?? return;
          ? }
          ? allleft=event.srcElement.offsetLeft+obj.parentElement.parentElement.parentElement.offsetLeft;
          ? if(setOperatorTd(obj,allleft)){//設置操作的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;
          ? }
          }
          /**
          *雙擊設置最合適寬度
          */
          function setMinWidthForTd(){
          ?ListTableResizeTd.style.width='20px'
          }
          /**
          *鼠標松開將一切參數還原
          */
          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;
          ? }
          ? //參數全部還原
          ? 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">學歷</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 黑旋風 閱讀(2751) 評論(5)  編輯  收藏

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

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


          網站導航:
           
          主站蜘蛛池模板: 巧家县| 深圳市| 仲巴县| 三河市| 忻州市| 思南县| 大同县| 峨眉山市| 土默特左旗| 奈曼旗| 惠水县| 托克逊县| 尉氏县| 封开县| 吴川市| 阳山县| 双流县| 开平市| 鄢陵县| 铜陵市| 海林市| 铜川市| 冷水江市| 寿光市| 永康市| 通州区| 富宁县| 伊川县| 巴青县| 泌阳县| SHOW| 汕尾市| 新营市| 资溪县| 眉山市| 饶阳县| 绍兴市| 林甸县| 霞浦县| 靖安县| 永新县|