简单实现一个可拖动元素的效果,参考了了张鑫旭大神的代码。
需求说明
创建一个函数,接收两个参数,triggerElement
和targetElement
,即点击后触发拖动效果的元素和要拖动的元素。 当在triggerElement
上点击鼠标时会触发拖动targetElement
的效果,松开鼠标后不再拖动。
实现思路
给触发拖动的元素添加点击事件监听函数;
点击触发元素之后,在点击事件处理函数内部,为
document
添加鼠标移动(mousemove
)的事件监听;还需要在松开鼠标后,停止拖动,所以需要为
document
添加鼠标松开(mouseup
)的事件监听;
代码
先给触发元素添加点击事件
function startDrag(triggerElement, targetElement) {
triggerElement.addEventListener('mousedown', function (event) {
var originMouseX, originMouseY, moveX, moveY;
originMouseX = event.clientX
originMouseY = event.clientY
document.addEventListener('mousemove', mouseMove, false)
document.addEventListener('mouseup', mouseUp, false)
function mouseMove(event) {
moveX = event.clientX - originMouseX
moveY = event.clientY - originMouseY
originMouseX = event.clientX
originMouseY = event.clientY
targetElement.style.left = +moveX + +targetElement.offsetLeft + 'px'
targetElement.style.top = +moveY + +targetElement.offsetTop + 'px'
// 防止选取文字
event.preventDefault();
triggerElement.onselectstart = function () {
return false;
}
} // mouseMove end
function mouseUp(event) {
document.removeEventListener('mousemove', mouseMove, false)
document.removeEventListener('mouseup', mouseUp, false)
} // mouseUp end
}, false)
}
使用
和张鑫旭大神的一样,只需要调用这个函数,将两个元素:触发拖动的元素和被拖动的元素, 传进函数就可以了
PS:被拖动的元素需要设置绝对定位:position: absolute;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。