util.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. var draged=false;
  2. tdiv=null;
  3. function dragStart(){
  4. ao=event.srcElement;
  5. if((ao.tagName=="TD")||(ao.tagName=="TR"))ao=ao.offsetParent;
  6. else return;
  7. draged=true;
  8. tdiv=document.createElement("div");
  9. tdiv.innerHTML=ao.outerHTML;
  10. tdiv.style.display="block";
  11. tdiv.style.position="absolute";
  12. tdiv.style.filter="alpha(opacity=70)";
  13. tdiv.style.cursor="move";
  14. tdiv.style.width=ao.offsetWidth;
  15. tdiv.style.height=ao.offsetHeight;
  16. tdiv.style.top=getInfo(ao).top;
  17. tdiv.style.left=getInfo(ao).left;
  18. document.body.appendChild(tdiv);
  19. lastX=event.clientX;
  20. lastY=event.clientY;
  21. lastLeft=tdiv.style.left;
  22. lastTop=tdiv.style.top;
  23. try{
  24. ao.dragDrop();
  25. }catch(e){}
  26. }
  27. function draging(){//重要:判断MOUSE的位置
  28. if(!draged)return;
  29. var tX=event.clientX;
  30. var tY=event.clientY;
  31. tdiv.style.left=parseInt(lastLeft)+tX-lastX;
  32. tdiv.style.top=parseInt(lastTop)+tY-lastY;
  33. for(var i=0;i<parentTable.cells.length;i++){
  34. var parentCell=getInfo(parentTable.cells[i]);
  35. if(tX>=parentCell.left&&tX<=parentCell.right&&tY>=parentCell.top&&tY<=parentCell.bottom){
  36. var subTables=parentTable.cells[i].getElementsByTagName("table");
  37. if(subTables.length==0){
  38. if(tX>=parentCell.left&&tX<=parentCell.right&&tY>=parentCell.top&&tY<=parentCell.bottom){
  39. parentTable.cells[i].appendChild(ao);
  40. }
  41. break;
  42. }
  43. for(var j=0;j<subTables.length;j++){
  44. var subTable=getInfo(subTables[j]);
  45. if(tX>=subTable.left&&tX<=subTable.right&&tY>=subTable.top&&tY<=subTable.bottom){
  46. parentTable.cells[i].insertBefore(ao,subTables[j]);
  47. break;
  48. }else{
  49. parentTable.cells[i].appendChild(ao);
  50. }
  51. }
  52. }
  53. }
  54. }
  55. function dragEnd(){
  56. if(!draged)return;
  57. draged=false;
  58. mm=ff(150,15);
  59. }
  60. function getInfo(o){//取得坐标
  61. var to=new Object();
  62. to.left=to.right=to.top=to.bottom=0;
  63. var twidth=o.offsetWidth;
  64. var theight=o.offsetHeight;
  65. while(o!=document.body){
  66. to.left+=o.offsetLeft;
  67. to.top+=o.offsetTop;
  68. o=o.offsetParent;
  69. }
  70. to.right=to.left+twidth;
  71. to.bottom=to.top+theight;
  72. return to;
  73. }
  74. function ff(aa,ab){//从GOOGLE网站来,用于恢复位置
  75. var ac=parseInt(getInfo(tdiv).left);
  76. var ad=parseInt(getInfo(tdiv).top);
  77. var ae=(ac-getInfo(ao).left)/ab;
  78. var af=(ad-getInfo(ao).top)/ab;
  79. return setInterval(function(){if(ab<1){
  80. clearInterval(mm);
  81. tdiv.removeNode(true);
  82. ao=null;
  83. return
  84. }
  85. ab--;
  86. ac-=ae;
  87. ad-=af;
  88. tdiv.style.left=parseInt(ac)+"px";
  89. tdiv.style.top=parseInt(ad)+"px"
  90. }
  91. ,aa/ab)
  92. }
  93. function inint(){//初始化
  94. for(var i=0;i<parentTable.cells.length;i++){
  95. var subTables=parentTable.cells[i].getElementsByTagName("table");
  96. for(var j=0;j<subTables.length;j++){
  97. if(subTables[j].className!="dragTable")break;
  98. subTables[j].rows[0].className="dragTR";
  99. subTables[j].rows[0].attachEvent("onmousedown",dragStart);
  100. subTables[j].attachEvent("ondrag",draging);
  101. subTables[j].attachEvent("ondragend",dragEnd);
  102. }
  103. }
  104. }
  105. inint();