vue-drag-resize 全解,vue拖拽缩放组件

vue-drag-resize是一个支持拖拽与缩放的vue插件,支持vue 1.x与2.x,使用方便,上手便利,具有以下的几个特征:

特征

  • 轻量级,无依赖性
  • 所有的操作都是可联动的
  • 支持触摸事件
  • 定义元素可拖拽,或者可缩放,或者二者兼有
  • 提供用于调整大小的操作点与操作框
  • 可以按照比例缩放或者不按照比例缩放元素
  • 可限制拖拽的最大与最小值、拖拽的范围是否超出其父元素
  • 可限制拖动的方向为垂直或水平轴

gitHib地址: github.com/kirillmuras…

用法

$ npm i -s vue-drag-resize

  • 注册为全局组件,在vue项目中注册:

    import Vue from 'vue' import VueDragResize from 'vue-drag-resize' Vue.component('vue-drag-resize', VueDragResize) 在任何组件中使用的时候,不用引入直接;

    <vue-drag-resize:isActive = 'true'>

  • 在需要的组件中引入:

      <template>
          <div id="app">
          <vue-drag-resize></vue-drag-resize>
      </template>
      import VueDragResize from 'vue-drag-resize';
      export default {
          name: 'app',
          components: {
              VueDragResize
          },
      }
    复制代码

属性

isActive 是否激活状态

Type: Boolean || Required: false || Default: false

处于激活状态的组件才能进行拖拽与缩放等操作,状态呈现激活状态

isDraggable 是否允许拖拽

Type: Boolean || Required: false || Default: true

isResizable 是否允许缩放

Type: Boolean || Required: false || Default: true

aspectRatio 是否等比例缩放

Type: Boolean || Required: false || Default: false

设置为true,则会按照元素的元比例缩放。坑:定义了这个属性,发现重新设置宽高的时候出现了异常(新值比例不同于旧值),需要在重设宽高的时候把aspectRatio设置为false,再将其设置回去,才能保证新值的等比例

w 组件宽度

Type: Number || Required: false || Default: 200

h 组件高度

Type: Number || Required: false || Default: 200

minw 最小宽度

Type: Number || Required: false || Default: 50

注意,不能设置为0,因为这个组件里面属性要求大于0

minh 最小高度

Type: Number || Required: false || Default: 50

注意,不能设置为0,因为这个组件里面属性要求大于0

x 定位left

Type: Number || Required: false || Default: 0

y 定位top

Type: Number || Required: false || Default: 0

z 层级

Type: Number || Required: false || Default: auto

注意在元素激活的时候,z会被设置为最高的,所以在管理z的时候要注意

sticks 元素缩放的节点定义

Type: Array || Required: false || Default: ['tl', 'tm', 'tr', 'mr', 'br', 'bm', 'bl', 'ml']

tl - Top left
tm - Top middle
tr - Top right
mr - Middle right
br - Bottom right
bm - Bottom middle
bl - Bottom left
ml - Middle left
复制代码

preventActiveBehavior 单击组件外区域来禁止组件行为

Type: Boolean || Required: false || Default: false

设置这个属性true,就可以解决在其他区域操作返回到组件区域的时候,不需要再次点击就激活组件

parentLimitation 是否超出父级元素

Type: Boolean || Required: false || Default: false

设置为true,则限制操作组件不能超出父级元素

parentW 父级宽度

Type: Number || Required: false || Default: 0

该值限制了元素可以拖动的水平最大宽度,前提是parentLimitation=true

parentH 父级高度

Type: Number || Required: false || Default: 0

该值限制了元素可以拖动的水平最大高度,前提是parentLimitation=true

parentScaleX

Type: Number || Required: false || Default: 1

parentScaleY

Type: Number || Required: false || Default: 1

axis 允许拖拽的方向,

Type: String || Required: false || Default: both

取值可以为x、 y、 both、none

dragHandle 定义拖拽时的classname

Type: String || Required: false

dragCancel 定义取消拖拽时的classname

Type: String || Required: false

事件

clicked 组件点击事件

Required: false || Parameters: 组件实例

activated 点击组件外事件

Required: false || Parameters: 无

resizing 缩放时事件

Required: false || Parameters: object

{
    left: Number, //the X position of the component
    top: Number, //the Y position of the component
    width: Number, //the width of the component
    height: Number //the height of the component
}
复制代码

resizestop 缩放结束

Required: false || Parameters: object

