<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
<title>zhou's html</title>
</head>
<body>
                                                一共三个层,下面还有一个,把他拖上来
<div id="test" style='cursor:move;border:6px solid #000000;left:1px;top:2px;width:100px;height:100px;background-color:#F9F7ED;position:absolute;text-align:center'><span>Magnolia Mag.nolia</span><input type="text" style="width:50px" maxlength="5"/></div>

<div id="test1" style='cursor:move;border:6px solid #000000;left:1px;top:200px;width:150px;height:150px;background-color:#FF1A00;position:absolute;text-align:center'><span>Mozilla Red</span><br/><input type="text" style="width:80px" maxlength="9"/></div>

<div id="test3" style="border:3px solid #C3D9FF;text-align:center;left:700px;top:100px;width:150px;height:250px;background-color:#ffffff;position:absolute"><div id="test31" style="cursor:move;left:300px;top:200px;width:150px;height:30px;background-color:#C3D9FF;text-align:center;vertical-align:center;line-height:30px;font-weight:bold;color:#ffffff">小 纸 条</div>一共三个层,下面还有一个,把他拖上来<br/><textarea style="width:130px;height:150px;">有了拖动层,做局部拖动很简单</textarea><br/><input type="button" value="submit it"/></div>

<div id="test4" style="border:3px solid #CDEB8B;text-align:center;left:480px;top:150px;width:150px;height:250px;background-color:#ffffff;position:absolute"><div id="test41" style="cursor:move;left:300px;top:200px;width:150px;height:30px;background-color:#CDEB8B;text-align:center;vertical-align:center;line-height:30px;font-weight:bold;color:#ffffff">小 纸 条</div>一共三个层,下面还有一个,把他拖上来<br/><textarea style="width:130px;height:150px;">顺便练习下颜色搭配</textarea><br/><input type="button" value="submit it"/></div>

<div id="test2" style='cursor:move;border:6px solid #000000;left:200px;top:800px;width:100px;height:100px;background-color:#EEEEEE;position:absolute;text-align:center'><span>Shiny silver</span><br/><input type="button" value="hit me"/></div>

