可拖拽调整大小,嵌套组件vue-draggable-resizable

官网案例图:

我自己需要的需求图:

其中实现的功能有:

  • 父元素控制组件
  • 父组件和子组件都可拖动和调整大小
  • 其中子组件限制在父组件中移动和调整大小
  • 父组件具有宽高比和minHeight,minWidth
  • 冲突检测
  • 元素对齐辅助线

其中我用的组件是二次开发后的,链接在下面

GitHub - gorkys/vue-draggable-resizable-gorkys: Vue 用于可调整大小和可拖动元素的组件并支持冲突检测、元素吸附、元素对齐、辅助线

其中遇到一个问题就是 :

当父组件设置为:parent="true"后,拖动父组件只在其中高度的范围内晃动

解决思路:设置高度为100%;相对定位,因为他死文档流的形式,所有一定要设置高度和宽度;

父级css样式:

 .canvas {
      height: calc(100% - 60px);
      border: 1px solid gray;
      position: relative;
      margin: 5px 10px 10px 10px;
      .item-canvas {
        border:3px solid #b5b5b5;
      }
      .title {
        top: 50%;
        left: 50%;
        color: #000;
        font-size: 12px;
        font-weight: bold;
        position: absolute;
        transform: translate(-50%,-50%);
      }

      .areaContainer {
        width: 100%;
        height: 100%;
      }
}

其中子组件在父组件中拖拽也是一样,在父组件中晃动

解决思路:
1、设置:ref="`store-${store.id}`",在激活方法中@activated设置其中的checkParentSize
2、在子组件的外边添加div设置其中的宽高为100%
3、设置:@activated="() => onStoreActivated(store)"
代码如下:在子组件中:

 onStoreActivated(store) {
      console.log('onStoreActivated',this.$refs[`store-${store.id}`]);
      if (this.$refs[`store-${store.id}`]) {
        this.$refs[`store-${store.id}`][0].checkParentSize();
        console.log('checkParentSize');
      }
      this.dbFormStore = store;
      console.log(this.dbFormStore)
    },

其他函数说明:

@contextmenu.prevent="onCanvasActiveParentContextmenu"

采用的是鼠标右键快捷菜单方法;

用到的插件是这个:GitHub - GitHub-Laziji/menujs: Vue2 原生实现右键菜单组件, 零依赖

其中拖拽组件中的方法和prop属性在上面链接中都有;

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值