主题:使用table+iframe实现可以拖动改变框架宽度

来源:互联网 发布:nba球队数据统计排名 编辑:程序博客网 时间:2024/05/16 10:26

需求:可以随时拖动中间div改变两边的边框架(left,right)宽度,并解决了拖拽过程中不断渲染页面的效率问题.

缺陷:仅支持ie.

Js代码 复制代码
  1. <HTML>   
  2. <head>   
  3. <style type='text/css'>   
  4. .table{   
  5.     width:400;   
  6.     height:2;    
  7.     background-color:red;   
  8.     border-color:yellow;   
  9.     border:0px;   
  10. }   
  11. </style>   
  12. <SCRIPT LANGUAGE="JavaScript">   
  13. var isIe = true;   
  14. if(!document.all)   
  15. {   
  16.     isIe = false;      
  17. }   
  18. function downToResize(obj,e){   
  19.     obj.style.cursor='col-resize';   
  20.     var e = isIe ?window.event : e;   
  21.     //记录开始准备移动的起始位置   
  22.     obj.mouseDownX=e.clientX;    
  23.     //父级左边框架的宽度   
  24.     obj.parentLeftFW = document.getElementById('left').parentNode.clientWidth;    
  25.     //父级右边框架的宽度   
  26.     obj.parentRightFW = document.getElementById('right').parentNode.clientWidth;   
  27.     obj.parentBox =  document.getElementById('box');       
  28.     if(isIe)obj.setCapture();      
  29.     else{   
  30.         alert('不支持火狐..');   
  31.         obj.mouseDownX = 0;   
  32.     }      
  33. }   
  34. function moveToResize(obj,e){   
  35.     var e = isIe ?window.event : e;   
  36.     if(!obj.mouseDownX) return false;      
  37.     obj.removed = 1;   
  38.     obj.parentBox.style.display = 'inline';    
  39.     obj.parentBox.style.width = obj.offsetWidth;   
  40.     obj.parentBox.style.height = obj.offsetHeight;   
  41.     obj.parentBox.style.left = e.clientX;   
  42.     obj.parentBox.style.top = getPosTop(obj.parentBox);   
  43. }   
  44. function getPosLeft(elm) {   
  45.         var left = elm.offsetLeft;   
  46.         while((elm = elm.offsetParent) != null)        {   
  47.                 left += elm.offsetLeft;   
  48.         }   
  49.         return left;   
  50. }   
  51. function getPosTop(elm) {   
  52.         var top = elm.offsetTop;   
  53.         while((elm = elm.offsetParent) != null)        {   
  54.                 top += elm.offsetTop;   
  55.         }   
  56.         return top;   
  57. }   
  58. function upToResize(obj,e){    
  59.     var e = isIe ?window.event : e;   
  60.     //下面是实际的移动边框的大小   
  61.     var changeW = e.clientX*1-obj.mouseDownX;   
  62.     if(changeW!=0&&obj.removed){       
  63.         var newLeftW=obj.parentLeftFW*1+changeW;    
  64.         var newRightW=obj.parentRightFW*1-changeW;    
  65.         if(newLeftW<=200) {   
  66.             var temp = newLeftW;   
  67.             newLeftW = 200;   
  68.             newRightW =newRightW-(200-temp);   
  69.         }   
  70.         if(newRightW<=200) {   
  71.             var temp = newRightW;   
  72.             newRightW = 200;   
  73.             newLeftW = newLeftW-(200-temp);   
  74.         }   
  75.         var leftObj = parent.document.getElementById('left').parentNode;   
  76.         leftObj.width = newLeftW;   
  77.         leftObj.firstChild.style.width = newLeftW+'px';   
  78.         var rightObj = parent.document.getElementById('right').parentNode;   
  79.         //下面的之所以要减掉一个4,是在鼠标旁边的一个小小的位移..   
  80.         rightObj.width = newRightW-4;   
  81.         rightObj.firstChild.style.width = newRightW-4;   
  82.     }   
  83.     if(isIe)obj.releaseCapture();      
  84.     else{   
  85.            
  86.     }   
  87.     obj.mouseDownX=0;    
  88.     obj.removed = 0;   
  89.     obj.style.cursor = 'default';   
  90.     obj.parentBox.style.display = 'none';   
  91. }   
  92. </SCRIPT>   
  93. </head>   
  94. <body style="overflow: hidden;">   
  95. <div id='box' style="display:'none';position:'absolute';border:'1px dotted red';z-index:5;width:20px;height:100px;"></div>   
  96. <TABLE  height="100%" width='100%'>   
  97. <TR>   
  98.     <TD ><iframe id='left' src='test.html' style="width:100%;height:100%;z-index: -1;border:0px;"  scrolling="no"></iframe>          
  99.     </TD>   
  100.     <td><div style='height:100%;background-color:red;width:8px;'  
  101.           onmousedown="downToResize(this,event);"  
  102.           onmouseover="this.style.cursor='col-resize';"  
  103.           onmousemove="moveToResize(this,event);"  
  104.           onmouseout="this.style.cursor='default';"  
  105.           onmouseup="upToResize(this,event);"></div></td>   
  106.     <TD><iframe id='right' src='test.html' style="height:100%;z-index: -1;width:100%;border:0px;"  scrolling="no" ></iframe></TD>   
  107. </TR>   
  108. </TABLE>   
  109. </body>   
  110. </HTML>