<br/><br/><br/><br/><br/><br/><br/><br/><br/>
<script type="text/javascript" charset="utf-8">
var $=function(id){return document.getElementById(id)};
Array.prototype.extend=function(C){for(var B=0,A=C.length;B<A;B++){this.push(C[B]);}return this;}
function divDrag(){
        var A,B,$cn;
        var zIndex=1;
        this.dragStart=function(e){
                ee=e||window.event;
                if((e.which&&(e.which!=1))||(e.button&&(e.button!=1)))return;
                var pos=this.$pos;
                $cn=this.parent||this;
                if(document.defaultView){
                    _top=document.defaultView.getComputedStyle($cn,null).getPropertyValue("top");
                    _left=document.defaultView.getComputedStyle($cn,null).getPropertyValue("left");}
                else{
                    if($cn.currentStyle){_top=$cn.currentStyle["top"];_left=$cn.currentStyle["left"];}}
                pos.ox=(e.pageX||(e.clientX+document.documentElement.scrollLeft))-parseInt(_left);
                pos.oy=(e.pageY||(e.clientY+document.documentElement.scrollTop))-parseInt(_top);
                if(!!A){
                     if(document.removeEventListener){
                        document.removeEventListener("mousemove",A,false);
                        document.removeEventListener("mouseup",B,false);}
                    else{
                        document.detachEvent("onmousemove",A);
                        document.detachEvent("onmouseup",B);}}
                A=this.dragMove.create(this);
                B=this.dragEnd.create(this);
                if(document.addEventListener){
                    document.addEventListener("mousemove",A,false);
                    document.addEventListener("mouseup",B,false);}
                else{
                    document.attachEvent("onmousemove",A);
                    document.attachEvent("onmouseup",B);}
                $cn.style.zIndex=(++zIndex);
                this.stop(e);
        }
        this.dragMove=function(e){
                ee=e||window.event;
                var pos=this.$pos;
                $cn=this.parent||this;
                $cn.style.top=(e.pageY||(e.clientY+document.documentElement.scrollTop))-parseInt(pos.oy)+'px';
                $cn.style.left=(e.pageX||(e.clientX+document.documentElement.scrollLeft))-parseInt(pos.ox)+'px';
                this.stop(e);}
        this.dragEnd=function(e){
                var pos=this.$pos;              
                ee=e||window.event;
                if((e.which&&(e.which!=1))||(e.button&&(e.button!=1)))return;
                $cn=this.parent||this;
                if(!!(this.parent)){this.style.backgroundColor=pos.color}
                if(document.removeEventListener){
                        document.removeEventListener("mousemove",A,false);
                        document.removeEventListener("mouseup",B,false);}
                else{
                        document.detachEvent("onmousemove",A);
                        document.detachEvent("onmouseup",B);}
                A=null;
                B=null;
                $cn.style.zIndex=(++zIndex);
                this.stop(e);
        }
        this.shiftColor=function(){
            this.style.backgroundColor="#EEEEEE";   
        }
        this.position=function (e){ 
                var t=e.offsetTop;
                var l=e.offsetLeft;
                while(ee=e.offsetParent){ 
                                t+=e.offsetTop; 
                                l+=e.offsetLeft;}
                return {x:l,y:t,ox:0,oy:0,color:null}
        }
        this.stop=function(e){
                if(e.stopPropagation){e.stopPropagation();}else{e.cancelBubble=true;}
                if(e.preventDefault){e.preventDefault();}else{e.returnValue=false;}
        }
        this.stop1=function(e){
            ee=e||window.event;
            if(e.stopPropagation){e.stopPropagation();}else{e.cancelBubble=true;}
        }
        this.create=function(bind){
                var B=this;
                var A=bind;
                return function(e){return B.apply(A,[e]);}
        }
        thisthis.dragStart.create=this.create;
        thisthis.dragMove.create=this.create;
        thisthis.dragEnd.create=this.create;
        thisthis.shiftColor.create=this.create;
        this.initialize=function(){
                for(var A=0,B=arguments.length;A<B;A++){
                        C=arguments[A];
                        if(!(C.push)){C=[C];}
                        $C=(typeof(C[0])=='object')?C[0]:(typeof(C[0])=='string'?$(C[0]):null);
                        if(!$C)continue;
                        $C.$pos=this.position($C);
                        $C.dragMove=this.dragMove;
                        $C.dragEnd=this.dragEnd;
                        $C.stop=this.stop;
                        if(!!C[1]){$CC.parent=C[1];$C.$pos.color=$C.style.backgroundColor;}
                        if($C.addEventListener){
                            $C.addEventListener("mousedown",this.dragStart.create($C),false);
                            if(!!C[1]){$C.addEventListener("mousedown",this.shiftColor.create($C),false);}}
                        else{$C.attachEvent("onmousedown",this.dragStart.create($C));
                            if(!!C[1]){$C.attachEvent("onmousedown",this.shiftColor.create($C));}}
                }
        }
        this.initialize.apply(this,arguments);
}
//生成拖动层很简单,只需要(参数之一如果是数组表示局部拖动,arr[0]表示拖动层,arr[1]表示整体)
new divDrag(
    ['test'],
    [$('test31'),$('test3')],
    $('test1')
    ,$('test2')
    ,[$('test41'),$('test4')]);
</script>
</body>
</html>

 

****************************************************************************

下面这个是可以选取拖动层上的文字和输入框的实现,其实就是在上面基础上添加了几个事件


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>zhou's html</title>
</head>
<body>
                                                一共三个层,下面还有一个,把他拖上来,按下文字和button是不可以拖动的//一共三个层,下面还有一个,把他拖上来,按下文字和button是不可以拖动的//一共三个层,下面还有一个,把他拖上来,按下文字和button是不可以拖动的
<div id="test" style='border:6px solid #000000;left:1px;top:2px;width:100px;height:100px;background-color:#F9F7ED;position:absolute;text-align:center'><span>Magnolia Mag.nolia</span><input type="text" style="width:50px" maxlength="5"/></div>

<div id="test1" style='border:6px solid #000000;left:1px;top:200px;width:150px;height:150px;background-color:#FF1A00;position:absolute;text-align:center'><span>Mozilla Red</span><br/><input type="text" style="width:80px" maxlength="9"/></div>

<div id="test2" style='border:6px solid #000000;left:200px;top:800px;width:100px;height:100px;background-color:#EEEEEE;position:absolute;text-align:center'><span>Shiny silver</span><br/><input type="button" value="hit me"/></div>

