实现图片的拖拽和鼠标方向控制位移
HTML文件代码如下(img.html):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>图片位置调整</title>
<script language="javascript" src="Drag.js"></script>
</head>
<body onkeydown="keyAction(event);" onload="Init();">
<img src="pig.GIF" name="T4" width="160" height="120" id="T4" style="position:absolute; left:10px; top:10px;" onclick="prepareMove(this,event);" onmousedown="beginMove(this,event);"/>
</body>
</html>
JS文件代码如下(Drag.js):
>
var actionObj = new Array();
var bar;
var isIE,isNS;
function Init()
{
//获取浏览器版本
if(navigator.appName.toLowerCase().indexOf("microsoft") != -1 && navigator.appVersion.indexOf("6.0"))
{
isIE = true;
}
else if(navigator.appName.toLowerCase().indexOf("netscape") != -1 && navigator.appVersion.toLowerCase().indexOf("5.0") != -1)
{
isNS = true;
}
else
{
alert("[Global.js][Init()]请使用IE6.0或FireFox浏览器浏览本页!");
//Glob.isIE = true;
}
if(isIE)
{
document.onmousedown = function(){clearSel();};
}
else if(isNS)
{
document.body.setAttribute("onmousedown","clearSel();");
}
//创建拖动点
bar = document.createElement("div");
bar.id = "bar";
bar.style.width = "20px";
bar.style.height = "20px";
bar.style.position = "absolute";
bar.style.zIndex = 10000;
bar.style.display = "none";
if(isIE)
{
bar.style.backgroundColor = "#ffffff";
bar.style.filter = "alpha(opacity=0)";
}
else if(isNS)
{
bar.style.backgroundImage = "url(../images/alpha.gif)";
}
bar.style.cursor = "move";
document.body.appendChild(bar);
if(isIE)
{
bar.onmousedown = function()
{
beginMove(event);
}
}
if(isNS)
{
bar.setAttribute("onmousedown","beginMove(event)");
}
}
//为键盘移动做准备
function prepareMove(mvObj,e)
{
//清理上一个选中
clearSel();
var obj = mvObj;
obj.style.borderWidth = "1px";
obj.style.borderStyle = "dashed";
obj.style.borderColor = "#666666";
obj.style.left = parseInt(obj.style.left) - 1 + "px";
obj.style.top = parseInt(obj.style.top) - 1 + "px";
actionObj[actionObj.length] = obj;
//设置拖动点
bar.style.display = "block";
bar.style.width = mvObj.style.width == "" ? mvObj.width + "px" : mvObj.style.width;
bar.style.height = mvObj.style.height == "" ? mvObj.height + "px" : mvObj.style.height;
bar.style.left = parseInt(mvObj.style.left) + 1 + "px";
bar.style.top = parseInt(mvObj.style.top) + 1 + "px";
if (e.stopPropagation) e.stopPropagation( );
else e.cancelBubble = true;
if (e.preventDefault) e.preventDefault( );
else e.returnValue = false;
}
//为鼠标移动做准备
function beginMove(e)
{
var mvObj = getAc();
if(mvObj == null)return;
var mouseStartX = e.clientX;
var mouseStartY = e.clientY;
mvObj.sLeft = parseInt(mvObj.style.left);
mvObj.sTop = parseInt(mvObj.style.top);
// alert(mvObj.Left);
// alert(mvObj.Top);
if (e.stopPropagation) e.stopPropagation( );
else e.cancelBubble = true;
if (e.preventDefault) e.preventDefault( );
else e.returnValue = false;
if (document.addEventListener) {
document.addEventListener("mousemove", moveHandler, true);
document.addEventListener("mouseup", upHandler, true);
}
else if (document.attachEvent) {
document.attachEvent("onmousemove", moveHandler);
document.attachEvent("onmouseup", upHandler);
}
function moveHandler()
{
var mouseChangeX = e.clientX - mouseStartX;
var mouseChangeY = e.clientY - mouseStartY;
mvObj.Left = mvObj.sLeft + mouseChangeX;
mvObj.Left = mvObj.Left > 0 ? mvObj.Left : 0;
mvObj.Top = mvObj.sTop + mouseChangeY;
mvObj.Top = mvObj.Top > 0 ? mvObj.Top : 0;
mvObj.style.left = mvObj.Left + "px";
mvObj.style.top = mvObj.Top + "px";
}
function upHandler()
{
if (document.removeEventListener) {
document.removeEventListener("mouseup", upHandler, true);
document.removeEventListener("mousemove", moveHandler, true);
}
else if (document.detachEvent) {
document.detachEvent("onmouseup", upHandler);
document.detachEvent("onmousemove", moveHandler);
}
bar.style.display = "block";
bar.style.width = mvObj.style.width == "" ? mvObj.width + "px" : mvObj.style.width;
bar.style.height = mvObj.style.height == "" ? mvObj.height + "px" : mvObj.style.height;
bar.style.left = parseInt(mvObj.style.left) + 1 + "px";
bar.style.top = parseInt(mvObj.style.top) + 1 + "px";
}
}
function keyAction(e)
{
var acOp = getAc();
if(acOp == null)return;
switch(e.keyCode)
{
case 37:
acOp.style.left = parseInt(acOp.style.left) - 1 + "px";
break;
case 38:
acOp.style.top = parseInt(acOp.style.top) - 1 + "px";
break;
case 39:
acOp.style.left = parseInt(acOp.style.left) + 1 + "px";
break;
case 40:
acOp.style.top = parseInt(acOp.style.top) + 1 + "px";
break;
}
}
function clearSel()
{
var acOp = getAc();
if(acOp == null)return;
acOp.style.borderWidth = "0px";
acOp.style.left = parseInt(acOp.style.left) + 1 + "px";
acOp.style.top = parseInt(acOp.style.top) + 1 + "px";
actionObj.length -= 1;
//设置拖动点
bar.style.display = "none";
}
function getAc()
{
if(actionObj.length > 0)
return actionObj[actionObj.length - 1];
else
return null;
}