Vue 使用 vue-drag-resize 实现拖拽和随意缩放大小及安装报错处理

news/2025/1/18 6:51:17/文章来源:https://www.cnblogs.com/moranjl/p/18295874

一、vue-drag-resize的安装

yarn add vue-drag-resize
 
下面是错误解决方案:
TypeError: Cannot read properties of undefined (reading ‘_c’)
 
解决方案:
在引入时加上“/src”:
 
import VueDragResize from "vue-drag-resize";
改成
import VueDragResize from "vue-drag-resize/src";

 

属性

属性 说明 类型 是否必须 默认值 说明
isActive 激活状态 Boolean false 处于激活状态的组件才能进行拖拽与缩放等操作,状态呈现激活状态
isDraggable 允许拖拽 Boolean true  
isResizable 允许缩放 Boolean true  
aspectRatio 允许等比例缩放 Boolean false 设置为true,则会按照元素的元比例缩放。坑:定义了这个属性,发现重新设置宽高的时候出现了异常(新值比例不同于旧值),需要在重设宽高的时候把aspectRatio设置为false,再将其设置回去,才能保证新值的等比例
w 宽度 Number 200  
h 高度 Number 200  
minw 最小宽度 Number 50 注意不能设置为0,因为这个组件里面属性要求大于0
minh 最小高度 Number 50 注意不能设置为0,因为这个组件里面属性要求大于0
x 定位left Number 0  
y 定位top Number 0  
z 层级 Number auto 注意在元素激活的时候,z会被设置为最高的,所以在管理z的时候要注意
sticks 元素缩放的节点定义 Array [‘tl’, ‘tm’, ‘tr’, ‘mr’, ‘br’, ‘bm’, ‘bl’, ‘ml’]  
preventActiveBehavior 单击组件外区域来禁止组件行为 Boolean false 设置这个属性true,就可以解决在其他区域操作返回到组件区域的时候,不需要再次点击就激活组件
parentLimitation 允许超出父级元素 Boolean false 设置为true,则限制操作组件不能超出父级元素
parentW 父级宽度 Number 0 该值限制了元素可以拖动的水平最大宽度,前提是parentLimitation=true
parentH 父级高度 Number 0 该值限制了元素可以拖动的水平最大高度,前提是parentLimitation=true
parentScaleX 定义初始水平缩放比例 Number 1  
parentScaleY 定义初始垂直缩放比例 Number 1  
axis 允许拖拽的方向 String both 取值可以为x、 y、 both、none
dragHandle 定义拖拽时的classname String  
dragCancel 定义取消拖拽时的classname String  
 

方法

例子:<vue-drag-resize @clicked="onActivated">
 
方法 说明 参数类型 参数例子
clicked 组件点击事件 组件实例  
activated 点击组件事件  
resizing 缩放时事件 object {left,top,width,height}
resizestop 缩放结束 object 同resizing一样
dragging 拖拽时事件 object 同resizing一样
dragstop 拖拽结束事件 object 同resizing一样
 

实战案例:

//template模板部分
<template><div class="listBox"><VueDragResizeclass="list":isActive="true":minw="1":minh="1":w="cardData.cardStyle.font2.size * (170 / 13)":h="cardData.cardStyle.font2.size * (20 / 13)":x="cardData.cardStyle.font2.fontX - 15":y="cardData.cardStyle.font2.fontY":isResizable="false"@dragging="draggingFun($event, 'font2')":z="40":parentLimitation="true":aspectRatio="false":parentW="345":parentH="160"><p class="listBox_p" :style="`font-size:${cardData.cardStyle.font2.size}px`">ID:165188888888888999</p></VueDragResize></div>
</template>//JS部分
<script lang="ts">import VueDragResize from "vue-drag-resize/src";export default defineComponent({components: { VueDragResize },})
</script>//CSS部分
<style lang="less" scoped>
.listBox {width: 345px;height: 160px;position: relative;top: 50%;left: 50%;box-shadow: 0px 0px 5px #aaa;transform: translate(-50%, -50%);border-radius: 8px;margin: 10px 15px;.vdr.active:before {display: none;}.list {position: absolute;top: 0;left: 0;.listBox_p {white-space: nowrap;cursor: pointer;}}
}
</style>

 

使用问题

1、怎么修改使点击组件外面后,不需要点击组件才能进行?
 
:preventActiveBehavior="true" 设置这个属性,禁用点击组件外事件
 
2、在拖拽元素里面添加input等类似的表单性元素,无法正常点击操作,特别是focus无法做到,click也是经常失效
 
原因:vue-drag-resize 的设计问题,在元素内部只能触发本元素,如果是有表单元素,只能被动的触发
 
解决方案:
 
<vue-drag-resize @activated="activateEv(index)" />
activateEv(index) {console.log('activateEv' + index);this.$refs['drag-input'].focus();
}
 
3、默认样式修改(去掉虚线边框)
拖拽的组件在点击拖拽时,会有一个默认的虚线边框(修改默认样式)
 
第一个问题比较好解决,在网上一搜就能搜到
解决方法:在style标签里写上
 
.vdr.active:before {display:none;
}
 
4、拖拽层级,当前拖拽的元素层级要最大
 
 
解决方法:使用@clicked事件监听,当点击拖动元素时,可以传入此元素的索引,把此元素的层级设置为最高,其他的设置为最低
 
