本文共 1185 字,大约阅读时间需要 3 分钟。
在开发Element UI项目时,需要实现弹框的拖拽和缩放功能。以下是优化后的实现方案,涵盖了拖拽排序和缩放的完整逻辑。
拖拽排序通过拖拽弹框标题栏实现,逻辑如下:
mousedown事件,计算初始拖拽位置。mousemove事件跟踪鼠标位置,计算当前位置相对于弹框的偏移量。cssText更新弹框的left和top属性,并触发自定义事件dragDialog。缩放功能通过在弹框右下角添加拖拽缩放标记实现,逻辑如下:
cssText更新弹框的宽度和高度,并触发自定义事件dragDialogHeight。在主组件中使用自定义指令:
确保弹框和缩放标记样式正确:
.el-dialog { margin: 0 auto;}.mouse { position: absolute; right: 0; bottom: 0; cursor: se-resize; width: 10px; height: 10px; background: #666; z-index: 999;} 修复自定义指令,确保逻辑正确:
Vue.directive('dialogDrag', { bind(el, binding) { if (!binding.value) return; const dialogHeaderEl = el.querySelector('.el-dialog__header'); const dragDom = el.querySelector('.el-dialog'); dialogHeaderEl.style.cursor = 'move'; dragDom.style.position = 'fixed'; dragDom.style.top = '150px'; // 其他初始化逻辑... }, unbind() { // 解绑事件... }}); mousemove和mouseup事件在松开鼠标时被正确清除,以防内存泄漏。通过以上优化,可以实现可拖拽、可缩放的弹框组件,满足开发需求。
转载地址:http://pewn.baihongyu.com/