可拖动的div(vue3.0+ts的写法)

// 可拖动的前提是 定位必须是fixed 或者absolute
<div ref="box" @mouseenter="mouseenter"  @mousedown="mouseStaus = true"  @mouseleave="mouseLeave" @mouseup="mouseStaus = false">在线<br>交流</div>

step(){
	const state: any = reactive({
		box:ref(''),
		mouseX:0,
		mouseY:0,
		mouseStaus:false
	})
}
const mouseenter = (e:any) => {
	// 获取鼠标进入时距离div的左边距和上边距(mouseX,mouseY)
	 state.mouseX = e.clientX - state.box.offsetLeft
	 (鼠标进入时鼠标的left - 元素的left)
      state.mouseX = e.clientY - state.box.offsetTop
      (鼠标进入时鼠标的top- 元素的top)
}
const mouseLeave = (e:any)=>{
	  let a = window.innerWidth - 76;//(76:元素的宽)
      let b = window.innerHeight - 94//(94:元素的高)
      let x = e.clientX - statemouseX
      let y = e.clientY - state.mouseY
      if(x > a) {
        x = a
      } else if(x<0) {
        x = 0
      }
      if(y>b) {
        y = b
      } else if(y<64) {    // 64 是距离顶部的位置 可以为任意>0的数
        y = 64
      }
      //跟随鼠标移动
      if(state.moveStatus == true) {
        state.box.style.left = x + 'px'
        state.box.style.top = y + 'px'
        state.mouseStaus = false
      }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值