<template><div class="father" >书包层级{{temp[0]}}手表层级{{temp[1]}}<VueDragResize:w="100" :h="100" :z="temp[0]":x="10" :y="10":parent-limitation="true":is-resizable="false" @clicked="act(0)"@dragging="dragging"><img src="../assets/bag.png" alt="":style="{width:wid+'px'}"></VueDragResize><VueDragResize:w="100" :h="100" :z="temp[1]":x="200" :y="100":parent-limitation="true"@clicked="act(1)"@activated="onActivated"><img src="../assets/watch.png" alt="":style="{width:wid+'px'}"></VueDragResize></div>
</template><script>
import VueDragResize from 'vue-drag-resize'export default {name: 'Drag',data() {return {temp: [0, 0],}},components: {VueDragResize},methods: {//点击事件,传入索引,把所有层级都设置为1,当前元素设置为10act(index) {for(let i=0;i<this.temp.length;i++){this.temp[i]=1}this.temp[index]=10this.$forceUpdate()},}
}
</script><style scoped>
.father {height: 400px;width: 700px;border: 1px solid red;position: relative;margin: 0 auto;
}
.drag{border: 2px solid red;
}
</style>
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/776685.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PgStatement的executeCachedSql(String sql, int flags, String @Nullable [] columnNames)方法的学习

方法代码如下: private boolean executeCachedSql(String sql, int flags,String @Nullable [] columnNames) throws SQLException {//第一部分PreferQueryMode preferQueryMode = connection.getPreferQueryMode();boolean shouldUseParameterized = false;//第二部分QueryEx…

初识RestAssured

1、接口测试的本质 不在于创造,在别人写好的情况下去调用--发起请求,校验结果 2、接口测试的四要素URL地址 请求方式 请求参数 返回值3、RestAssured介绍 RestAssured的依赖导入点击查看代码 <dependencies> <!-- Rest-Assured核心库 --> <dependency> …

ximo基础脱壳教程的脱壳学习记录

ximo基础脱壳教程的脱壳学习记录 之前遇到壳直接脚本自动化处理了,现在初步学习一下手脱壳。(中间一直用的x32dbg,后来有些壳换od脱了) 参考教程https://www.52pojie.cn/thread-582852-1-1.html 1、手脱UPX壳 查壳方法1:单步跟踪 就是一直单步走,如果是向下跳转就跳,如果…

.net 8 应用在docker容器中创建失败 Failed to create CoreCLR, HRESULT: 0x80070008

在UAT环境中docker容器里部署.net8 应用没问题,在dev环境docker run 启动失败,并报错 Failed to create CoreCLR, HRESULT: 0x80070008以下文章解决了我遇到的问题,感谢 https://www.cnblogs.com/cyq1162/p/17981333 处理办法 增加--security-opt seccomp=unconfined docker…

【AI冰封挑战】搭档函数计算,“冰”封你的夏日记忆

在 AI 绘画领域,Stable Diffusion、 WebUI、Midjourney 等工具各领风骚,但 ComfyUI 以其独特的自动化工作流机制,自问世以来便迅速崭露头角,成为众多应用开发者和艺术创作者的新宠。它不仅革新了 AI 生图的创作流程,更以高效的自动化水平,为AI绘画领域开辟了全新的篇章。…

IT事件经理在数字企业中的角色和责任

什么是IT事件经理? IT事件经理有时也被称为事件指挥官,他们承担着管理组织事件响应的总体责任,从委派各种事件响应任务到与每个利益相关者进行沟通和协调。 示例:当一个全球性的电子商务平台在一次销售活动中流量激增,数以百万计的用户涌入网站时,不可预见的技术故障开始…

maven项目pom文件查看架包依赖处理架包冲突问题

在运行maven项目的时候由于依赖冲突出现如下问题 项目中依赖了多个不同版本的slf4j类库,我们可以使用dependency:tree命令: 找到冲突的依赖,向上找到引入依赖的根源,在对应的pom文件里,添加 <exclusions> 标签即可<dependency><groupId>com.baidu.ai…

Tarjan算法和连通性相关(二)

上一篇博客我们介绍了强连通分量,本文我们继续学习与连通性有关的一些概念 割点什么是割点?对于一个无向图,如果把一个点删除后这个图的极大连通分量数增加了,那么这个点就是这个图的割点 我们画个图理解一下:在这个图中,如果我们把 3 这个点给删除掉,那么这张图就会被拆…

Kotlin 字符串教程:深入理解与使用技巧

Kotlin中的字符串用于存储文本,定义时使用双引号包围字符序列,如`var greeting = "Hello"`。Kotlin能自动推断变量类型,但在未初始化时需显式指定类型,如`var name: String`。可通过索引访问字符串元素,如`txt[0]`获取首字符。字符串作为对象,拥有属性和方法,…

Zabbix搭建

目录zabbix搭建1. 前置环境准备1.1 搭建LNMP2. zabbix准备工作2.1 安装php模块以及编译所需工具2.2 修改php配置2.3 编译安装zabbix2.3.1 下载tar包2.3.2 解压2.3.3 创建用户/组2.3.4 开始安装2.3.5 配置数据库3. 配置zabbix3.1 修改配置文件3.2 Web界面部署4. 安装agent5. 添加…

苍穹外卖项目--学习笔记

苍穹外卖学习文档 软件开发整体介绍 软件开发流程 需求分析 需求规格说明书、产品原型 设计 UI设计、数据库设计、接口设计 编码 项目代码、单元测试 测试 测试用例、测试报告 上线运维 软件环境安装、配置 角色分工项目经理 对整体项目负责,任务分配、把控进度产品经理 进行需…

无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用户满意度飙升

无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用户满意度飙升无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用户满意度飙升 1.简介 MaxKB(Max Knowledge Base)是一款基于 LLM 大语…