■■■■■■■■■■■■    我的第一个插件 (求优化代码)  ■■■■■■■■■■■■■■■拖动 div 插件代码如下:   --------文件名: JS/Drap.js
 
/////////////////////////////////////////////////////////////////
//   拖动 div 插件代码如下:
/////////////////////////////////////////////////////////////////
// 事件 
var AboutEvent = function(){
//增加 事件 处理function
this.addEventHandler=
function (oTarget, sEventType, fnHandler) {
if (oTarget.addEventListener) {
oTarget.addEventListener(sEventType, fnHandler, false);
} else if (oTarget.attachEvent) {
oTarget.attachEvent("on" + sEventType, fnHandler);
} else {
oTarget["on" + sEventType] = fnHandler;
}
};
//移除 事件 处理function
this.removeEventHandler = function (oTarget, sEventType, fnHandler) {
if (oTarget.removeEventListener) {
oTarget.removeEventListener(sEventType, fnHandler, false);
} else if (oTarget.detachEvent) {
oTarget.detachEvent("on" + sEventType, fnHandler);
} else { 
oTarget["on" + sEventType] = null;
}
};
//用法
//addEventHandler(document, "mousemove", f1);
//addEventHandler(document, "mouseup", f2);
};
// c: 点击处
// m: 移动区
var _Drap = function(c,m){
//缓存this
var  _this=this;
//字符串?JQ对象?DOM 对象?;
//返回JQuery 对象
this.IsDomOrJQuery = function(Para){
//是字符串 id
if(typeof(Para)=="string")
{
return $("#"+Para);
}
//是JQ对象
else if(typeof(Para)=="object"&& typeof(Para[0])=="object"&&Para[0].toString().substring(0,11)=="[object HTML") //
{
//"dd".substring(
return Para;
}
//是dom 对象
else if(Para.toString().substring(0,11)=="[object HTML" && typeof(Para)=="object")
{
return $(Para);
}
else
{
return false;
}
};
   // 点击的JQ 对象
this.clickObj=this.IsDomOrJQuery(c);
//移动的JQ 对象
this.moveObj=this.IsDomOrJQuery(m);
//拖动总开关
this.canBeDrap;
//标记 是不是正在拖动中
this.IsDraping;
// 整体的大小;
this.width ;
this.height;
this.top;
this.left;
//当前鼠标
this.centerX;
this.centerY;
//移动前鼠标
this.lastX;
this.lastY;
// 定时器;
// 拖动 div 跟综 定时器
this.followTimer;
// 构造 函数; 手动调用
this.F_Drap=function(){
if(this.clickObj&&this.moveObj)
{
var MoveEvent=new AboutEvent();
MoveEvent.addEventHandler(this.clickObj[0],"mousedown",this.ObjMouseDown);
MoveEvent.addEventHandler(document.body,"mousemove",this.DocumentMouseMove);
}
};
this.AllowDrap=function(){
this.canBeDrap=true;
};
this.CancelDrap=function(){
this.canBeDrap=false;
};
this.ObjMouseDown = function(ev)
{
if(_this.canBeDrap)
{
ev = ev || window.event;  // 事件
//记录 //点下时的鼠标座标
_this.lastX=_this.centerX = ev.clientX; 
_this.lastY=_this.centerY = ev.clientY;
_this.IsDraping=true;
//设定定时器跟综
if(_this.followTimer)
{
clearInterval(_this.followTimer);
}
_this.followTimer= setInterval(function(){
//跟综 函数
if(_this.canBeDrap)
{
if(_this.lastX!=_this.centerX )
{
var AddtoX =parseInt(_this.moveObj.css("left"))+_this.centerX-_this.lastX;
_this.moveObj.css("left",AddtoX.toString()+"px");
}
if( _this.lastY!=_this.centerY)
{
var AddtoY =parseInt(_this.moveObj.css("top"))+_this.centerY-_this.lastY;
_this.moveObj.css("top",AddtoY.toString()+"px");

}
_this.lastX=_this.centerX; 
_this.lastY=_this.centerY;
}
},100);
//下面可以加下颜色 标记
}
};
this.DocumentMouseMove = (function(that){
 return (function(ev){
ev = ev || window.event;  // 事件
that.centerX=ev.clientX;
that.centerY=ev.clientY;
});
})(this);
};■■■■■■■■■■■■    插件代码完毕   (求优化代码)  ■■■■■■■■■■■■■■■
■■■■■■■■■■■■    下面是插件的应用             ■■■■■■■■■■■■■■■
如下应用:
<html  >
<head runat="server">
    <title></title> <script src="JS/jquery-1.4.2.js" type="text/javascript"></script>
