我们经常会遇见拖拽某一个元素的场景,拖拽也是很常用的; 这次拖拽遇见一个问题,有时在拖拽的时候吗,鼠标松开,元素仍然可以拖拽; 经过查阅资料,发现: 会触发H5原生的拖拽事件。并且不会监听到onmouseup, 从而导致鼠标松开也能够拖拽。 解决办法就是直接干掉H5的拖拽事件。
document.ondragstart = function(ev) { ev.preventDefault(); };
document.ondragend = function(ev) { ev.preventDefault(); };
let [x, y, l, t, isDown] = [0, 0, 0, 0, false]
el.onmousedown = (e) => {
// 获取x坐标和y坐标
x = e.clientX
y = e.clientY
// 获取左部和顶部的偏移量
l = el.offsetLeft
t = el.offsetTop
// 开关打开
isDown = true
// 设置样式
el.style.cursor = 'move'
}
// 鼠标移动
el.onmousemove = (e) => {
if (isDown === false) return
// 获取x和y
let [nx, ny] = [e.clientX, e.clientY]
// 计算移动后的左偏移量和顶部的偏移量
let nl = nx - (x - l)
let nt = ny - (y - t)
el.style.left = nl + 'px'
el.style.top = nt + 'px'
}
// 鼠标抬起事件
el.onmouseup = () => {
// 开关关闭
isDown = false
el.style.cursor = 'default'
}