javascript简单拖拽(鼠标事件 mousedown mousemove mouseup)
2012-04-02 17:48
661 查看
javascript简单拖拽
简单拖拽实现
// var VVG = {}; //命名空间
VVG.DOM = {
$: function(id) { //创建方便的选择符
return typeof id == "string" ? document.getElementById(id) : id;
},
bindEvent: function(node, type, func) { //事件绑定方法
if (node.addEventListener) {
node.addEventListener(type, func, false);
} else if (node.attachEvent) {
node.attachEvent("on" + type, func);
} else {
node["on" + type] = func;
}
},
getEvent: function(event) { //获取事件
return event ? event : window.event;
},
getTarget: function(event) { //获取事件目标
return event.target || event.srcElement;
}
}
var DragDrop = function() { //新建一个返回对象的函数
var box = VVG.DOM.$("box"); //获取外围BOX
var dragBox = VVG.DOM.$("dragBox");//获取需要拖动的BOX
var dragging = null; //初始化对象
function drag(event) { //事件执行函数
event = VVG.DOM.getEvent(event);
var target = VVG.DOM.getTarget(event);
switch (event.type) {//判断事件类型
case "mousedown":
if(target.id == "dragBox"){ //当事件对象的ID等于要拖动的BOX的ID时
dragging = target; //赋值到拖动目标
}
break;
case "mousemove":
if(dragging){ //当有拖动目标时执行
sTop = document.documentElement.scrollTop || document.body.scrollTop; //当有滚动条的时候卷去页面的高度
dragging.style.left = (event.clientX - box.offsetLeft - dragBox.offsetWidth/2) + "px";
dragging.style.top = (event.clientY + sTop - box.offsetTop - dragBox.offsetHeight/2 ) + "px";
var left = parseInt(dragging.style.left);
var top = parseInt(dragging.style.top);
//console.log("left:"+left+"-----top:"+top + "-------sTop:"+sTop);
// 比较坐标是否超出外围的BOX
if(left < 0){
dragging.style.left = 0 +"px";
}
if(top < 0){
dragging.style.top = 0+"px";
}
if(left > box.offsetWidth - dragBox.offsetWidth){
dragging.style.left = (box.offsetWidth - dragBox.offsetWidth - 2 )+"px";
}
if(top > box.offsetHeight - dragBox.offsetHeight){
dragging.style.top =( box.offsetHeight - dragBox.offsetHeight - 2 )+"px";
}
}
break;
case "mouseup":
// 清空拖动目标
dragging = null;
break;
}
};
return {
dragStart: function() {
// 绑定事件
VVG.DOM.bindEvent(document, "mousedown", drag);
VVG.DOM.bindEvent(document, "mousemove", drag);
VVG.DOM.bindEvent(document, "mouseup", drag);
}
}
}();
DragDrop.dragStart();
// ]]>
mousedown 的时候创建拖动对象,mouseup的时候释放对象,原理弄清楚了其实很简单。
简单拖拽实现代码:
简单拖拽实现
// var VVG = {}; //命名空间
VVG.DOM = {
$: function(id) { //创建方便的选择符
return typeof id == "string" ? document.getElementById(id) : id;
},
bindEvent: function(node, type, func) { //事件绑定方法
if (node.addEventListener) {
node.addEventListener(type, func, false);
} else if (node.attachEvent) {
node.attachEvent("on" + type, func);
} else {
node["on" + type] = func;
}
},
getEvent: function(event) { //获取事件
return event ? event : window.event;
},
getTarget: function(event) { //获取事件目标
return event.target || event.srcElement;
}
}
var DragDrop = function() { //新建一个返回对象的函数
var box = VVG.DOM.$("box"); //获取外围BOX
var dragBox = VVG.DOM.$("dragBox");//获取需要拖动的BOX
var dragging = null; //初始化对象
function drag(event) { //事件执行函数
event = VVG.DOM.getEvent(event);
var target = VVG.DOM.getTarget(event);
switch (event.type) {//判断事件类型
case "mousedown":
if(target.id == "dragBox"){ //当事件对象的ID等于要拖动的BOX的ID时
dragging = target; //赋值到拖动目标
}
break;
case "mousemove":
if(dragging){ //当有拖动目标时执行
sTop = document.documentElement.scrollTop || document.body.scrollTop; //当有滚动条的时候卷去页面的高度
dragging.style.left = (event.clientX - box.offsetLeft - dragBox.offsetWidth/2) + "px";
dragging.style.top = (event.clientY + sTop - box.offsetTop - dragBox.offsetHeight/2 ) + "px";
var left = parseInt(dragging.style.left);
var top = parseInt(dragging.style.top);
//console.log("left:"+left+"-----top:"+top + "-------sTop:"+sTop);
// 比较坐标是否超出外围的BOX
if(left < 0){
dragging.style.left = 0 +"px";
}
if(top < 0){
dragging.style.top = 0+"px";
}
if(left > box.offsetWidth - dragBox.offsetWidth){
dragging.style.left = (box.offsetWidth - dragBox.offsetWidth - 2 )+"px";
}
if(top > box.offsetHeight - dragBox.offsetHeight){
dragging.style.top =( box.offsetHeight - dragBox.offsetHeight - 2 )+"px";
}
}
break;
case "mouseup":
// 清空拖动目标
dragging = null;
break;
}
};
return {
dragStart: function() {
// 绑定事件
VVG.DOM.bindEvent(document, "mousedown", drag);
VVG.DOM.bindEvent(document, "mousemove", drag);
VVG.DOM.bindEvent(document, "mouseup", drag);
}
}
}();
DragDrop.dragStart();
// ]]>
mousedown 的时候创建拖动对象,mouseup的时候释放对象,原理弄清楚了其实很简单。
简单拖拽实现代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>简单拖拽实现</title> <style type="text/css"> *{margin:0;padding:0;} #box{ margin:20px auto; position:relative; width:400px; height:400px; background:#ccc; border:1px solid #333; postion:relative; } #dragBox{ width:50px; height:50px; text-align:center; line-height: 50px;position: absolute; background:blue; cursor:move; font-size:12px; color:#fff;} </style> </head> <body> <div id="box"> <div id="dragBox">拖我</div> </div> <script type="text/javascript"> var VVG = {}; //命名空间 VVG.DOM = { $: function(id) { //创建方便的选择符 return typeof id == "string" ? document.getElementById(id) : id; }, bindEvent: function(node, type, func) { //事件绑定方法 if (node.addEventListener) { node.addEventListener(type, func, false); } else if (node.attachEvent) { node.attachEvent("on" + type, func); } else { node["on" + type] = func; } }, getEvent: function(event) { //获取事件 return event ? event : window.event; }, getTarget: function(event) { //获取事件目标 return event.target || event.srcElement; } } var DragDrop = function() { //新建一个返回对象的函数 var box = VVG.DOM.$("box"); //获取外围BOX var dragBox = VVG.DOM.$("dragBox");//获取需要拖动的BOX var dragging = null; //初始化对象 function drag(event) { //事件执行函数 event = VVG.DOM.getEvent(event); var target = VVG.DOM.getTarget(event); switch (event.type) {//判断事件类型 case "mousedown": if(target.id == "dragBox"){ //当事件对象的ID等于要拖动的BOX的ID时 dragging = target; //赋值到拖动目标 } break; case "mousemove": if(dragging){ //当有拖动目标时执行 sTop = document.documentElement.scrollTop || document.body.scrollTop; //当有滚动条的时候卷去页面的高度 dragging.style.left = (event.clientX - box.offsetLeft - dragBox.offsetWidth/2) + "px"; dragging.style.top = (event.clientY + sTop - box.offsetTop - dragBox.offsetHeight/2 ) + "px"; var left = parseInt(dragging.style.left); var top = parseInt(dragging.style.top); //console.log("left:"+left+"-----top:"+top + "-------sTop:"+sTop); // 比较坐标是否超出外围的BOX if(left < 0){ dragging.style.left = 0 +"px"; } if(top < 0){ dragging.style.top = 0+"px"; } if(left > box.offsetWidth - dragBox.offsetWidth){ dragging.style.left = (box.offsetWidth - dragBox.offsetWidth - 2 )+"px"; } if(top > box.offsetHeight - dragBox.offsetHeight){ dragging.style.top =( box.offsetHeight - dragBox.offsetHeight - 2 )+"px"; } } break; case "mouseup": // 清空拖动目标 dragging = null; break; } }; return { dragStart: function() { // 绑定事件 VVG.DOM.bindEvent(document, "mousedown", drag); VVG.DOM.bindEvent(document, "mousemove", drag); VVG.DOM.bindEvent(document, "mouseup", drag); } } }(); DragDrop.dragStart(); </script> </body> </html>
相关文章推荐
- javascript简单拖拽实现代码(鼠标事件 mousedown mousemove mouseup)
- javascript简单拖拽实现代码(鼠标事件 mousedown mousemove mouseup)
- 实现简单的鼠标拖拽事件
- JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
- Web小练习-JavaScript事件的简单练习,监听鼠标的移动
- JavaScript处理简单鼠标事件
- 使用javaScript实现鼠标拖拽事件
- Silverlight学习笔记(七)-----Silverlight事件处理之鼠标事件实现简单拖拽
- javascript基础(鼠标事件拖拽,setCapture()方法)(三十六)
- Javascript 事件对象进阶(一)拖拽的原理
- 用JavaScript 获取鼠标移动时的坐标(兼容:IE8、谷歌、Firefox)和用jquery方法的简单分析
- 网页制作前台之Javascript鼠标事件
- 如何正确响应ArcGIS JavaScript API中图形的鼠标事件
- javascript键盘鼠标事件及音频视频图片标签
- 用Javascript实现鼠标拖拽网页表单 (二)
- javascript技巧--鼠标移到文字上时触发事件
- 使用DXUT框架简单处理鼠标事件
- javascript实现简单的on事件绑定
- javascript 处理鼠标右键事件