object 同resizing的object

dragging 拖拽时事件

Required: false || Parameters: object

object 同resizing的object

dragstop 拖拽结束事件

Required: false || Parameters: object

object 同resizing的object

issues

  • 在拖拽元素里面添加input等类似的表单性元素,无法正常点击操作,特别是focus无法做到,click也是经常失效[摊手]

vue-drag-resize 的设计问题,在元素内部只能触发本元素,如果是有表单元素,只能被动的触发;解决:

 <vue-drag-resize @activated="activateEv(index)" />
 activateEv(index) {
    console.log('activateEv' + index);
    this.$refs['drag-input'].focus();
  }
复制代码
  • 怎么修改使点击组件外面后,不需要点击组件才能进行?

:preventActiveBehavior="true" 设置这个属性,禁用点击组件外事件

更新计划

  • 设置了组件的minh与minw,使用过程后台一直报警告

minh跟minw注意临界值。默认是50,查看源码发现必须要大于0 ,不能为0,这就是大部分开发人员后台报警告的原因。当然,如果想要设置为0,可以重新定义属性校验规则

  • 多个拖拽元素,之前如何做到互斥?看github上的例子是互斥的,实际用起来发现经常性的无法互斥[摊手]

最佳的解决方案是使用数据去管理这些互斥的元素,可以在父级设置数据管理,或者引入vuex进行数据管理。关键点在点击,拖拽,失焦的时候,做到对数据的精确管理

  • 如何管理多个拖拽元素之间的zIndex?

这是必定会遇到并且无法逃避的一个问题,操作上需要保持当前激活的组件是最上层,但是在总体上,又要确保其图层管理的初始。维护zIndex,并且注意在删除与置换层级的时候对应的数据修改。如果被激活,就设定为一个最大的值,失去激活状态,要恢复到初始值。

这个组件使用简单,清楚明了,我自己在用的时候,就是上手很快,但是要如何良好的应用它,以及处理一些异常的情况下,还是有很多的坑。基于这个组件,我实现了一个编辑器的平台,后续会更新这个组件更实用的一些应用实例,以及如何与vuex结合,实现一个基础的h5编辑器平台。再结合一些设置与多媒体的处理,即可以实现诸如易企秀、Maka等这种h5定制化平台。一步一步总可以实现的,加油鸭?

转载于:https://juejin.im/post/5beb9423e51d4577f96e8d24

Vue-drag-resize是一个基于Vue.js的可拖拽和可调整大小的组件库。要实现达到临界值禁止缩放的效果,你可以按照以下步骤进行操作: 1. 首先,在Vue组件中引入Vue-drag-resize库,并注册该组件。 2. 在组件的模板中,使用Vue-drag-resize组件来包裹需要可调整大小的元素。 3. 在Vue-drag-resize组件上设置相应的属性和事件,以实现禁止缩放的效果。 具体实现步骤如下: 1. 安装Vue-drag-resize库: ``` npm install vue-drag-resize ``` 2. 在Vue组件中引入Vue-drag-resize库,并注册该组件: ```javascript import VueDragResize from 'vue-drag-resize'; export default { components: { VueDragResize, }, // ... } ``` 3. 在组件的模板中使用Vue-drag-resize组件来包裹需要可调整大小的元素: ```html <template> <div> <vue-drag-resize :w="200" :h="200" @resizing="handleResizing"> <!-- 可调整大小的元素内容 --> </vue-drag-resize> </div> </template> ``` 4. 在Vue-drag-resize组件上设置相应的属性和事件,以实现禁止缩放的效果。你可以通过设置`minW`和`minH`属性来限制元素的最小宽度和最小高度,当元素的宽度或高度达到临界值时,禁止继续缩放。同时,你可以通过监听`resizing`事件来实时监测元素的大小变化,并在达到临界值时进行处理: ```html <template> <div> <vue-drag-resize :w="200" :h="200" :minW="100" :minH="100" @resizing="handleResizing"> <!-- 可调整大小的元素内容 --> </vue-drag-resize> </div> </template> <script> export default { methods: { handleResizing(event) { const { width, height } = event; // 在达到临界值时进行处理 if (width <= 100 || height <= 100) { // 禁止继续缩放的逻辑处理 } }, }, }; </script> ``` 这样,当元素的宽度或高度达到临界值时,就会触发`resizing`事件,并在事件处理函数中进行相应的逻辑处理,从而实现禁止缩放的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值