drag.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. /**
  2. * 弹窗页面同一时间只能渲染一个,可拖拽元素的id都一样'dragModalWrap','dragModalTitle'
  3. * 保证能在关闭的时候移除move事件
  4. */
  5. import $ from 'jquery';
  6. import {
  7. getWindowInnerHeight,
  8. getWindowInnerWidth,
  9. getPageCoordinate
  10. } from './tools'
  11. let width = '',//屏幕宽度
  12. height = '', //屏幕高度
  13. dragWrapper = '',//拖拽元素
  14. mouseX = 0,//鼠标距离页面左侧
  15. mouseY = 0,//鼠标距离页面上部
  16. dragX = 0,//鼠标可拖拽到左边的最大距离(元素定位左侧距离)
  17. dragY = 0,//鼠标可拖拽到上边的最大距离(元素定位上边距离)
  18. isDrag = false,//元素是否处于拖拽中
  19. addPart = null;//展开区域,这个展开的宽度应当是固定宽度了
  20. /**
  21. *
  22. * @param {事件对象} event
  23. * @param {被拖动的元素} dragModalWrap
  24. * @param {可拖动的区域} dragModalTitle
  25. */
  26. function handleMove(event) {
  27. let wrap = $("#"+dragWrapper); //被拖拽的元素
  28. let dragDes = $("#"+addPart); //展開区域
  29. let page = getPageCoordinate(event, '0');//获取鼠标位置
  30. let maxDragX = 0,dragDesWidth = 0;
  31. let wrapHeight = wrap[0].offsetHeight;//直接用.height()获取的高度不准确
  32. let wrapWidth = wrap[0].offsetWidth;
  33. let maxDragY = height - wrapHeight; //最大可拖拽y方向距离
  34. if (dragDes[0]) { //存在就有类似治疗方案的弹窗,最大可推拽x方向距离
  35. dragDesWidth = dragDes[0].offsetWidth//展开元素的宽度
  36. maxDragX = width - wrapWidth - dragDesWidth
  37. } else {
  38. maxDragX = width - wrapWidth
  39. }
  40. if (isDrag) {
  41. dragX = page.boxLeft - mouseX //鼠标可拖拽到左边的最大距离
  42. dragY = page.boxTop - mouseY //鼠标可拖拽到上边的最大距离
  43. if (dragX < 0) { //不能超出左边界
  44. dragX = 0
  45. }
  46. if (dragY < 0) { //不能超出上边界
  47. dragY = 0
  48. }
  49. if (dragDes[0]) {
  50. if (width - dragX - dragDesWidth < wrapWidth) { //不能超出右边界
  51. dragX = maxDragX
  52. }
  53. } else {
  54. if (width - dragX < wrapWidth) { //不能超出右边界
  55. dragX = maxDragX
  56. }
  57. }
  58. if (height - dragY < wrapHeight) { //不能超出下边界
  59. dragY = maxDragY
  60. }
  61. // isMove = true
  62. wrap.css({
  63. left: dragX + 'px',
  64. marginLeft: 0 + 'px',
  65. marginTop: 0 + 'px',
  66. top: dragY + 'px',
  67. bottom:'auto',
  68. right:'inherit',
  69. })
  70. }
  71. }
  72. /**
  73. * 鼠标弹起弹窗不在跟随鼠标移动
  74. */
  75. function handleUp(){
  76. isDrag = false;
  77. return
  78. }
  79. /**
  80. * @param {拖动元素/清除拖动事件监听} type add:添加事件监听 del:移除事件监听
  81. * @param {展开元素id} addDom
  82. */
  83. function dragBox(dragWrap,dragTop,type,addDom,img) {
  84. let drag = $("#"+dragTop); //拖拽区域
  85. let wrap = $("#"+dragWrap); //被拖拽的元素
  86. width = getWindowInnerWidth();
  87. height = getWindowInnerHeight();
  88. addPart = addDom||null;
  89. dragWrapper = dragWrap;
  90. if (type === 'del') {
  91. $(document).off('mousemove', handleMove)
  92. $(document).off('mouseup', handleUp)
  93. } else {
  94. drag.on('mousedown', function (event) {
  95. let lenHeight = wrap.height()
  96. console.log(lenHeight,78787)
  97. if(img){
  98. $("#preImg").css("height",(lenHeight)+'px')
  99. }
  100. let page = getPageCoordinate(event, '0');
  101. mouseX = page.boxLeft - wrap.offset().left; //鼠标到拖拽元素的左边界的距离
  102. mouseY = page.boxTop - wrap.offset().top; //鼠标到拖拽元素的上边界的距离
  103. isDrag = true
  104. })
  105. $(document).on('mousemove', handleMove)
  106. $(document).on('mouseup', handleUp)
  107. }
  108. }
  109. /**
  110. * 同时出现两个弹窗,第二个弹窗写死
  111. */
  112. let mouseXS = 0,mouseYS = 0,dragXS = 0,dragYS = 0,canDrag = false;
  113. function dragBoxs(type){
  114. let drag = $("#drugTitle"),wrap = $("#drugWrapper");
  115. if(type == 'del'){
  116. $(document).off('mousemove', handleMoves)
  117. $(document).off('mouseup', handleUps)
  118. return
  119. }else{
  120. drag.on('mousedown',function(event){
  121. let page = getPageCoordinate(event,'0');
  122. mouseXS = page.boxLeft - wrap.offset().left;
  123. mouseYS = page.boxTop - wrap.offset().top;
  124. canDrag = true;
  125. })
  126. $(document).on('mousemove',handleMoves)
  127. $(document).on('mousemove',handleUps)
  128. }
  129. }
  130. function handleUps(){
  131. $(document).on('mouseup',function(){canDrag = false;return;})
  132. }
  133. function handleMoves(event){
  134. let wrap = $("#drugWrapper");
  135. let wrapHeight = wrap[0].offsetHeight,wrapWidth = wrap[0].offsetWidth;
  136. let width = getWindowInnerWidth(),height = getWindowInnerHeight(),page = getPageCoordinate(event,'0');
  137. let maxDragY = height - wrapHeight;
  138. let maxDragX = width - wrapWidth
  139. if(canDrag){
  140. dragXS = page.boxLeft - mouseXS;
  141. dragYS = page.boxTop - mouseYS;
  142. if(dragXS < 0){dragXS = 0}
  143. if(dragYS < 0){dragYS = 0}
  144. if(width-dragXS < wrapWidth){dragXS = maxDragX}
  145. if(height-dragYS < wrapHeight){dragYS = maxDragY}
  146. wrap.css({left:dragXS + 'px',marginLeft:0 + 'px',top:dragYS + 'px'})
  147. }
  148. }
  149. module.exports = {
  150. dragBox,
  151. dragBoxs
  152. }