当前位置:   article > 正文

流畅交互体验:实现Vue中el-dialog拖动效果的完美指南_eldialog拖拽功能

eldialog拖拽功能

        在使用elementUI中的Dialog组件时,总有无理的产品提需求,在右上角增加可点击全屏的功能、给我实现弹出框可任意拖拽的功能......这种情况下,组件就不能很好的使用了,那么,只能由我们前端攻城狮进行代码攻克了,接下来就实现其中的可拖拽功能

        话不多说我将用使用自定义指令的方式(适用于多el-dialog实现可拖拽的需求,如B端系统、ERP系统等)

        当然也有使用第三方库的方式进行实现,在这里就不做过多赘述了,推荐使用vuedraggable

        好了,回归正题,接下来看实现过程

1.  创建draggable.js文件

  1. // draggable.js
  2. export default {
  3. bind(el) {
  4. let startPosition = { x: 0, y: 0 };
  5. let dialogPosition = { x: 0, y: 0 };
  6. let dragging = false;
  7. const handleMouseDown = (e) => {
  8. startPosition.x = e.clientX;
  9. startPosition.y = e.clientY;
  10. dialogPosition.x = parseInt(el.style.left, 10) || 0;
  11. dialogPosition.y = parseInt(el.style.top, 10) || 0;
  12. document.addEventListener('mousemove', handleMouseMove);
  13. document.addEventListener('mouseup', handleMouseUp);
  14. dragging = true;
  15. e.stopPropagation();
  16. e.preventDefault();
  17. };
  18. const handleMouseMove = (e) => {
  19. if (dragging) {
  20. const offsetX = e.clientX - startPosition.x;
  21. const offsetY = e.clientY - startPosition.y;
  22. el.style.left = `${dialogPosition.x + offsetX}px`;
  23. el.style.top = `${dialogPosition.y + offsetY}px`;
  24. }
  25. };
  26. const handleMouseUp = () => {
  27. document.removeEventListener('mousemove', handleMouseMove);
  28. document.removeEventListener('mouseup', handleMouseUp);
  29. dragging = false;
  30. };
  31. el.addEventListener('mousedown', handleMouseDown);
  32. },
  33. };

2.  在需要拖拽功能的组件内

  1. <template>
  2. <div>
  3. <el-dialog
  4. title="可拖拽对话框"
  5. :visible="dialogVisible"
  6. :close-on-click-modal="false"
  7. :before-close="handleClose"
  8. v-draggable
  9. >
  10. <span>这是一个可拖拽的对话框。</span>
  11. <span slot="footer" class="dialog-footer">
  12. <el-button @click="dialogVisible = false">关闭</el-button>
  13. </span>
  14. </el-dialog>
  15. </div>
  16. </template>
  17. <script>
  18. import draggable from './draggable.js';
  19. export default {
  20. directives: {
  21. draggable,
  22. },
  23. data() {
  24. return {
  25. dialogVisible: false,
  26. };
  27. },
  28. methods: {
  29. handleClose(done) {
  30. done();
  31. },
  32. },
  33. };
  34. </script>

 看效果:

方式总结:

        将新建的draggable.js文件正确的引入组件中,进行自定义指令的注册,也可以将指令进行全局注册,相信可谓同学都会,在这我就不写了。

        上述代码中我仅实现简单直接的拖拽方式,所以 v-draggable 指令没有传递任何参数,如果有同学想要更繁琐的拖拽实现的话可以私信、评论区讨论呦

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

闽ICP备14008679号