js拖拽div移动,就是鼠标点击住div,根据鼠标的位置来改变div的位置
如有转载,请标明来自此出处http://blog.youkuaiyun.com/qxs965266509,必须注意!
第一种方法如下:代码如下:
html代码如下:
<div id="message_box" style="position:absolute; background-color:#FFFFFF;border:solid 1px #000;width:420px;left:40%;top:20%;filter:alpha(opacity=100);opacity:1;visibility:hidden;z-index:1000;">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%;border-collapse:collapse;">
<tr id="titleBar" style="height:22px; text-align:left; background-color:#547BC9;color:White; padding:3px;">
<th align="left" unselectable="on" ><span>详细信息</span><span onClick="closeProc();" style="float: right;cursor: hand;">×</span></th>
</tr>
<tr style="height:130px;padding:3px;" align="left" valign="top" unselectable="on">
<td>
<table border='1px;' style="text-align: left;margin-top: 20px;font-size: 13px;">
<tr><td rowspan='3' class="js_head" style="width: 120px;"><img src="/static/images/face.jpg" style="width: 100px;height: 100px;margin-left: 10px;"/></td><td class="js_nickName"></td></tr>
<tr><td class="js_phone"></td></tr>
<tr><td>-$^_^$-</td></tr>
<tr style="height: 1px;"><td colspan='2'><hr style='color: red;'/></td></tr>
<tr><td colspan='2' class="js_mainBusiness"></td></tr>
<tr style="height: 1px;"><td colspan='2'><hr style='color: red;'/></td></tr>
<tr><td colspan='2' style="text-align: center"><input type="button" class="js_createRoomSendMessage" value="发消息" style="width: 70px;height: 35px;"></td></tr>
</table>
</td> <!---->
</tr>
</table>
</div>
js代码如下:
function DragDivDrag(titleBarID, message_boxID, obj) {
var Common = {
getEvent: function () {//ie/ff
if (document.all) {
return window.event;
}
func = getEvent.caller;
while (func != null) {
var arg0 = func.arguments[0];
if (arg0) {
if ((arg0.constructor == Event || arg0.constructor == MouseEvent) || (typeof (arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) {
return arg0;
}
}
func = func.caller;
}
return null;
},
getMousePos: function (ev) {
if (!ev) {
ev = this.getEvent();
}
if (ev.pageX || ev.pageY) {
return {
x: ev.pageX,
y: ev.pageY
};
}
if (document.documentElement && document.documentElement.scrollTop) {
return {
x: ev.clientX + document.documentElement.scrollLeft - document.documentElement.clientLeft,
y: ev.clientY + document.documentElement.scrollTop - document.documentElement.clientTop
};
}
else if (document.body) {
return {
x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y: ev.clientY + document.body.scrollTop - document.body.clientTop
};
}
},
getItself: function (id) {
return "string" == typeof id ? document.getElementById(id) : id;
},
getViewportSize: { w: (window.innerWidth) ? window.innerWidth : (document.documentElement && document.documentElement.clientWidth) ? document.documentElement.clientWidth : document.body.offsetWidth, h: (window.innerHeight) ? window.innerHeight : (document.documentElement && document.documentElement.clientHeight) ? document.documentElement.clientHeight : document.body.offsetHeight },
isIE: document.all ? true : false,
setOuterHtml: function (obj, html) {
var Objrange = document.createRange();
obj.innerHTML = html;
Objrange.selectNodeContents(obj);
var frag = Objrange.extractContents();
if (obj.parentNode != null) {
obj.parentNode.insertBefore(frag, obj);
obj.parentNode.removeChild(obj);
}
}
}
///------------------------------------------------------------------------------------------------------
var Class = {
create: function () {
return function () {
this.init.apply(this, arguments);
}
}
}
var Drag = Class.create();
Drag.prototype = {
init: function (titleBar, message_box, Options) {
//设置点击是否透明,默认不透明
titleBar = Common.getItself(titleBar);
message_box = Common.getItself(message_box);
this.dragArea = { maxLeft: 0, maxRight: Common.getViewportSize.w - message_box.offsetWidth - 2, maxTop: 0, maxBottom: Common.getViewportSize.h - message_box.offsetHeight - 2 };
if (Options) {
this.opacity = Options.opacity ? (isNaN(parseInt(Options.opacity)) ? 100 : parseInt(Options.opacity)) : 100;
this.keepOrigin = Options.keepOrigin ? ((Options.keepOrigin == true || Options.keepOrigin == false) ? Options.keepOrigin : false) : false;
if (this.keepOrigin) {
this.opacity = 50;
}
if (Options.area) {
if (Options.area.left && !isNaN(parseInt(Options.area.left))) {
this.dragArea.maxLeft = Options.area.left
}
;
if (Options.area.right && !isNaN(parseInt(Options.area.right))) {
this.dragArea.maxRight = Options.area.right
}
;
if (Options.area.top && !isNaN(parseInt(Options.area.top))) {
this.dragArea.maxTop = Options.area.top
}
;
if (Options.area.bottom && !isNaN(parseInt(Options.area.bottom))) {
this.dragArea.maxBottom = Options.area.bottom
}
;
}
}
else {
this.opacity = 100, this.keepOrigin = false;
}
this.originDragDiv = null;
this.tmpX = 0;
this.tmpY = 0;
this.moveable = false;
var dragObj = this;
titleBar.onmousedown = function (e) {
var ev = e || window.event || Common.getEvent();
//只允许通过鼠标左键进行拖拽,IE鼠标左键为1 FireFox为0
if (Common.isIE && ev.button == 1 || !Common.isIE && ev.button == 0) {
}
else {
return false;
}
if (dragObj.keepOrigin) {
dragObj.originDragDiv = document.createElement("div");
dragObj.originDragDiv.style.cssText = message_box.style.cssText;
dragObj.originDragDiv.style.width = message_box.offsetWidth;
dragObj.originDragDiv.style.height = message_box.offsetHeight;
dragObj.originDragDiv.innerHTML = message_box.innerHTML;
message_box.parentNode.appendChild(dragObj.originDragDiv);
}
dragObj.moveable = true;
message_box.style.zIndex = dragObj.GetZindex() + 1;
var downPos = Common.getMousePos(ev);
dragObj.tmpX = downPos.x - message_box.offsetLeft;
dragObj.tmpY = downPos.y - message_box.offsetTop;
titleBar.style.cursor = "move";
if (Common.isIE) {
message_box.setCapture();
} else {
window.captureEvents(Event.MOUSEMOVE);
}
dragObj.SetOpacity(message_box, dragObj.opacity);
//FireFox 去除容器内拖拽图片问题
if (ev.preventDefault) {
ev.preventDefault();
ev.stopPropagation();
}
document.onmousemove = function (e) {
if (dragObj.moveable) {
var ev = e || window.event || Common.getEvent();
//IE 去除容器内拖拽图片问题
if (document.all) //IE
{
ev.returnValue = false;
}
var movePos = Common.getMousePos(ev);
message_box.style.left = Math.max(Math.min(movePos.x - dragObj.tmpX, dragObj.dragArea.maxRight), dragObj.dragArea.maxLeft) + "px";
message_box.style.top = Math.max(Math.min(movePos.y - dragObj.tmpY, dragObj.dragArea.maxBottom), dragObj.dragArea.maxTop) + "px";
}
};
document.onmouseup = function () {
if (dragObj.keepOrigin) {
if (Common.isIE) {
dragObj.originDragDiv.outerHTML = "";
}
else {
Common.setOuterHtml(dragObj.originDragDiv, "");
}
}
if (dragObj.moveable) {
if (Common.isIE) {
message_box.releaseCapture();
}
else {
window.releaseEvents(Event.MOUSEMOVE);
}
dragObj.SetOpacity(message_box, 100);
titleBar.style.cursor = "default";
dragObj.moveable = false;
dragObj.tmpX = 0;
dragObj.tmpY = 0;
}
};
}
},
SetOpacity: function (message_box, n) {
if (Common.isIE) {
message_box.filters.alpha.opacity = n;
}
else {
message_box.style.opacity = n / 100;
}
},
GetZindex: function () {
var maxZindex = 0;
var divs = document.getElementsByTagName("div");
for (z = 0; z < divs.length; z++) {
maxZindex = Math.max(maxZindex, divs[z].style.zIndex);
}
return maxZindex;
}
}
new Drag(titleBarID, message_boxID, obj); //, area: { left: 50, right: 500, top: 100, bottom: 400}
}
使用的时候,直接调用
DragDivDrag("titleBar", "message_box", { opacity: 100, keepOrigin: true });
代码中
new Drag(titleBarID, message_boxID, obj); //, area: { left: 50, right: 500, top: 100, bottom: 400}
area参数代表div可移动的范围
仅供参考,如有疑问,请留言...
如有转载,请标明来自此出处http://blog.youkuaiyun.com/qxs965266509,必须注意
第二中拖动的实现代码:
<!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>
<title>自由拖动的DIV层方块</title>
<meta http-equiv="content-type" content="text/html;charset=gb2312">
<style type="text/css">
#draggable{
background-color:green;
font-size:9pt;
padding:30px;
color:white;
width:360px;
height:224px;
position:absolute;
}
</style>
<script type="text/javascript">
var rDrag = {
o:null,
init:function(o){
o.onmousedown = this.start;
},
start:function(e){
var o;
e = rDrag.fixEvent(e);
e.preventDefault && e.preventDefault();
rDrag.o = o = this;
o.x = e.clientX - rDrag.o.offsetLeft;
o.y = e.clientY - rDrag.o.offsetTop;
document.onmousemove = rDrag.move;
document.onmouseup = rDrag.end;
},
move:function(e){
e = rDrag.fixEvent(e);
var oLeft,oTop;
oLeft = e.clientX - rDrag.o.x;
oTop = e.clientY - rDrag.o.y;
rDrag.o.style.left = oLeft + 'px';
rDrag.o.style.top = oTop + 'px';
},
end:function(e){
e = rDrag.fixEvent(e);
rDrag.o = document.onmousemove = document.onmouseup = null;
},
fixEvent: function(e){
if (!e) {
e = window.event;
e.target = e.srcElement;
e.layerX = e.offsetX;
e.layerY = e.offsetY;
}
return e;
}
}
window.onload = function(){
var obj = document.getElementById('draggable');
rDrag.init(obj);
}
</script>
</head>
<body>
<div id="draggable">这个可以拖动!</a></div>
</body>
</html>
<!-- Baidu Button BEGIN --> <script>window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "1", "bdMiniList": false, "bdPic": "", "bdStyle": "0", "bdSize": "16" }, "share": {} }; with (document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)];</script><!-- Baidu Button END --><!--192.168.100.33--> <!-- Baidu Button BEGIN --><script type="text/javascript" id="bdshare_js" data="type=tools&uid=1536434"></script><script type="text/javascript" id="bdshell_js"></script><script type="text/javascript"> document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000) </script><!-- Baidu Button END -->
-
顶
- 1
-
踩
- 0
-
猜你在找
核心技术类目
![]() | 深入浅出之Struts2 文章:9篇 阅读:8386 |
- 各种快递查询--Api接口(12318)
- 我的命运,我规划 -------大学生职业生涯规划_短期规划(7127)
- HTTP协议---HTTP请求中的常用请求字段和HTTP的响应状态码及响应头(5073)
- HTML5 LocalStorage本地存储和sessionStorage使用(4138)
- 数据库的查询与视图(3961)
- Java乔晓松-一次请求在同一个事务实现(3541)
- 城市公交查询--Api接口(3458)
- 火车车次查询-余票查询--Api接口(3188)
- Java乔晓松-2013android最新面试题(2812)
- Java_乔晓松_Java网络编程UDP实现黑窗口聊天(2787)
- 我的命运,我规划 -------大学生职业生涯规划_短期规划(58)
- Java乔晓松-android使用GridView布局的电子相册&服务器获取图片(14)
- 火车车次查询-余票查询--Api接口(8)
- js数组的用法以及数组根据下标(数值或字符)移除元素(7)
- 数据库基本命令的总结(6)
- 苹果序列号/IMEI号查询--Api接口(4)
- Java乔晓松-httpURLConnection、URL、httpClient、httpPost、httpGet之代码详解篇(4)
- 索引和数据完整性约束的总结(4)
- Java乔晓松-2013Java最新面试题(4)
- Java乔晓松-android中调用系统拍照功能并显示拍照的图片(3)
- 自定义spring容器--spring容器读取bean配置文件的原理
bq1073100909: 为什么我的报错呢?我是看了传智播客的视频写出来的,是不是jar包的问题,你的spring是多少版本的...
- 各种快递查询--Api接口
chong_wu: http://www.haoservice.com/docs/18 这个快递查询接口还不错,免费的...
- js中的referrer使用,返回上一页
qxs965266509: @a734998102:MSIE是判断浏览器是不是IE浏览器的http://blog.csdn.ne...
- js中的referrer使用,返回上一页
a734998102: 不知道你能不能看到, 我是新手啊,。。现在用到了这方面知识。。你能解释一下MSIE是什么啊 url...
- Java乔晓松-httpURLConnection、URL、httpClient、httpPost、httpGet之代码详解篇
qxs965266509: @geili_178:客户端百度云链接(客户端):http://pan.baidu.com/s/1q...
- Java乔晓松-httpURLConnection、URL、httpClient、httpPost、httpGet之代码详解篇
qxs965266509: @geili_178:服务器百度云链接(服务器):http://pan.baidu.com/s/1g...
- Java乔晓松-httpURLConnection、URL、httpClient、httpPost、httpGet之代码详解篇
geili_178: 你好,这两天在研究httpClient,希望博主能发一份源码,万分感谢,邮箱:873965057@q...
- Java乔晓松-android使用GridView布局的电子相册&服务器获取图片
xiao_wenrun: 楼主 能不能把服务端的源码发我一份啊!邮箱:461683480@qq.com
- Ajax长连接
qxs965266509: @lowitty:亲,是否阻塞还的看服务器的,我的服务器是Nodejs做的,并且,长连接的响应res...
- java线程中yield(),sleep(),wait()区别详解
u013323077: 真不要脸,复制粘贴别人的东西还贴上自己的名字!