Ei kuvausta

dialogDrag.js 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. var dialogInstace, onMoveStartId, mousePos = {
  2. x: 0,
  3. y: 0
  4. }; // 用于记录当前可拖拽的对象
  5. // 获取元素对象
  6. function g(id) {
  7. return document.getElementById(id);
  8. }
  9. // 自动居中元素(el = Element)
  10. function autoCenter(el) {
  11. var bodyW = document.documentElement.clientWidth;
  12. var bodyH = document.documentElement.clientHeight;
  13. var elW = el.offsetWidth;
  14. var elH = el.offsetHeight;
  15. el.style.left = (bodyW - elW) / 2 + 'px';
  16. el.style.top = (bodyH - elH) / 2 + 'px';
  17. }
  18. // 自动扩展元素到全部显示区域
  19. function fillToBody(el) {
  20. el.style.width = document.documentElement.clientWidth + 'px';
  21. el.style.height = document.documentElement.clientHeight + 'px';
  22. }
  23. // Dialog实例化的方法
  24. function Dialog(dragId, moveId) {
  25. var instace = {};
  26. instace.dragElement = g(dragId); // 允许执行 拖拽操作 的元素
  27. instace.moveElement = g(moveId); // 拖拽操作时,移动的元素
  28. instace.mouseOffsetLeft = 0; // 拖拽操作时,移动元素的起始 X 点
  29. instace.mouseOffsetTop = 0; // 拖拽操作时,移动元素的起始 Y 点
  30. if(instace.dragElement.addEventListener){
  31. instace.dragElement.addEventListener('mousedown', function(e) {
  32. var e = e || window.event;
  33. dialogInstace = instace;
  34. instace.mouseOffsetLeft = e.pageX - instace.moveElement.offsetLeft;
  35. instace.mouseOffsetTop = e.pageY - instace.moveElement.offsetTop;
  36. onMoveStartId = setInterval(onMoveStart, 10);
  37. return false;
  38. // instace.moveElement.style.zIndex = zIndex ++;
  39. },false);
  40. }else if(instace.dragElement.attachEvent){
  41. instace.dragElement.attachEvent('onmousedown',function(e) {
  42. var e = e || window.event;
  43. dialogInstace = instace;
  44. instace.mouseOffsetLeft = e.pageX - instace.moveElement.offsetLeft;
  45. instace.mouseOffsetTop = e.pageY - instace.moveElement.offsetTop;
  46. onMoveStartId = setInterval(onMoveStart, 10);
  47. return false;
  48. // instace.moveElement.style.zIndex = zIndex ++;
  49. });
  50. }else{
  51. instace.dragElement.onmousedown = function(e) {
  52. var e = e || window.event;
  53. dialogInstace = instace;
  54. instace.mouseOffsetLeft = e.pageX - instace.moveElement.offsetLeft;
  55. instace.mouseOffsetTop = e.pageY - instace.moveElement.offsetTop;
  56. onMoveStartId = setInterval(onMoveStart, 10);
  57. return false;
  58. // instace.moveElement.style.zIndex = zIndex ++;
  59. }
  60. }
  61. return instace;
  62. }
  63. // 在页面中侦听 鼠标弹起事件
  64. document.onmouseup = function(e) {
  65. dialogInstace = false;
  66. clearInterval(onMoveStartId);
  67. }
  68. document.onmousemove = function(e) {
  69. var e = window.event || e;
  70. mousePos.x = e.clientX;
  71. mousePos.y = e.clientY;
  72. e.stopPropagation && e.stopPropagation();
  73. e.cancelBubble = true;
  74. e = this.originalEvent;
  75. e && (e.preventDefault ? e.preventDefault() : e.returnValue = false);
  76. document.body.style.MozUserSelect = 'none';
  77. }
  78. function onMoveStart() {
  79. var instace = dialogInstace;
  80. if(instace) {
  81. var maxX = document.documentElement.clientWidth - instace.moveElement.offsetWidth;
  82. var maxY = document.documentElement.clientHeight - instace.moveElement.offsetHeight;
  83. instace.moveElement.style.left = Math.min(Math.max((mousePos.x - instace.mouseOffsetLeft), 0), maxX) + "px";
  84. instace.moveElement.style.top = Math.min(Math.max((mousePos.y - instace.mouseOffsetTop), 0), maxY) + "px";
  85. }
  86. }
  87. // 重新调整对话框的位置和遮罩,并且展现
  88. function showDialog() {
  89. g('dialogMove').style.display = 'block';
  90. //g('mask').style.display = 'block';
  91. autoCenter(g('dialogMove'));
  92. //fillToBody(g('mask'));
  93. }
  94. // 关闭对话框
  95. function hideDialog() {
  96. g('dialogMove').style.display = 'none';
  97. //g('mask').style.display = 'none';
  98. }
  99. //// 侦听浏览器窗口大小变化
  100. //window.onresize = showDialog;