js 的拖拉效果

来源:互联网 发布:谷歌语音识别python 编辑:程序博客网 时间:2024/04/28 17:50

源码(转自codeproject网)

<head>

<script type="text/javascript">
var oDragItem = null;
var iClickOffsetX = 0;
var iClickOffsetY = 0;

function OnLoad(){
    MakeDragable("idBox1");
    MakeDragable("table");
}

function MakeDragable(id){
    var oBox = $(id);
    oBox.onmousemove= function(e){DragMove(oBox,e)};
    oBox.onmouseup=function(e){DragStop(oBox,e)};
    oBox.onmousedown=function(e){DragStart(oBox,e);return false};
    oBox.className = "Dragable";
}

function DragStart(o,e){
    if(!e) var e = window.event;
    oDragItem = o;
    OverlayFrames();
    
    if (e.offsetX){
        iClickOffsetX = e.offsetX;
        iClickOffsetY = e.offsetY;    
    }else{
        var oPos = GetObjPos(o);
        iClickOffsetX = e.clientX - oPos.x;
        iClickOffsetY = e.clientY - oPos.y;
    }
    
    if (o.setCapture){
        o.setCapture();
    }else{
        window.addEventListener ("mousemove", DragMove2, true);
        window.addEventListener ("mouseup",   DragStop2, true);
    }
}

function DragMove2(e){
    DragMove(oDragItem,e);
}

function DragStop2(e){
    DragStop(oDragItem,e);
}

function DragMove(o,e){
    if (oDragItem==null) return;

    if(!e) var e = window.event;
    var x = e.clientX + document.body.scrollLeft - document.body.clientLeft - iClickOffsetX;
    var y = e.clientY + document.body.scrollTop  - document.body.clientTop - iClickOffsetY;
    
    with(oDragItem.style){
        zIndex = 1000;
        position="absolute";
        left=x;
        top=y;
    }
}

function DragStop(o,e){
    if (oDragItem==null) return;

    if (o.releaseCapture){
        o.releaseCapture();
    }else if (oDragItem){
        window.removeEventListener ("mousemove", DragMove2, true);
        window.removeEventListener ("mouseup",   DragStop2, true);
    }
    
    oDragItem.style.zIndex = 1;
    oDragItem = null;
    RemoveOverlays();
}

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

function GetObjPos(obj){
    var x = 0;
    var y = 0;
    
    var w = obj.offsetWidth;
    var h = obj.offsetHeight;
    if (obj.offsetParent) {
        x = obj.offsetLeft
        y = obj.offsetTop
        while (obj = obj.offsetParent){
            x += obj.offsetLeft;
            y += obj.offsetTop;
        }
    }
    return {x:x, y:y, w:w, h:h};
}

function OverlayFrames(){
    if (IsIE() || IsFF()) return;
    var oFrames = document.getElementsByTagName("iframe");
    for (var i=0; i < oFrames.length; i++){
        Overlay(oFrames[i]);
    }
}

function RemoveOverlays(){
    if (IsIE() || IsFF()) return;
    var oFrames = document.getElementsByTagName("iframe");
    for (var i=0; i < oFrames.length; i++){
        var id = oFrames[i].id + "_over";
        var div = $(id);
        if (div) div.parentNode.removeChild(div);
    }
}

function Overlay(o){
    var oPos = GetObjPos(o);
    var id = o.id + "_over";
    var div = $(id);
    if (div==null){
        div = document.createElement("div");
        div.id = id;
        div.style.position = "absolute";
        //div.style.backgroundColor = "pink";
        document.body.appendChild(div);
    }
    
    div.style.left = oPos.x;
    div.style.top  = oPos.y;
    div.style.width = oPos.w;
    div.style.height = oPos.h;
}

function IsIE(){
    return /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);
}

function IsFF(){
    return /Firefox/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);
}

</script>
<style>
.Dragable{
    cursor:move;
   -moz-user-select: -moz-none;   
   -khtml-user-select: none;   
   -webkit-user-select: none;   
   -o-user-select: none;   
   user-select: none;
}
</style>
</head>
<body onload="OnLoad()">

<div selectable="no" id="idBox1" style="left: 100px; width: 100px; height:100px; background-color: Red; text-align: center;">Test</div>
<div selectable="no" id="idBox2" style="width: 100px; height:100px; background-color: Yellow; text-align: center; top:200;">Test</div>

<iframe id="idFrame1" src="http://www.google.com.hk/"></iframe>

</body>