﻿//通用 移动 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 == 0) return; 
        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(); 
