首页 > 其他分享 >Vue3 v-drag 拖拽指令的简单使用

Vue3 v-drag 拖拽指令的简单使用

时间:2023-04-03 15:45:56浏览次数:54  
标签:Vue3 class drag 使用 组件 div 拖拽

文档

官网文档:https://www.npmjs.com/package/v-drag

使用

安装、引入

npm install v-drag --save

import drag from "v-drag"

使用

直接使用:

<div v-drag>Drag me!</div>

注意:对原本绝对定位水平居中的div,其居中的实现方式应为:

div {
	position: absolute;
	left: 50%;
	transform: translateX(-50%);
        // 如果使用以下这种居中定位方式,拖动组件会有问题
        // left: 0;
        // right: 0;
        // margin: 0 auto;
}

如果你需要拖拽的div中包含输入框、按钮等表单操作,对整个div进行drag是不可以的,这会使其中的输入操作失效。
插件提供了指定拖拽目标的选项,可以指定仅某个class的div可以被拖拽,使用方式形如:v-drag="'.xxx'"
以下写法,拖动标题行,实现整个table-dialog的移动。

<div v-drag="'.table-title'" class="table-dialog">
                <!-- 标题 -->
		<div class="table-title">
		</div>
                <!-- 其他内容 -->
                <div>...</div>
</div>

一点优化

我在一个通用的表格弹窗组件table-dialog中使用了v-drag指令,但发现存在一个bug:使用固定名称class指定拖拽对象,会导致多个共用此弹窗组件的自定义组件同时打开时,下方的组件拖拽失效。
解决方法:使用动态class。(api给出了ref的方式,但我简单试了下没成功,也可以从这个方向往下走)

<template>
	<div v-drag="'.' + dynamicClassName" class="table-dialog">
                <!-- 标题 -->
		<div :class="['table-title', dynamicClassName]">
		</div>
                <!-- 其他内容 -->
                <div>...</div>
	</div>
</template>

<script setup>
const dynamicClassName = computed(() => {
        // 类不能以数字开头,固定在前加一个字母
        // randomUUID() 随便什么的随机字符串生成方法
	return "d" + randomUUID(); 
});
</script>

标签:Vue3,class,drag,使用,组件,div,拖拽
From: https://www.cnblogs.com/cosmicbison/p/17277395.html

相关文章

  • Vue3 watch 监听函数
    1、watch函数(既要指明监视的属性,也要指明监视的回调)坑:1)监视reactive定义的响应式数据时:oldValue无法正确获取、强制开启了深度监视(deep配置失效)2)监视reactive定义的响应式数据中某个属性时:deep配置有效setup(){letsum=ref(0)letmsg=ref('ABCD')letp......
  • vue3路由跳转params传参接收不到
      这样路由可以跳转过去,但接收到了params是一个空对象。 解决方法由于之前的params传参在页面刷新之后,参数会丢失,所以vue将这种方法移除了。vue推荐的路由跳转传参方法:1.使用query传递参数2.使用vuex、pinia对参数进行存储3.使用HistoryAPI方式传递和接收  ......
  • vue3 ant-Design-vue提交按钮放在表单外提交,自定义提交按钮
    <template><a-formref="urlEditRef":model="urlEditInfo"name="urlEdit_rule"layout="vertical"><a-form-itemlabel="跳转链接"name="longUrl":rules=&qu......
  • Vue3中修改父组件传递到子组件中的值
    Vue3中修改父组件传递到子组件中的值1.大家都知道,vue是具有单向数据流的传递特性。当你在子组件中修改父组件传递过来的数据的时候,控制台就会报出错误,说不让你对父组件传递的值进行修改。2.那么,尤大大为了解决这个问题,在vue3的时候给我们提供了一个新的思路:v-model来实现父传子,并......
  • js mouse drag or click
    onmousedown鼠标按下触发事件onmousemove鼠标按下时持续触发事件onmouseup鼠标抬起触发事件click点击事件=mouseup+mousedowndrag拖拽=mousedown+mousemove+mouseup//之后我们可以根据点击的位置或者时间来判定是点击还是拖拽......
  • vue3 - 引入自定义插件的组件的具体写法
    1.背景我的这一篇随笔详细讲解组件怎么制作与引入使用【vue3-在单独的项目制作自定义组件插件,支持vite【前提不要使用webpack专属语法】,并引入插件-心得-岑惜-博客园(cnblogs.com)】但在局部引入组件时,eslint红色警告   引用名言:“又不是不能用==”强迫症看着实......
  • Vue3【Axios网络请求(GET、POST 、并发请求、全局配置 )】(八)-全面详解(学习总结---从入
    ......
  • Vue3【Transition(效果、CSS 过渡、使用animation、TransitionGroup、 KeepAlive、Tele
    ......
  • vue3挂载全局方法
    在vue3中可以通过app.config.globalProperties来挂载全局方法。main.jsconstapp=createApp(App)//定义全局方法constmyGlobalMethod=()=>{console.log('Thisisaglobalmethod.')}//挂载全局方法app.config.globalProperties.$myGlobalMethod=myGloba......
  • Vue3.0
    1.setup1.理解:Vue3.0中一个新的配置项,值为一个函数2.setup是所有CompositionAPI的表演的舞台3.组件用所用到的:数据方法等等,均要配置在setup中4.setup函数的两种返回值​1.若返回一个对象,则对象中的属性,方法在模板中均可以直接使用(重点关注!)​2.若返回......