可拖动调整列宽的table

China☆狼群 提交于 2020-02-17 15:38:51
  1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2<html xmlns="http://www.w3.org/1999/xhtml">
  3<head>
  4<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
  5<title>无标题文档</title>
  6<style type="text/css">
  7<!--
  8{
  9 font-family: Verdana, Arial, Helvetica, sans-serif;
 10 font-size: 12px;
 11 color: #333333;
 12}

 13-->
 14
</style>
 15</head>
 16
 17<body>
 18<div>
 19<table id="dataTable" border="1" cellpadding="0" cellspacing="0" style="table-layout:fixed;border-collapse:collapse;">
 20 <colgroup>
 21  <col style="width:200px;" />
 22  <col style="width:100px;" />
 23  <col style="width:100px;" />
 24  <col style="width:100px;" />
 25  <col style="width:100px;" />
 26 </colgroup>
 27 <tr>
 28  <td>拖动我1</td>
 29  <td>拖动我2</td>
 30  <td>拖动我3</td>
 31  <td>拖动我4</td>
 32  <td>拖动我5</td>
 33 </tr>
 34 <tr>
 35  <td>&nbsp;</td>
 36  <td>&nbsp;</td>
 37  <td>&nbsp;</td>
 38  <td>&nbsp;</td>
 39  <td>&nbsp;</td>
 40 </tr>
 41 <tr>
 42  <td>&nbsp;</td>
 43  <td>&nbsp;</td>
 44  <td>&nbsp;</td>
 45  <td>&nbsp;</td>
 46  <td>&nbsp;</td>
 47 </tr>
 48 <tr>
 49  <td>&nbsp;</td>
 50  <td>&nbsp;</td>
 51  <td>&nbsp;</td>
 52  <td>&nbsp;</td>
 53  <td>&nbsp;</td>
 54 </tr>
 55 <tr>
 56  <td>&nbsp;</td>
 57  <td>&nbsp;</td>
 58  <td>&nbsp;</td>
 59  <td>&nbsp;</td>
 60  <td>&nbsp;</td>
 61 </tr>
 62 <tr>
 63  <td>&nbsp;</td>
 64  <td>&nbsp;</td>
 65  <td>&nbsp;</td>
 66  <td>&nbsp;</td>
 67  <td>&nbsp;</td>
 68 </tr>
 69</table>
 70</div>
 71<script language="javascript" type="text/javascript">
 72var JPos = {};
 73(function($){
 74 
 75 $.getAbsPos = function(pTarget){
 76  var x_ = y_ = 0;
 77  
 78  if(pTarget.style.position != "absolute"){  
 79   while(pTarget.offsetParent){
 80     x_ += pTarget.offsetLeft;
 81     y_ += pTarget.offsetTop;
 82     pTarget = pTarget.offsetParent;
 83   }

 84  }

 85   x_ += pTarget.offsetLeft;
 86   y_ += pTarget.offsetTop;
 87  return {x:x_,y:y_};
 88 }

 89
 90 $.getEventPos = function(evt){
 91   var _x,_y;
 92   evt = JEvent.getEvent(evt);
 93   if(evt.pageX || evt.pageY){
 94    _x = evt.pageX;
 95    _y = evt.pageY;
 96   }
else if(evt.clientX || evt.clientY){
 97    _x = evt.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft) - (document.body.clientLeft || document.documentElement.clientLeft);
 98    _y = evt.clientY + (document.body.scrollTop || document.documentElement.scrollTop) - (document.body.clientTop || document.documentElement.clientTop);
 99   }
else{
100    return $.getAbsPos(evt.target); 
101   }

102   return {x:_x,y:_y}
103 }
 
104 
105}
)(JPos);
106
107
108//=======================================================================================
109
110var JEvent = {};
111(function($){
112 $.getEvent = function(evt){     
113  evt = window.event || evt;
114     
115  if(!evt){
116   var fun = JEvent.getEvent.caller;
117   while(fun != null){
118    evt = fun.arguments[0];
119    if(evt && evt.constructor == Event)
120     break;
121    fun = fun.caller;
122   }

123  }

124   
125  return evt;
126 }

127 
128 $.doEvent = function(fun){
129  var args = arguments;
130  return function(){
131   return fun(args);
132  }

133 }

134}
)(JEvent);
135//=======================================================================================
136
137var colIndex;
138var dataTable = document.getElementById("dataTable");
139var cols = dataTable.getElementsByTagName("COL");
140
141var dragMask = document.createElement("DIV");
142var mAWidth = mAHeight = 30;
143document.body.insertBefore(dragMask,document.body.lastChild);
144dragMask.style.cssText = "width:" + mAWidth + "px;height:" + mAHeight + "px;position:absolute;background-color:#000;filter: Alpha(Opacity=10);-moz-opacity:0.1;opacity: 0.1;display:none;z-index:999999999;display:none;";
145
146var mask_mousemove = function(evt){
147 if(document.selection){//IE ,Opera
148  if(document.selection.empty)
149   document.selection.empty();//IE
150  else{//Opera
151   document.selection = null;
152  }

153 }
else if(window.getSelection){//FF,Safari
154  window.getSelection().removeAllRanges();
155 }

156 
157 var oPos = JPos.getAbsPos(this);
158 var mPos = JPos.getEventPos(evt);
159 
160 var x = mPos.x - oPos.x - mAWidth / 2;
161 var tmpX = parseInt(cols[colIndex].style.width) + x;
162 dragMask.style.left = mPos.x - mAWidth / 2 + "px";
163 cols[colIndex].style.width = tmpX >= 2 ? tmpX + "px" : "2px";
164 if(!document.all)
165  dataTable.parentNode.style.width = dataTable.parentNode.clientWidth + x + "px";//这一句为处理FF时用。
166}

167
168var mask_mouseup = function(evt){
169 dragMask.style.display = "none";
170}

171
172dragMask.onmousemove = mask_mousemove;
173dragMask.onmouseup = mask_mouseup;
174
175var cell_mousedown = function(evt){
176 colIndex = this.colIndex;
177 var mPos = JPos.getEventPos(evt);
178 with(dragMask.style){
179  left = mPos.x - mAWidth / 2  + "px";
180  top = mPos.y - mAHeight / 2 + "px";
181  display = "";
182 }

183}

184
185var chk_click = function(evt){
186 var obj = cols[this.colIndex];
187 if(this.checked){
188  obj.style.cssText = obj.css_ ? obj.css_ : "width:100px;";
189 }
else{
190  obj.css_ = obj.style.cssText;
191  obj.style.cssText = document.all ? "display:none" : "visibility: collapse;overflow:hidden;width:0px;";
192 }

193}

194
195var i , o;
196var label ,chk;
197for(i = 0 ; o = dataTable.rows[0].cells[i] ; i++){
198 o.colIndex = i;
199 o.onmousedown = cell_mousedown;
200 
201 label = document.createElement("LABEL");
202 document.body.insertBefore(label,document.body.lastChild);
203 chk = document.createElement("INPUT");
204 chk.type = "checkbox";
205 label.appendChild(chk);
206 chk.onclick = chk_click;
207 chk.colIndex = i;
208 chk.checked = "checked";
209 label.appendChild(document.createTextNode(o.innerHTML));
210}

211
</script>
212</body>
213</html>
214
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!