vue中实现div自由拖拽

2023-03-18  本文已影响0人  扶得一人醉如苏沐晨
<template>
    <div class="contanier" v-drag >
        <!-- <div class="drag-item"></div> -->
    </div>
</template>
<script>
 
export default {
    data() {
        return {
 
        }
    },
 
    // 自定义指令 —— 拖动div
    directives: {
        drag(el) {
            let oDiv = el // 当前元素
            // let self = this // 上下文
            // 禁止选择网页上的文字
            document.onselectstart = function () {
                return false
            }
            oDiv.onmousedown = function (e) {
                // 鼠标按下,计算当前元素距离可视区的距离
                let disX = e.clientX - oDiv.offsetLeft
                let disY = e.clientY - oDiv.offsetTop
                document.onmousemove = function (e) {
                    // 通过事件委托,计算移动的距离
                    let l = e.clientX - disX
                    let t = e.clientY - disY
                    // 移动当前元素
                    oDiv.style.left = l + 'px'
                    oDiv.style.top = t + 'px'
                }
                document.onmouseup = function (e) {
                    document.onmousemove = null
                    document.onmouseup = null
                }
                // return false不加的话可能导致黏连,就是拖到一个地方时div粘在鼠标上不下来,相当于onmouseup失效
                return false
            }
        }
    },
 
}
</script>
 
<style scoped lang="scss">
.contanier {
    position:absolute;
    top:100px;
    left: 100px;
    width: 100px;
    height: 100px;
    background: red;
    border-radius: 5px;
    box-shadow: 0 4px 12px rgba(0,0,0,.15);
  
}
</style>
上一篇下一篇

猜你喜欢

热点阅读