续:比较常见的拖动层代码。(兼容FF)

本文介绍了一种改进后的多对象拖动功能实现方案。通过JavaScript实现页面元素的动态拖拽,支持多个对象同时进行拖动操作,并详细展示了实现过程中的关键代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

睡醒又改了改代码,更好的封装和调用,支持多个对象拖动。

 

<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> MapBox.htm </title>
<style>
body
{
    margin
:0px;
    font-size
:12px;
    line-height
:150%;
}


#mapbox
{
    background-color
:red;
    border
:1px solid #cccccc;
    width
:500px;
    height
:525px;
    position
:absolute;
    z-index
:86;
}


#mapbox_title
{
    padding
:3px 0px 0px 10px;
    left
:500px;
    height
:25px;
    background-color
:#efefef;
    cursor
:move;
}

#mapbox2
{
    background-color
:blue;
    border
:1px solid #cccccc;
    width
:500px;
    height
:525px;
    position
:absolute;
    z-index
:86;
}


#mapbox_title2
{
    padding
:3px 0px 0px 10px;
    left
:500px;
    height
:25px;
    background-color
:#efefef;
    cursor
:move;
}


</style>
<script language="javascript" src="js/base.js"></script>
<script language="javascript" src="js/drag.js"></script>
</head>
<script>
function SetupDrag(id)
{
    
var obj = $(id);
    
//BoxDrag = new Drag_Class(id);
    eval("BoxDrag_" + id + " = new Drag_Class(id);");

    
if (window.event == undefined){
        eval(
"addEvent(obj, "mousedown", BoxDrag_" + id + ".startDrag, "setCapture()");");
        eval(
"addEvent(obj, "mousemove", BoxDrag_" + id + ".Drag, "setCapture()");");
        eval(
"addEvent(obj, "mouseup", BoxDrag_" + id + ".stopDrag, "releaseCapture()");");
        
/*
        addEvent(obj, "mousedown", BoxDrag.startDrag, "setCapture()");
        addEvent(obj, "mousemove", BoxDrag.Drag, "setCapture()");
        addEvent(obj, "mouseup", BoxDrag.stopDrag, "releaseCapture()");
        
*/

    }

    
else
    
{
        eval(
"obj.onmousedown = BoxDrag_" + id + ".startDrag;");
        eval(
"obj.onmousemove = BoxDrag_" + id + ".Drag;");
        eval(
"obj.onmouseup = BoxDrag_" + id + ".stopDrag;");
        
/*
        obj.onmousedown = BoxDrag.startDrag;
        obj.onmousemove = BoxDrag.Drag;
        obj.onmouseup = BoxDrag.stopDrag;
        
*/

    }

}


window.onload 
= function()
{
    SetupDrag(
"mapbox_title");
    SetupDrag(
"mapbox_title2");
}

</script>

<body>
    
<div id="mapbox" style="left:0px;top:0px;z-index:1">
        
<div id="mapbox_title">MapBox Title</div>
    
</div>
    
<div id="mapbox2" style="left:200px;top:200px;z-index:1">
    
<div id="mapbox_title2">MapBox Title</div>
    
</div>
<script>
</script>
</body>
</html>

 Drag.js文件:

function Drag_Class(id)
{
    
this.id = id;
}


Drag_Class.prototype.startDrag 
= function(ev)
{
    
var obj = $(this.id).parentNode;
    obj.style.zIndex 
+= 100
    
var ev=ev||window.event;
    
this.mouse_x = ev.clientX||ev.pageX;
    
this.mouse_y = ev.clientY||ev.pageY;
    
this.obj_x = parseInt(obj.style.left.replace("px",""));
    
this.obj_y = parseInt(obj.style.top.replace("px",""));
    
this.moveable = true;
}


Drag_Class.prototype.Drag 
= function(ev)
{
    
var obj = $(this.id).parentNode;
    
var ev=ev||window.event;
    
var ev_x = ev.clientX||ev.pageX;
    
var ev_y = ev.clientY||ev.pageY;
    
if (this.moveable)
    
{
        obj.style.left 
= this.obj_x + ev_x - this.mouse_x + "px";
        obj.style.top 
= this.obj_y + ev_y - this.mouse_y + "px";
    }

}


Drag_Class.prototype.stopDrag 
= function()
{
    
if (this.moveable)
    
{
        
var obj = $(this.id).parentNode;
        
this.moveable = false;
    }

}

Base.js文件:

function $(str)
{
    
return document.getElementById(str);
}


function addEvent(elm, evType, fn, useCapture){
    
if (elm.addEventListener){
        elm.addEventListener(evType, fn, useCapture);
        
return true;
    }
 else if (elm.attachEvent){
        
var r = elm.attachEvent("on"+evType, fn);
        
return r;
    }
 else {
        alert(
"Handler could not be removed");
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值