修改为支持多个层拖动模式可以制作为[许愿墙]

http://bbs.blueidea.com/thread-2784653-1-1.html
Div Move Temp
点我调用 拖动窗口

  • 显示窗口
  • 最大化窗口
点我调用 拖动窗口

  • 显示窗口
  • 最大化窗口
点我调用 拖动窗口

  • 显示窗口
  • 最大化窗口
点我调用 拖动窗口

  • 显示窗口
  • 最大化窗口
点我调用 拖动窗口

  • 显示窗口
  • 最大化窗口




<!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=utf-8" />
<title>Div Move Temp</title>
<style type="text/css">
body
{
/*background-image:url(http://mxd.sdo.com/web2005/download/image/wall_0201.jpg);*/
}

.InfoKuang 
{
    position
:absolute;
    width
:130px;
    height
:85px;
    z-index
:1;
    filter
:alpha(Opacity=60,style=0);
    opacity
:0.6;
    padding
: 3px;
    border
: 1px dashed #000000;
    z-index
:5000;
                font-size
:9pt;
               
   
   
}

.InfoKuang ul 
{
    margin
: 1px;
    padding
: 0px;
    border-top-width
: 1px;
    border-right-width
: 1px;
    border-bottom-width
: 1px;
    border-left-width
: 1px;
    border-top-style
: none;
    border-right-style
: none;
    border-bottom-style
: solid;
    border-left-style
: none;
    border-top-color
: #000000;
    border-right-color
: #000000;
    border-bottom-color
: #000000;
    border-left-color
: #000000;
    color
: #000000;
    background-color
:#0faead;
}

.InfoKuang li 
{
    height
:24px;
    padding
: 1px;
    line-height
: 24px;
}

.main
{    width:500px;
    height
:300px;}

