一个拖动非常好的例子
http://www.walterzorn.com/dragdrop/dragdrop_e.htm

解决方案 »

  1.   

    搞一个onmouseover="this.select()"
    onmouseout="this.unselect()"
      

  2.   

    textbox支持this.select()但不支持this.unselect(),而label两个都不支持的!
      

  3.   

    对拖动控件这一块我不行,现在作的是NET中的控件拖动,但更麻烦而且客户端要有NET框架的支持所以改为JAVASCRIPT,但现在遇到上面的问题,老板说要选中才能拖肯定不行,怎么办啊??快疯了,,老板逼我啊!
      

  4.   


    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    <script>
    function dragClass(obj,e)
    {
    var dragObj;
    function dragObj() {
    this.LEFT = null;
    this.TOP = null;
    this.WIDTH = null;
    this.HEIGHT = null;
    }
    if (e && obj) {
    dragObj = new dragObj();
    dragObj.obj = obj;

    dragObj.LEFT = e.clientX-obj.style.pixelLeft;
    dragObj.TOP = e.clientY-obj.style.pixelTop;
    }

    if(document.addEventListener) {
    document.addEventListener("mousemove",moveHandler,true);
    document.addEventListener("mouseup",upHandler,true);
    }
    else if(document.attachEvent) {
    document.attachEvent("onmousemove",moveHandler);
    document.attachEvent("onmouseup",upHandler);
    obj.setCapture();
    }
    if(event.stopPropagation) event.stopPropagation(); 
    else event.cancelBubble=true;
    if(event.preventDefault) event.preventDefault();  
    else event.returnValue=false;

    function moveHandler(e) {
    if (!e) e = window.event;
    if (dragObj) {
    var newx = e.x - dragObj.LEFT;
    var newy = e.y - dragObj.TOP
    dragObj.obj.style.left = newx;
    dragObj.obj.style.top = newy;
    }
    if (event.stopPropagation) event.stopPropagation();
    else event.returnValue = "false";
    }
    function upHandler(e) {
    if (!e) e = window.event;
    if (dragObj) {
    if (document.removeEventListener) {
    document.removeEventListener("mousemove",moveHandler,true);
    document.removeEventListener("mouseup",upHandler,true);
    }
    else {
    document.detachEvent("onmouseup",upHandler);
    document.detachEvent("onmousemove",moveHandler);
    obj.releaseCapture();
    }
    }
    if (event.stopPropagation) event.stopPropagation();
    else event.returnValue = "false";
    }
    }
    </script>
    </head>
    <body>
    <input type="text" id="userName"
    style="position:absolute"
    onmousedown="dragClass(this,event);this.focus();">
    </body>
    </html>
    运行这个HMTL文件会发现只有把Label上的文字选中才可以拖动,只有在text中输入文字将文字选中才可以拖动!怎么解决???
      

  5.   

    我觉得你可以试试DIV不一定非要用label
      

  6.   

    ///////////////////////////////////////
    //开始拖动///////////////////////////////////////
    TreeItem.prototype.startDrag=function(e){
    if(!treeConfig.allowDrag) return;
    //var label=document.getElementById(this.id+"-text-anchor");
    var label=e.srcElement;
    label.setCapture();

    var tip=document.createElement("span");
    tip.className=treeConfig.css_ItemDragTooltip;
    tip.innerText=this.Text;
    tip.style.left=e.clientX +document.body.scrollLeft +label.offsetWidth -e.offsetX;
    tip.style.top=e.clientY +document.body.scrollTop +label.offsetHeight -e.offsetY;
    document.body.appendChild(tip);

    this._startX=e.clientX;
    this._startY=e.clientY;
    this._dragTooltip=tip;

    }
      

  7.   

    hbzyduwu:我现在把程序改如下 :(我要在设计的时候把绝对位置去掉,否则设计页面时会有很多问题如不能用TABLE)可是问题出现了第一次拖动时总是回到0.0坐标
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    <script>
    function dragClass(obj,e)
    {
    var dragObj;
    function dragObj() {
    this.LEFT = null;
    this.TOP = null;
    this.WIDTH = null;
    this.HEIGHT = null;
    }
    if (e && obj) {
    dragObj = new dragObj();
    obj.style.position='absolute';
    dragObj.obj = obj;
    dragObj.LEFT = e.clientX-obj.style.pixelLeft;
    dragObj.TOP = e.clientY-obj.style.pixelTop;
    }

    if(document.addEventListener) {
    document.addEventListener("mousemove",moveHandler,true);
    document.addEventListener("mouseup",upHandler,true);
    }
    else if(document.attachEvent) {
    document.attachEvent("onmousemove",moveHandler);
    document.attachEvent("onmouseup",upHandler);
    obj.setCapture();
    }
    if(event.stopPropagation) event.stopPropagation(); 
    else event.cancelBubble=true;
    if(event.preventDefault) event.preventDefault();  
    else event.returnValue=false;

    function moveHandler(e) {
    if (!e) e = window.event;
    if (dragObj) {
    var newx = e.x - dragObj.LEFT;
    var newy = e.y - dragObj.TOP
    dragObj.obj.style.left = newx;
    dragObj.obj.style.top = newy;
    //alert("x轴:"+newx);
    }
    if (event.stopPropagation) event.stopPropagation();
    else event.returnValue = "false";
    }
    function upHandler(e) {
    if (!e) e = window.event;
    if (dragObj) {
    if (document.removeEventListener) {
    document.removeEventListener("mousemove",moveHandler,true);
    document.removeEventListener("mouseup",upHandler,true);
    }
    else {
    document.detachEvent("onmouseup",upHandler);
    document.detachEvent("onmousemove",moveHandler);
    obj.releaseCapture();
    }
    }
    if (event.stopPropagation) event.stopPropagation();
    else event.returnValue = "false";
    }
    }
    </script>
    </head>
    <body>
    <label ID="lab" onmousedown="dragClass(this,event);this.focus();"></label>
    <table width="96%"  border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="34%">&nbsp;</td>
        <td width="61%"><input type="text" id="userName" onMouseDown="dragClass(this,event);this.focus();"></td>
        <td width="5%">&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td><label id="lab" onMouseDown="dragClass(this,event);this.focus();">fdfd</label></td>
        <td>&nbsp;</td>
      </tr>
    </table>
    </body>
    </html>
      

  8.   

    用鼠标的onmousedown,onmousemove,onmouseup来代替拖动事件
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    <script>
    var xx=0,yy=0,state=0
    </script>
    <script language="javascript">
    function setPos(objElement,intFlag)
    {
    if(intFlag==1) //OnDragStart
    {
    objElement.setCapture();
    objElement.style.cursor='move';
    xx=event.x-objElement.offsetLeft;
    yy=event.y-objElement.offsetTop;
    state=1;
    }
    else if(intFlag==2)//OnDrag
    {
        if(state==1)
    {
    objElement.style.position='absolute';
    objElement.style.left=event.x-xx;
    objElement.style.top=event.y-yy;
    }
    }
    else if(intFlag==3)//OnDragEnd结束时取得坐标信息
    {
    objElement.style.cursor='default';
    objElement.releaseCapture();
    state=0;
    }
    }
    </script>
    </head>
    <body>
    <label ID="lab" onmousedown="setPos(this,1)" onmousemove="setPos(this,2)" onmouseup="setPos(this,3)">fdfd</label>
    <input type="text" id="userName" onmousedown="setPos(this,1)" onmousemove="setPos(this,2)" onmouseup="setPos(this,3)">
    </body>
    </html>
      

  9.   

    ok,,现在真的OK了,多谢各位老大,,马上结帖