<script src="JS/jquery-1.4.2-vsdoc.js" type="text/javascript"></script>
<script src="JS/Drap.js" type="text/javascript"></script>
    <style type="text/css">
    #divMoveTest
{
width: 200px;
height: 500px;
position: absolute;
top:100px;
left:100px;
margin: 1px;
padding: 1px;
border-color:Green;
border-width:1px;
border-style:solid;
background-color:#e0e0e5;
}
#divClickTest
{
border-color:Yellow;
background-color:#304054;
color:White;
border-width:1px;
border-style:solid;
height:20px;
width:100%;
cursor:pointer;
}
    </style>
<script  type="text/javascript">
//下面是应用代码: var dr = new _Drap("divClickTest","divMoveTest");  //声明一个对象
dr.F_Drap(); //手动调用它的构造函数。
dr.AllowDrap(); //允许拖动的总开关 打开 <script/>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />

<div id="divMoveTest">
<div id="divClickTest"></div>
</div>
    </div>
    </form>
</body>
</html>
■■■■■■■■■■■■    下面是插件的应用             ■■■■■■■■■■■■■■■

解决方案 »

  1.   

    上面的不是完整板。
    下面才是;
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title></title> <script src="JS/jquery-1.4.2.js" type="text/javascript"></script>
    <script src="JS/jquery-1.4.2-vsdoc.js" type="text/javascript"></script>
        <style type="text/css">
        #divMoveTest
    {
    width: 200px;
    height: 500px;
    position: absolute;
    top:100px;
    left:100px;
    margin: 1px;
    padding: 1px;
    border-color:Green;
    border-width:1px;
    border-style:solid;
    background-color:#e0e0e5;

    }
    #divClickTest
    {
    border-color:Yellow;
    background-color:#304054;
    color:White;
    border-width:1px;
    border-style:solid;
    height:20px;
    width:100%;
    }
        
        </style> <script  type="text/javascript">
    /////////////////////////////////////////////////////////////////
    //拖动 DRAP class
    //
    //
    //
    /////////////////////////////////////////////////////////////////
    //// 事件  var AboutEvent = function(){
    //增加 事件 处理function
    this.addEventHandler=
    function (oTarget, sEventType, fnHandler) {
    if (oTarget.addEventListener) {
    oTarget.addEventListener(sEventType, fnHandler, false);
    } else if (oTarget.attachEvent) {
    oTarget.attachEvent("on" + sEventType, fnHandler);
    } else {
    oTarget["on" + sEventType] = fnHandler;
    }
    };
    //移除 事件 处理function
    this.removeEventHandler = function (oTarget, sEventType, fnHandler) {
    if (oTarget.removeEventListener) {
    oTarget.removeEventListener(sEventType, fnHandler, false);
    } else if (oTarget.detachEvent) {
    oTarget.detachEvent("on" + sEventType, fnHandler);
    } else { 
    oTarget["on" + sEventType] = null;
    }
    };
    //用法
    //addEventHandler(document, "mousemove", f1);
    //addEventHandler(document, "mouseup", f2);
    };
    // c: 点击处
    // m: 移动区
    var _Drap = function(c,m){
    //缓存this
    var  _this=this;
    //字符串?JQ对象?DOM 对象?;
    //返回JQuery 对象
    this.IsDomOrJQuery = function(Para){
    //是字符串 id
    if(typeof(Para)=="string")
    {
    return $("#"+Para);
    }
    //是JQ对象
    else if(typeof(Para)=="object"&& typeof(Para[0])=="object"&&Para[0].toString().substring(0,11)=="[object HTML") //
    {
    //"dd".substring(
    return Para;
    }
    //是dom 对象
    else if(Para.toString().substring(0,11)=="[object HTML" && typeof(Para)=="object")
    {
    return $(Para);
    }
    else
    {
    return false;
    }
    };
    // 点击的JQ 对象
    this.clickObj=this.IsDomOrJQuery(c);
    //移动的JQ 对象
    this.moveObj=this.IsDomOrJQuery(m);
    //事件对象
    this.MoveEvent=new AboutEvent();
    //拖动总开关
    this.canBeDrap;
    //标记 是不是正在拖动中
    this.IsDraping;
    // 整体的大小;
    this.width ;
    this.height;
    this.top;
    this.left;
    //当前鼠标
    this.centerX;
    this.centerY;
    //移动前鼠标
    this.lastX;
    this.lastY;
    // 定时器;
    // 拖动 div 跟综 定时器
    this.followTimer;
    // 构造 函数; 手动调用
    this.F_Drap=function(){
    if(this.clickObj&&this.moveObj)
    {
    this.MoveEvent.addEventHandler(this.clickObj[0],"mousedown",this.ObjMouseDown);
    this.MoveEvent.addEventHandler(document.body,"mouseup",this.DocumentMouseUp);
    }
    };
    //总开关 开
    this.AllowDrap=function(){
    this.clickObj.css("cursor","move"); //:move;cursor:default;
    this.canBeDrap=true;
    };
    //总开关 关
    this.CancelDrap=function(){
    this.clickObj.css("cursor","default"); //:move;cursor:default;
    this.canBeDrap=false;
    };
    this.ObjMouseDown = function(ev)
    {
    if(_this.canBeDrap)
    {
    //动态添加 跟踪 函数
    _this.MoveEvent.addEventHandler(document.body,"mousemove",_this.DocumentMouseMove);
    //标记当前状态为 拖动状态
    _this.IsDraping= true;
    ev = ev || window.event;  // 事件
    //记录 //点下时的鼠标座标
    _this.lastX=_this.centerX = ev.clientX; 
    _this.lastY=_this.centerY = ev.clientY;
    _this.IsDraping=true;
    //设定定时器跟综
    if(_this.followTimer)
    {
    clearInterval(_this.followTimer);
    }
    _this.followTimer= setInterval(function(){
    //跟综 函数
    if(_this.canBeDrap)
    {
    if(_this.lastX!=_this.centerX )
    {
    var AddtoX =parseInt(_this.moveObj.css("left"))+_this.centerX-_this.lastX;
    _this.moveObj.css("left",AddtoX.toString()+"px");
    }
    if( _this.lastY!=_this.centerY)
    {
    var AddtoY =parseInt(_this.moveObj.css("top"))+_this.centerY-_this.lastY;
    _this.moveObj.css("top",AddtoY.toString()+"px");

    }
    _this.lastX=_this.centerX; 
    _this.lastY=_this.centerY;
    }
    },80);
    //下面可以加下颜色 标记
    }
    };
    this.DocumentMouseUp=(function(that){
    return (function(ev){
    if(_this.IsDraping== false)
    {
    return;
    }
    //标记当前状态为 非拖动状态
    _this.IsDraping= false;
    if(that.followTimer)
    {
    clearInterval(that.followTimer);
    that.followTimer=false;
    }
    //定位 
    if(_this.lastX!=_this.centerX )
    {
    var AddtoX =parseInt(_this.moveObj.css("left"))+_this.centerX-_this.lastX;
    _this.moveObj.css("left",AddtoX.toString()+"px");
    }
    if( _this.lastY!=_this.centerY)
    {
    var AddtoY =parseInt(_this.moveObj.css("top"))+_this.centerY-_this.lastY;
    _this.moveObj.css("top",AddtoY.toString()+"px");

    }
    ev = ev || window.event;  // 事件
    _this.lastX=_this.centerX = ev.clientX; 
    _this.lastY=_this.centerY = ev.clientY;
    //消息 跟踪 函数
    _this.MoveEvent.removeEventHandler(document.body,"mousemove",_this.DocumentMouseMove);
    });
    })(this);
    this.DocumentMouseMove = (function(that){
     return (function(ev){
    ev = ev || window.event;  // 事件
    that.centerX=ev.clientX;
    that.centerY=ev.clientY;
    });
    })(this);
    };
    // 点击的JQ 对象
    _Drap.prototype.canBeDrap=false;
    //标记 是不是正在拖动中
    $(function(){
    var dr = new _Drap("divClickTest","divMoveTest");
    dr.F_Drap();
    dr.AllowDrap();
    });
    </script>
    </head>
    <body>
        <div>
        <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <div id="divMoveTest">
    <div id="divClickTest"></div>
    </div>
        </div>
    </body>
    </html>
      

  2.   


    就是一个拖动的div啊!
    我把代码封成类,方便使用啊?
    当然现在我又有了更完善的板本了,可以设定范围了。
      

  3.   

    下面 是更完善版本
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title></title> <script src="JS/jquery-1.4.2.js" type="text/javascript"></script>
    <script src="JS/jquery-1.4.2-vsdoc.js" type="text/javascript"></script>
        <style type="text/css">
        #divMoveTest
    {
    width: 200px;
    height: 500px;
    top:100px;
    left:100px;
    margin: 1px;
    padding: 1px;
    border-color:Green;
    border-width:1px;
    border-style:solid;
    background-color:#e0e0e5;

    }
    #divClickTest
    {
    border-color:Yellow;
    background-color:#304054;
    color:White;
    border-width:1px;
    border-style:solid;
    height:20px;
    width:100%;
    }
        
        </style> <script  type="text/javascript">
    ///////////////////////////////////////////////////////////////////////////////////
    // 拖动 DRAP class
    // var dr = new _Drap("divClickTest","divMoveTest"); //声明一个对象
    //divClickTest 点击的div
    //divMoveTest  移动的div
    // dr.F_Drap(); //手动调用它的构造函数。
    // dr.AllowDrap(); //允许拖动的总开关 打开 它默认是true
    //
    //
    ///////////////////////////////////////////////////////////////////////////////////
    //// 事件  var AboutEvent = function(){
    //增加 事件 处理function
    this.addEventHandler=
    function (oTarget, sEventType, fnHandler) {
    if (oTarget.addEventListener) {
    oTarget.addEventListener(sEventType, fnHandler, false);
    } else if (oTarget.attachEvent) {
    oTarget.attachEvent("on" + sEventType, fnHandler);
    } else {
    oTarget["on" + sEventType] = fnHandler;
    }
    };
    //移除 事件 处理function
    this.removeEventHandler = function (oTarget, sEventType, fnHandler) {
    if (oTarget.removeEventListener) {
    oTarget.removeEventListener(sEventType, fnHandler, false);
    } else if (oTarget.detachEvent) {
    oTarget.detachEvent("on" + sEventType, fnHandler);
    } else { 
    oTarget["on" + sEventType] = null;
    }
    };
    //用法
    //addEventHandler(document, "mousemove", f1);
    //addEventHandler(document, "mouseup", f2);
    };
    // c: 点击处
    // m: 移动区
    var _Drap = function(c,m){
    //缓存this
    var  _this=this;
    //字符串?JQ对象?DOM 对象?;
    //返回JQuery 对象
    this.IsDomOrJQuery = function(Para){
    //是字符串 id
    if(typeof(Para)=="string")
    {
    return $("#"+Para);
    }
    //是JQ对象
    else if(typeof(Para)=="object"&& typeof(Para[0])=="object"&&Para[0].toString().substring(0,11)=="[object HTML") //
    {
    //"dd".substring(
    return Para;
    }
    //是dom 对象
    else if(Para.toString().substring(0,11)=="[object HTML" && typeof(Para)=="object")
    {
    return $(Para);
    }
    else
    {
    return false;
    }
    };
    // 点击的JQ 对象
    this.clickObj=this.IsDomOrJQuery(c);
    //移动的JQ 对象
    this.moveObj=this.IsDomOrJQuery(m);
    //事件对象
    this.MoveEvent=new AboutEvent();
    //拖动总开关
    this.canBeDrap;
    // 是不是开始范围限定
    this.isLimit;
    //范围
    this.LimitMinX;
    this.LimitMaxX;
    this.LimitMinY;
    this.LimitMaxY;

    //标记 是不是正在拖动中
    this.IsDraping;
    // 整体的大小;
    this.width ;
    this.height;
    this.top;
    this.left;
    //窗体最大
    this.MaxX;
    this.MaxY;
    //this.alertMax=function(){return (this.MaxX+":"+this.MaxY);};
    //当前鼠标
    this.centerX;
    this.centerY;
    // 上一步鼠标
    this.BeforeX;
    this.BeforeY;
    //移动前鼠标
    this.lastX;
    this.lastY;
    //移动前鼠标差
    this.DiffX;
    this.DiffY;
    // 定时器;
    // 拖动 div 跟综 定时器
    this.followTimer;
    //范围设定
    this.SetLimit= function(minX,minY,maxX,maxY){
    this.LimitMinX=minX;
    this.LimitMaxX=maxX;
    this.LimitMinY=minY;
    this.LimitMaxY=maxY;
    };
    // 构造 函数; 手动调用
    this.F_Drap=function(){
    this.moveObj.css("position","absolute");
    if(this.clickObj&&this.moveObj)
    {
    this.MoveEvent.addEventHandler(this.clickObj[0],"mousedown",this.ObjMouseDown);
    this.MoveEvent.addEventHandler(document.body,"mouseup",this.DocumentMouseUp);
    //大小 位置记录
    this.width= parseInt(this.moveObj.css("width"));
    this.height= parseInt(this.moveObj.css("height"));
    this.top= parseInt(this.moveObj.css("top"));
    this.left= parseInt(this.moveObj.css("left"));
    //
    this.MaxX = parseInt($(document.body).css("width"));
    this.MaxY = parseInt($(document.body).css("height"));
    //范围
    this.LimitMinX=0;
    this.LimitMaxX=this.MaxX;
    this.LimitMinY=0;
    this.LimitMaxY=this.MaxY;
    }
    };
    //总开关 开
    this.Enable=function(){
    this.clickObj.css("cursor","move"); //:move;cursor:default;
    this.canBeDrap=true;
    };
    //总开关 关
    this.Disable=function(){
    this.clickObj.css("cursor","default"); //:move;cursor:default;
    this.canBeDrap=false;
    };
    // 设有限
    this.EnableLimit= function()
    {
    this.isLimit=true;
    };
    // 设无限
    this.DisableLimit= function()
    {
    this.isLimit=false;
    };
    this.ObjMouseDown = function(ev)
    {
    if(_this.canBeDrap)
    {
    //动态添加 跟踪 函数
    _this.MoveEvent.addEventHandler(document.body,"mousemove",_this.DocumentMouseMove);
    //标记当前状态为 拖动状态
    _this.IsDraping= true;
    ev = ev || window.event;  // 事件
    //记录 //点下时的鼠标座标
    _this.BeforeX=_this.lastX=_this.centerX = ev.clientX; 
    _this.BeforeY=_this.lastY=_this.centerY = ev.clientY;
    //记录 差值:
    _this.DiffX=ev.clientX-parseInt(_this.moveObj.css("left"));
    _this.DiffY=ev.clientY-parseInt(_this.moveObj.css("top"));
    _this.IsDraping=true;
    //设定定时器跟综
    if(_this.followTimer)
    {
    clearInterval(_this.followTimer);
    }
    _this.followTimer= setInterval(function(){
    //跟综 函数
    if(_this.canBeDrap)
    {
    //定位 
    _this.SetDivPoint();
    }
    },80);
    //下面可以加下颜色 标记
    }
    };
    //定位处理函数
    this.SetDivPoint=function(){
    //定位 
    if(this.BeforeX!=this.centerX )
    {
    if(this.isLimit)//是不是有限定
    {
    if((this.centerX-this.DiffX) <= this.LimitMinX)
    {
    this.moveObj.css("left",this.LimitMinX.toString()+"px");
    }
    else if(this.centerX-this.DiffX+this.width >= this.LimitMaxX)
    {
    this.moveObj.css("left",(this.LimitMaxX-this.width).toString()+"px");
    }
    else
    {
    this.moveObj.css("left",(this.centerX-this.DiffX).toString()+"px");
    }
    }
    else
    {
    this.moveObj.css("left",(this.centerX-this.DiffX).toString()+"px");
    }
    }
    if( this.BeforeY!=this.centerY)
    {
    if(this.isLimit)//是不是有限定
    {
    if(this.centerY-this.DiffY<=this.LimitMinY)
    {
    this.moveObj.css("top",this.LimitMinY.toString()+"px");
    }
    else if(this.centerY-this.DiffY+this.height>= this.LimitMaxY)
    {
    this.moveObj.css("top",(this.LimitMaxY-this.height).toString()+"px");
    }
    else
    {
    this.moveObj.css("top",(this.centerY-this.DiffY).toString()+"px");
    }
    }
    else
    {
    this.moveObj.css("top",(this.centerY-this.DiffY).toString()+"px");
    }
    }
    this.BeforeX=this.centerX; 
    this.BeforeY=this.centerY;
    };
    this.DocumentMouseUp=(function(that){
    return (function(ev){
    if(_this.IsDraping== false)
    {
    return;
    }
    //标记当前状态为 非拖动状态
    _this.IsDraping= false;
    if(that.followTimer)
    {
    clearInterval(that.followTimer);
    that.followTimer=false;
    }
    if(_this.canBeDrap)
    {
    //定位 
    _this.SetDivPoint();
    }
    ev = ev || window.event;  // 事件
    _this.BeforeX=_this.centerX = ev.clientX; 
    _this.BeforeY=_this.centerY = ev.clientY;
    //消息 跟踪 函数
    _this.MoveEvent.removeEventHandler(document.body,"mousemove",_this.DocumentMouseMove);
    });
    })(this);
    this.DocumentMouseMove = (function(that){
     return (function(ev){
    ev = ev || window.event;  // 事件
    that.centerX=ev.clientX;
    that.centerY=ev.clientY;
    });
    })(this);
    };
    // 总开关默认值
    _Drap.prototype.canBeDrap=true;
    //标记 是不是正在拖动中
    _Drap.prototype.IsDraping=false;
    $(function(){
    var dr = new _Drap("divClickTest","divMoveTest");
    dr.F_Drap();
    dr.Enable();
    dr.EnableLimit();
    dr.SetLimit(10,10,700,800);
    });
    </script>
    </head>
    <body>
        <div>
        <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />

    <div id="divMoveTest">
    <div id="divClickTest"></div>
    </div>
        </div>
    </body>
    </html>
    但还需更完善。
        明天推出吧。