原生js实现拖拽功能

JavaScript014

原生js实现拖拽功能,第1张

物体的拖拽移动,其实是触发了三个鼠标相关事件

拖拽的实现原理:

拖拽时,将被拖拽元素新位置的 left 和 top 重新赋值给被拖拽元素的 left 和 top ,覆盖上一个位置的值,鼠标按下是在元素内部,所以还要减去鼠标按下位置相对于元素内部本身的 left 和 top 值

很简单 需要三个事件 onmousedown onmousemove onmouseup

并给需要拖动的节点增加一个属性叫droping(这个属性表示节点是不是正处于拖拽状态)下面给出一份演示

onmousedown 控制节点扩展的属性droping为true(表示可以移动节点了)

onmousemove 控制节点的位置(判断是否可以移动如果是就移动)

ommouseup控制节点的扩展属性为false(表示不能移动节点了)

<!DOCTYPE HTML>

<html>

<head>

<title>演示</title>

<style type="text/css">

</style>

</head>

<body>

<div id="dropDiv">

  我可以拖动

</div>

<script type="text/javascript">

function dropDivFun(Element){

//设置节点的定位为fixed

Element.style.position="fixed"

//获取事件对象函数 方便获取事件的clientX

function getEvent(){

if(event){

e=event

}else if(window.event){

e=window.event

}else{

e=arguments.callee.arguments[0]

}

return e

}

//添加mousedown事件

Element.addEventListener("mousedown",function(){

var e=getEvent()

if(!Element.droping){

//设置droping为true并记录初始的位置

Element.droping=true

Element.start_x=e.clientX-Element.offsetLeft

Element.start_y=e.clientY-Element.offsetTop

}

})

Element.addEventListener("mousemove",function(){

var e=getEvent()

//移动节点

if(Element.droping){

Element.style.left=e.clientX-Element.start_x+"px"

Element.style.top=e.clientY-Element.start_y+"px"

}

})

Element.addEventListener("mouseup",function(){

if(Element.droping){

//设置droping为false并释放初始的变量

Element.droping=false

Element.start_x=null

Element.start_y=null

}

})

}

//为节点添加drop事件

dropDivFun(document.getElementById("dropDiv"))

</script>

</body>

</html>

该演示演示了使用原生js给节点拖动