vue 拖拽通过子元素拖拽父元素指令

vue 拖拽通过子元素拖拽父元素指令

需求 拖拽头部 拖动整个框

复制代码
// candrag.js中的代码如下 directive
// 通过子元素 控制移动父元素,  如果 需要直接控制父元素可以再写一个自定义指令 或者改造下这个指令
export default {
  // 定义 Vue 插件
  install(Vue) {
    Vue.directive('candrag', {
      // 全局指令名为 v-candrag
      inserted(el) {
        el.onmousedown = function(ev) {
          // 获取鼠标按下时的偏移量(鼠标位置 - 元素位置)
          const disX = ev.clientX - el.parentNode.offsetLeft
          const disY = ev.clientY - el.parentNode.offsetTop
          document.onmousemove = function(ev) {
            // 获取鼠标实时移动时,元素的位置(鼠标实时位置 - 偏移量)
            const l = ev.clientX - disX
            const t = ev.clientY - disY
            // 实时设置元素位置
            el.parentNode.style.left = l + 'px'
            el.parentNode.style.top = t + 'px'
          }
          document.onmouseup = function() {
            // 鼠标抬起时,销毁移动事件和鼠标抬起事件
            document.onmousemove = null
            document.onmouseup = null
          }
        }
      }
    })
  }
}

使用

复制代码
main.js
import candrag from '@/directive/candrag'
Vue.use(candrag)

使用的地方
<div>
	<div v-candrag></div>
	<div></div>
</div>
相关推荐
Derek_Smart16 分钟前
搞一个小轮子:基于Spring Boot与Vue的Web版SQL执行工具设计与实现
vue.js·spring boot·postgresql
王柏龙19 分钟前
css 属性@font-face介绍
前端·css
羊锦磊19 分钟前
[ HTML 前端 ] 语法介绍和HBuilderX安装
java·开发语言·前端·html
鸢栀w21 分钟前
前端css学习笔记5:列表&表格&背景样式设置
前端·css·笔记·学习
&白帝&26 分钟前
Uniapp 自定义头部导航栏
前端·javascript·uni-app
掘金安东尼26 分钟前
TypeScript条件类型与infer构建类型安全的fetch
前端·javascript·typescript
领创工作室35 分钟前
npm介绍,指令合集,换源指令
前端·npm·node.js
进阶的小木桩2 小时前
Vue 3 + Elementui + TypeScript 实现左侧菜单定位右侧内容
vue.js·elementui·typescript
whysqwhw2 小时前
js之Promise
前端
恋猫de小郭6 小时前
Flutter 3.35 发布,快来看看有什么更新吧
android·前端·flutter