<br/><br/><br/><br/><br/><br/><br/><br/><br/>
<script type="text/javascript" charset="utf-8">
var $=function(id){return document.getElementById(id)};
Array.prototype.extend=function(C){for(var B=0,A=C.length;B<A;B++){this.push(C[B]);}return this;}
function divDrag(){
                var A,B;
        var zIndex=1;
        this.dragStart=function(e){
                ee=e||window.event;
                if((e.which&&(e.which!=1))||(e.button&&(e.button!=1)))return;
                var pos=this.$pos;
                                if(document.defaultView){
                                        _top=document.defaultView.getComputedStyle(this,null).getPropertyValue("top");
                                        _left=document.defaultView.getComputedStyle(this,null).getPropertyValue("left");}
                                else{
                                        if(this.currentStyle){_top=this.currentStyle["top"];_left=this.currentStyle["left"];}
                                }
                pos.ox=(e.pageX||(e.clientX+document.documentElement.scrollLeft))-parseInt(_left);
                pos.oy=(e.pageY||(e.clientY+document.documentElement.scrollTop))-parseInt(_top);
                                if(!!A){
                                         if(document.removeEventListener){
                        document.removeEventListener("mousemove",A,false);
                        document.removeEventListener("mouseup",B,false);
                                        }else{
                        document.detachEvent("onmousemove",A);
                        document.detachEvent("onmouseup",B);
                                                document.detachEvent("ondragstart",G);
                        }
                                }
                                A=this.dragMove.create(this);
                B=this.dragEnd.create(this);
                if(document.addEventListener){
                                        document.addEventListener("mousemove",A,false);
                    document.addEventListener("mouseup",B,false);
                }else{
                                        document.attachEvent("onmousemove",A);
                    document.attachEvent("onmouseup",B);
                                                G=function(){return false};
                                                document.attachEvent("ondragstart",G);
                }
                this.style.zIndex=(++zIndex);
                this.stop(e);
        }
        this.dragMove=function(e){
                                ee=e||window.event;
                                var pos=this.$pos;
                this.style.top=(e.pageY||(e.clientY+document.documentElement.scrollTop))-parseInt(pos.oy)+'px';
                this.style.left=(e.pageX||(e.clientX+document.documentElement.scrollLeft))-parseInt(pos.ox)+'px';
                                this.stop(e);}
        this.dragEnd=function(e){
                var pos=this.$pos;              
                ee=e||window.event;
                                
                                if((e.which&&(e.which!=1))||(e.button&&(e.button!=1)))return;
                if(document.removeEventListener){
                        document.removeEventListener("mousemove",A,false);
                        document.removeEventListener("mouseup",B,false);
                                }else{
                        document.detachEvent("onmousemove",A);
                        document.detachEvent("onmouseup",B);
                                                document.detachEvent("ondragstart",G);
                }
                                A=null;
                                B=null;
                this.style.zIndex=(++zIndex);
                this.stop(e);
        }
        this.position=function (e){ 
                var t=e.offsetTop;
                var l=e.offsetLeft;
                while(ee=e.offsetParent){ 
                                t+=e.offsetTop; 
                                l+=e.offsetLeft; 
                }
                return {x:l,y:t,ox:0,oy:0}
        }
        this.stop=function(e){
                if(e.stopPropagation){
                        e.stopPropagation();
                }else{
                        e.cancelBubble=true;}
                        
                if(e.preventDefault){
                        e.preventDefault();}
                else{e.returnValue=false;}
        }
                this.stop1=function(e){
                        ee=e||window.event;
                if(e.stopPropagation){
                        e.stopPropagation();
                }else{
                        e.cancelBubble=true;}

        }
        this.create=function(bind){
                var B=this;
                var A=bind;
                return function(e){
                        return B.apply(A,[e]);
                }
        }
        thisthis.dragStart.create=this.create;
        thisthis.dragMove.create=this.create;
        thisthis.dragEnd.create=this.create;
        
        this.initialize=function(){
                for(var A=0,B=arguments.length;A<B;A++){
                        C=arguments[A];
                        C=(typeof(C)=='object')?C:(typeof(C)=='string'?$(C):null);
                        if(!C)continue;
                        C.$pos=this.position(C);
                        C.dragMove=this.dragMove;
                        C.dragEnd=this.dragEnd;
                        C.position=this.position;
                        C.stop=this.stop;
                                                var $A=[];
                                                $A=$A.extend(C.getElementsByTagName('span')||[]).extend(C.getElementsByTagName('input')||[]);
                                                for(var D=0,E=$A.length;D<E;D++){
                                                        if(C.addEventListener){
                                $A[D].addEventListener("mousedown",this.stop1,false);
                                                                $A[D].addEventListener("mousemove",this.stop1,false);
                                        }else{
                                $A[D].attachEvent("onmousedown",this.stop1);
                                                                $A[D].attachEvent("onmousemove",this.stop1);
                                }
                                                }
                        if(C.addEventListener){
                                C.addEventListener("mousedown",this.dragStart.create(C),false);
                        }else{
                                C.attachEvent("onmousedown",this.dragStart.create(C));
                        }
                }

        }
        this.initialize.apply(this,arguments);
        
}
//生成拖动层很简单
new divDrag('test',$('test1'),$('test2'));
</script>
</body>
</html>