JS 拖拽
在看《Javascript:the Definitive Guide》,这是事件理那章的一个例题,照着打下来了,但还是很激动哦。第一次实现这功能。。。嘿嘿 发来纪念一下。不过还有个mouseup事件的removeEventListener没实现,就是mouseup时它没remove事件。。。不知道为什么耶,找不出原因。哪位高手知道的话指导下哈。
下面是JS代码,Drag.js
function drag(elementToDrag,event){
var startX=event.clientX, startY=event.clientY;
var origX=elementToDrag.offsetLeft, origY=elementToDrag.offsetTop;
var deltaX=startX-origX, deltaY=startY-origY;
if(document.addEventListener){
elementToDrag.addEventListener("mousemove",moveHandler,true);
elementToDrag.addEventListener("mouseup",upHandler,true);
}
else if(document.attachEvent){
elementToDrag.setCapture(); //setCapture to capture the element
elementToDrag.attachEvent("onmousemove",moveHandler);
elementToDrag.attachEvent("onmouseup",upHandler);
elementToDrag.attachEvent("onlosecapture",upHandler);
}
else{ //IE4 Event Model
var oldmovehandler=document.onmousemove;
var olduphandler=document.onmouseup;
document.onmousemove=moveHandler;
document.onmouseup=upHandler;
}
if(event.stopPropagation){
event.stopPropagation();
}
else{
event.cancelBubble=true;
}
if(event.preventDefault){
event.preventDefault();
}
else{
event.returnValue=false;
}
//This is the handler that captures mousemove events when an element
//is being dragging.It is responsible for moving the element
function moveHandler(e){
if(!e) e=window.event;
elementToDrag.style.left=(e.clientX-deltaX)+"px";
elementToDrag.style.top=(e.clientY-deltaY)+"px";
if(e.stopPropagation) e.stopPropagation();
else e.cancelBubble=true;
}
function upHandler(e){
if(!e)e=window.event;
if(document.removeEventListener){
document.removeEventListener("mouseup",upHandler,true);
document.removeEventListener("mousemove",moveHandler,true);
}
else{
elementToDrag.detachEvent("onlosecapture",upHandler);
elementToDrag.detachEvent("onmouseup",upHandler);
elementToDrag.detachEvent("onmousemove",moveHandler);
elementToDrag.releaseCapture();
}
if(e.stopPropagation) e.stopPropagation();
else e.cancelBubble=true;
}
}
下面是html:
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<SCRIPT type="text/javascript" src="Drag.js"></SCRIPT>
<div style="position:absolute; left:100px; top:100px; width:250px;
background:white; border:solid black;">
<div style="background:gray; border-bottom:dotted black; padding:3px; font-family:sans-serif;font-weight:bold;" onmousedown="drag(this.parentNode,event);">
Drag Me
</div>
<p>This is a test. Testing,testing .</p>
</div>
</head>
<body>
</body>
</html>
加油加油!
我是一名在校大学生,热爱编程,虽然起步晚了些,但我会努力的。呵呵!
数据结构 算法

浙公网安备 33010602011771号