当前位置:   article > 正文

el-dialog 实现拖拽功能_el-dialog 拖动

el-dialog 拖动
  1. /*
  2. * 使用方法
  3. * 将以下代码复制到一个js文件中,然后在入口文件main.js中import引入即可;
  4. * 给elementUI的dialog上加上 v-dialogDrag 指令就可以实现弹窗的全屏和拉伸了。
  5. * 给dialog设置 :close-on-click-modal="false" , 禁止点击遮罩层关闭弹出层
  6. * 如果是form表单,不要将提交等按钮放置el-form-item,以免在上下拉伸时被隐藏
  7. */
  8. // v-dialogDrag: 弹窗拖拽+水平方向伸缩
  9. // v-dialogDrag: 弹窗拖拽
  10. Vue.directive('dialogDrag', {
  11. bind (el, binding, vnode, oldVnode) {
  12. const dialogHeaderEl = el.querySelector('.el-dialog__header')
  13. const dragDom = el.querySelector('.el-dialog')
  14. dialogHeaderEl.style.cursor = 'move'
  15. // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
  16. const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null)
  17. dialogHeaderEl.onmousedown = (e) => {
  18. // 鼠标按下,计算当前元素距离可视区的距离
  19. const disX = e.clientX - dialogHeaderEl.offsetLeft
  20. const disY = e.clientY - dialogHeaderEl.offsetTop
  21. // 获取到的值带px 正则匹配替换
  22. let styL, styT
  23. // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
  24. if (sty.left.includes('%')) {
  25. styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100)
  26. styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100)
  27. } else {
  28. styL = +sty.left.replace(/\px/g, '')
  29. styT = +sty.top.replace(/\px/g, '')
  30. };
  31. document.onmousemove = function (e) {
  32. // 通过事件委托,计算移动的距离
  33. const l = e.clientX - disX
  34. const t = e.clientY - disY
  35. // 移动当前元素
  36. dragDom.style.left = `${l + styL}px`
  37. dragDom.style.top = `${t + styT}px`
  38. // 将此时的位置传出去
  39. // binding.value({x:e.pageX,y:e.pageY})
  40. }
  41. document.onmouseup = function (e) {
  42. document.onmousemove = null
  43. document.onmouseup = null
  44. }
  45. }
  46. }
  47. })
  48. // v-dialogDragWidth: 弹窗宽度拖大 拖小
  49. Vue.directive('dialogDragWidth', {
  50. bind (el, binding, vnode, oldVnode) {
  51. const dragDom = binding.value.$el.querySelector('.el-dialog')
  52. el.onmousedown = (e) => {
  53. // 鼠标按下,计算当前元素距离可视区的距离
  54. const disX = e.clientX - el.offsetLeft
  55. document.onmousemove = function (e) {
  56. e.preventDefault() // 移动时禁用默认事件
  57. // 通过事件委托,计算移动的距离
  58. const l = e.clientX - disX
  59. dragDom.style.width = `${l}px`
  60. }
  61. document.onmouseup = function (e) {
  62. document.onmousemove = null
  63. document.onmouseup = null
  64. }
  65. }
  66. }
  67. })

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/709177
推荐阅读
相关标签
  

闽ICP备14008679号