vueUse拖拽

拖拽


适用于一些点击后拖拽的场景

npm i @vueuse/core
<div ref="target">
     <img ref="boxRef">
 </div>
import {computed, onMounted, reactive, ref} from 'vue'
import {useMouseInElement} from '@vueuse/core'

const target = ref(null)  // 父元素的引用
const boxRef = ref(null)  // 拖拽的目标元素的引用
const canDrag = ref(false)   // 目标元素是否能被拖拽

const mousePosition = reactive({
    left: 0,
    top: 0
})
// 拖拽元素的位置
const position = reactive({
    left: '0px',
    top: '0px'
})

// 使用@vueuse/core获取目标元素在父元素中的位置
const {elementX, elementY, isOutside} = useMouseInElement(target)

onMounted(() => {
    if (boxRef.value) {
        // 获取鼠标在拖拽元素内的坐标
        boxRef.value.onmousedown = (e) => {
            mousePosition.left = e.clientX - target.value.offsetLeft - boxRef.value.offsetLeft
            mousePosition.top = e.clientY - target.value.offsetTop - boxRef.value.offsetTop
            boxRef.value.onmousemove = () => {
                canDrag.value = true
            }
        }

        document.documentElement.onmouseup = () => {
            boxRef.value && (boxRef.value.onmousemove = null);
            canDrag.value = false
        }
    }
})

watch([elementX, elementY, isOutside], () => {
    if (!canDrag.value) return

    // 鼠标在图片的区域之外,不需要计算坐标
    if (isOutside.value) return

    position.left = elementX.value - mousePosition.left
    position.top = elementY.value - mousePosition.top

    position.left += 'px'
    position.top += 'px'
})
Vue3是一种用于构建用户界面的现代化JavaScript框架,它具有响应式数据绑定和组件化的特性。Element UI是Vue.js的一套基于Vue组件的UI库,它提供了丰富的UI组件和交互效果。VueUse是一组适用于Vue框架的常用功能的集合,它包含了许多有用的自定义hook和工具函数。 在使用Vue3和Element UI时,我们可以结合使用VueUse拖拽功能来实现拖拽效果。VueUse中有一个拖拽功能的自定义hook,它可以帮助我们实现元素的拖拽功能。我们需要在Vue组件中引入这个拖拽hook,并使用它提供的函数来控制元素的拖拽行为。 首先,我们需要安装VueUse库,并在Vue组件中导入拖拽hook。然后在组件的模板中,我们可以使用Element UI提供的组件来创建需要拖拽的元素。 接着,在Vue组件的逻辑部分,我们可以使用拖拽hook的函数来设置元素的拖拽行为。其中,我们可以使用v-draggable指令来绑定元素的拖拽事件和状态。通过这个指令,我们可以控制元素的拖拽范围、拖拽过程中的样式变化以及最终的拖拽结果。 最后,我们可以根据需要在拖拽的过程中执行特定的操作,比如更新元素的位置、改变元素的样式等。通过Vue3、Element UI和VueUse的组合,我们可以实现灵活且高效的拖拽功能,提升用户体验和界面交互效果。 综上所述,Vue3、Element UI和VueUse的结合可以实现拖拽功能,让我们的应用更加动态和丰富。通过利用它们提供的特性和功能,我们可以轻松地实现拖拽效果,并提供良好的用户交互体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raccom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值