Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网站建设 > 网页制作 > Javascript实现图片位置控制(鼠标拖拽 + 键盘方向键移动)源码分享
【标  题】:Javascript实现图片位置控制(鼠标拖拽 + 键盘方向键移动)源码分享
【关键字】:Javascript
【来  源】:http://blog.csdn.net/ctbinzi/archive/2006/07/08/893927.aspx

Javascript实现图片位置控制(鼠标拖拽 + 键盘方向键移动)源码分享

Your Ad Here
实现图片的拖拽和鼠标方向控制位移
 
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;
}

 
 代码不是很工整,望谅解,有不清楚的地方,可以与我联系,Email:ctbinzi@gmail.com
 
 如果有错误,还望提出
 
 愿与大家分享技术!
 
用Ant发布应用程序到OC4J:【上一篇】
广告图片轮显类dh_adShow Ver1.0.2:【下一篇】
【相关文章】
  • 掌握 Ajax - 使用 JavaScript 和 Ajax 发出异步请求
  • Email javascript 正则表达式
  • javascript 页面解码
  • 基于HTML/JavaScript的本地运行的wiki
  • Asp JavaScript 教程 - Lesson 01 A General Overview
  • Asp JavaScript 教程 - Lesson 02 Escape Characters
  • Asp JavaScript 教程 - Lesson 04 Using VBScript with JavaScriptor
  • 使用JavaScript写的操作系统和输入法程序
  • Javascript的Event对象详解[收集整理]
  • Javascript实现对象的拖动操作
  • 【随机文章】
  • 用Java将文件名从中文转为拼音
  • Asp.net1.1升级到2.0遇到的一些问题总结
  • bug_list
  • 端口列表
  • 【转】Google掀起PC革命
  • Inspired people, inspiring community!
  • 最新QQ空间3.1版代码,6月27日更新
  • zmore
  • 安装配置rman catalog库
  • [导入]CZoneSoft 音频、视频在线录制留言--升级为多用户音频、视频秀平台
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.