v-drag指令忽略margin导致的bug
Demo预览:
https://sunzsh.github.io/vue-demos/#/drag
代码:
https://github.com/sunzsh/vue-el-demo/blob/master/src/main.js
https://github.com/sunzsh/vue-el-demo/blob/master/src/views/drag.vue
大家记得我之前分享这个v-drag
的指令吗
就是它可以让一个容器呀
或者他的父级容器呀
快速的实现这种
拖拽的效果像这样
然后呢前两天一小伙伴发现了一个bug
就是如果这个target呀
(就是这个拖拽的这个容器)
存在margin就会出现bug
我们来试一下哈
我们给这个容器加一个margin-top: 100吧
好我们再来试一下
现在这个位置
但是我一拖就变成这样了
我们来看一下怎么解决哈
我们找到这个指令代码在这里
其实这里边其他的代码不用看
最核心的就是在这他给.style.left
指定了一个变量
然后top指定了一个变量
其实这就是一个
定位绝对定位的位置
所以呢我们需要在这
把这或者把这个括号里的东西都给它
排除掉margin top和margin left就可以了
所以呢我们在这把margin top left取出来
那我们取margin top left的时候呢
肯定都是从这个computed style里面去取
我们把它给它拿过来
我们要从这里边一次取两个变量
一个是margin top一个是margin left
所以我们可以用解构的赋值方法
const
这里面写marginTop
我们可以再给他起个别的名mt
然后呢marginLeft
ml
等于
这样的话呢我们就直接去到两个变量
然后在这直接剪掉就可以了减去
但是注意这里要做一个parseInt
因为它取到的是带"px"的一个支付串
所以呢我们直接给
它parseInt一下这是ml
然后呢下边这块
减去
parseInt(mt)
好我们再来试一下
刷新
大家看,这样就解决了
最后更新于
这有帮助吗?