</style>
<script language="javascript"  type="text/javascript">
//通用 移动 Div 类
//
请保留一下我的信息,谢谢
//
Edit By Skybot
//
QQ:35287352
function Tong_MoveDiv()
{
    
//参数说明
    // id 要移动的层ID
    // Evt 是 event, window.event; 要在FF 中可以用    e ? e :window.event;
    // T 为 int 有数字是拖动 没有是变大小
    this.Move=function(Id,Evt,T)
    
{
        
if(Id==""return;
        
var o = document.getElementById(Id);
        
if(!o) return;//如果这个东东不在
        evt = Evt ? Evt : window.event;
        o.style.position 
= "absolute";//设定他的样式为绝对定位
        o.style.zIndex = 200;//这里显示上下的
        var obj = evt.srcElement ? evt.srcElement : evt.target; //得到个原素  使它在FF中也可以用
        //得到当前对要移动对象的 坐标
        var w = o.offsetWidth;
        
var h = o.offsetHeight;
        
var l = o.offsetLeft;
        
var t = o.offsetTop;
        
var div = document.createElement("DIV");//新原素DIV
        document.body.appendChild(div);
        div.style.cssText 
= "filter:alpha(Opacity=10,style=0);opacity:0.2;width:"+w+"px;height:"+h+"px; top:"+t+"px;left:"+l+"px;position:absolute;background:#000";//设定 filter; 注意opacity 是FF中的 Opacity
        div.setAttribute("id", Id +"temp");
       
        
if(T)//看看是拖动还是 变大小
        {
            
this.Move_OnlyMove(Id,evt);
        }

        
else
        
{
           
        }

    }

   
    
//移动函数
    //参数 Id  要移动的层ID
    //Evt 是 event, window.event; 要在FF 中可以用    e ? e :window.event;
    this.Move_OnlyMove = function(Id,Evt)
    
{
        
var o = document.getElementById(Id+"temp");
        
if(!o) return;
        evt 
= Evt?Evt:window.event;//都是FF 才要这么写的
        var relLeft = evt.clientX - o.offsetLeft;//得到左边的 宽度
        var relTop = evt.clientY - o.offsetTop;//得到上边的 宽度
        //抓取 事件
        if (!window.captureEvents)
        
{
            o.setCapture(); 
//指定  抓取 事件
       
        }

        
else
        
{
            window.captureEvents(Event.MOUSEMOVE
|Event.MOUSEUP);
        }

       
        
//文档的 onmousemove 事件
        document.onmousemove = function(e)
        
{
            
if (!o) return;
            e 
= e ? e : window.event;
            
if (e.clientX - relLeft <= 0)
                o.style.left 
= 0 +"px";
            
else if (e.clientX - relLeft >= document.documentElement.clientWidth - o.offsetWidth - 2)
                o.style.left 
= (document.documentElement.clientWidth - o.offsetWidth - 2+"px";
            
else
                o.style.left 
= e.clientX - relLeft +"px";
            
if (e.clientY - relTop <= 1)
                o.style.top 
= 1 +"px";
            
else if (e.clientY - relTop >= document.documentElement.clientHeight - o.offsetHeight - 30)
                o.style.top 
= (document.documentElement.clientHeight - o.offsetHeight - 30+"px";
            
else
                o.style.top 
= e.clientY - relTop +"px";
        }

       
        
//文档的 onmouseup 事件
        document.onmouseup = function()
        
{
            
if (!o) return;
            
if (!window.captureEvents)
                o.releaseCapture();
            
else
                window.releaseEvents(Event.MOUSEMOVE
|Event.MOUSEUP);
            
var o1 = document.getElementById(Id);
            
if (!o1) return;
            
var l0 = o.offsetLeft;
            
var t0 = o.offsetTop;
            
var l = o1.offsetLeft;
            
var t = o1.offsetTop;   
            MyMove.Move_e(Id, l0 , t0, l, t);
            document.body.removeChild(o);
            o 
= null;
        }
   
    }

   
    
this.Move_e = function(Id, l0 , t0, l, t)
    
{
        
if (typeof(window["ct"+ Id]) != "undefined") clearTimeout(window["ct"+ Id]);
        
var o = document.getElementById(Id);
        
if (!o) return;
        
var sl = st = 8;
        
var s_l = Math.abs(l0 - l);
        
var s_t = Math.abs(t0 - t);
        
if (s_l - s_t > 0)
            
if (s_t)
                sl 
= Math.round(s_l / s_t) > 8 ? 8 : Math.round(s_l / s_t) * 6;
            
else
                sl 
= 0;
        
else
            
if (s_l)
                st 
= Math.round(s_t / s_l) > 8 ? 8 : Math.round(s_t / s_l) * 6;
            
else
                st 
= 0;
        
if (l0 - l < 0) sl *= -1;
        
if (t0 - t < 0) st *= -1;
        
if (Math.abs(l + sl - l0) < 52 && sl) sl = sl > 0 ? 2 : -2;
        
if (Math.abs(t + st - t0) < 52 && st) st = st > 0 ? 2 : -2;
        
if (Math.abs(l + sl - l0) < 16 && sl) sl = sl > 0 ? 1 : -1;
        
if (Math.abs(t + st - t0) < 16 && st) st = st > 0 ? 1 : -1;
        
if (s_l == 0 && s_t == 0return;
        
if (Math.abs(l + sl - l0) < 2)
            o.style.left 
= l0 +"px";
        
else
            o.style.left 
= l + sl +"px";
        
if (Math.abs(t + st - t0) < 2)
            o.style.top 
= t0 +"px";
        
else
            o.style.top 
= t + st +"px";
        window[
"ct"+ Id] = window.setTimeout("MyMove.Move_e('"+ Id +"', "+ l0 +" , "+ t0 +""+ (l + sl) +""+ (t + st) +")"1);
    }

   
   
}

var MyMove = new  Tong_MoveDiv();
</script>
</head>
<body>
<div class="main">
<div id="InfoKuang" class="InfoKuang" onmousedown="MyMove.Move('InfoKuang',event,1)">
<span style="cursor:move;">点我调用 拖动窗口</span>
    
<ul>
        
<li>
       
        
</li>
    
</ul>
    
<ul>
        
<li>
        显示窗口
        
</li>
    
</ul>
    
<ul>
        
<li>
        最大化窗口
        
</li>
    
</ul>
</div>
<div id="InfoKuang1"  onmousedown="MyMove.Move('InfoKuang1',event,1)">
<span style="cursor:move;">点我调用 拖动窗口</span>
    
<ul>
        
<li>
       
        
</li>
    
</ul>
    
<ul>
        
<li>
        显示窗口
        
</li>
    
</ul>
    
<ul>
        
<li>
        最大化窗口
        
</li>
    
</ul>
</div>
<div id="InfoKuang2"  onmousedown="MyMove.Move('InfoKuang2',event,1)">
<span style="cursor:move;">点我调用 拖动窗口</span>
    
<ul>
        
<li>
       
        
</li>
    
</ul>
    
<ul>
        
<li>
        显示窗口
        
</li>
    
</ul>
    
<ul>
        
<li>
        最大化窗口
        
</li>
    
</ul>
</div>
<div id="InfoKuang3"   onmousedown="MyMove.Move('InfoKuang3',event,1)">
<span style="cursor:move;">点我调用 拖动窗口</span>
    
<ul>
        
<li>
       
        
</li>
    
</ul>
    
<ul>
        
<li>
        显示窗口
        
</li>
    
</ul>
    
<ul>
        
<li>
        最大化窗口
        
</li>
    
</ul>
</div>
<div id="InfoKuang4"  onmousedown="MyMove.Move('InfoKuang4',event,1)">
<span style="cursor:move;">点我调用 拖动窗口</span>
    
<ul>
        
<li>
       
        
</li>
    
</ul>
    
<ul>
        
<li>
        显示窗口
        
</li>
    
</ul>
    
<ul>
        
<li>
        最大化窗口
        
</li>
    
</ul>
</div>
</div>
</body>
</html>
posted @ 2008-04-06 11:32  CB  阅读(330)  评论(0编辑  收藏  举报