Kingkukuu 2024-04-07 10:26 采纳率: 0%
浏览 16

el-dialog拖拽

element plus里面的dialog 使用里面的自带属性draggable实现拖拽
但是出现dialog之后点击拖拽会错位 然后才正常 有什么办法解决吗
dialog嵌套在div里面 div使用了v-for

img

鼠标点击拖拽后 发生错位

img

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-07 10:26
    关注

    引自免费微信小程序:皆我百晓生

    非常感谢您的问题。首先,让我详细解释一下Vue.js和element plus如何使用draggable属性进行拖拽操作。

    在Vue.js中,我们可以使用v-draggable指令来创建一个可拖拽组件。例如,如果你有一个用于编辑文档的组件,你可以使用以下代码将其添加到元素上:

    <template>
        <div id="editor">
            <!-- Vue editor code here -->
        </div>
    </template>
    
    <script>
    export default {
        data() {
            return {
                // Editor data
            };
        },
        methods: {
            drag() {
                this.$refs.editor.style.display = 'block';
                setTimeout(() => {
                    this.$refs.editor.style.display = 'none';
                }, 200);
            }
        }
    };
    </script>
    

    在element plus中,我们同样可以使用Draggable类来实现拖拽功能。例如:

    <template>
        <div draggable="true">
            <!-- Element content here -->
        </div>
    </template>
    
    <script>
    import Draggable from 'element-plus';
    
    export default {
        components: {
            Draggable
        },
        mounted() {
            this.$refs.container.addEventListener('mousedown', this.handleMouseDown);
        },
        beforeDestroy() {
            this.$refs.container.removeEventListener('mousedown', this.handleMouseDown);
        },
        methods: {
            handleMouseDown(e) {
                e.preventDefault();
                this.$refs.container.getDragHandle().ondragstart(this.drag.bind(this));
            },
            drag() {
                this.$refs.container.emit('drag');
            }
        }
    };
    </script>
    

    对于拖拽之后发生的错误,这可能是因为被拖动的元素没有正确的定位或约束。为了处理这个问题,我们需要调整视口的位置以及确保父元素有一定的高度。这是示例代码:

    <template>
        <div id="editor">
            <!-- Editor content here -->
        </div>
    </template>
    
    <script>
    import Draggable from 'element-plus';
    
    export default {
        components: {
            Draggable
        },
        mounted() {
            this.$refs.container.addEventListener('mousedown', this.handleMouseDown);
        },
        beforeDestroy() {
            this.$refs.container.removeEventListener('mousedown', this.handleMouseDown);
        },
        methods: {
            handleMouseDown(e) {
                e.preventDefault();
                this.$refs.container.getDragHandle().ondragstart(this.drag.bind(this));
            },
            drag() {
                const el = this.$refs.container.querySelector('.ql-sticky');
                const rect = el.getBoundingClientRect();
    
                if (!rect.top || !rect.right || !rect.bottom || !rect.left) {
                    console.error('Element is not vertically centered.');
                    return;
                }
    
                this.$refs.container.getDragHandle().ondrag({
                    top: rect.top + window.pageYOffset,
                    left: rect.left + window.pageXOffset,
                    containment: this.$refs.container
                });
    
                setTimeout(() => {
                    this.$refs.container.getDragHandle().ondragend(this.drop.bind(this));
                }, 200);
            },
            drop() {
                this.$refs.container.removeChild(this.$refs.container.querySelector('.ql-sticky'));
            }
        }
    };
    </script>
    

    在这个例子中,我们在每次拖拽元素时都会检查其是否垂直对齐,并在合适的位置添加DropZone容器。这样可以帮助用户更轻松地控制他们在编辑器中的位置。

    以上就是关于el-dialog拖拽、Vue.js和element plus实现的基本操作。如果您有任何问题或需要进一步的帮助,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月7日

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化