2012-02-03 39 views
0

我已經創建了一個可拖動的div窗口,並且創建了一個可滾動的子div(在窗口div中)。這些工作很好,但是當我試圖通過滾動內部div點擊向上和向下箭頭的滾動,一旦滾動完成後觸發拖動事件。我無法解決問題....任何建議,請...在DIV標籤滾動中的錯誤

這裏是代碼...

<!DOCTYPE HTML> 
    <HTML> 
    <HEAD> 
    <TITLE> Reporting</TITLE> 
    <META NAME="Generator" CONTENT="EditPlus"> 
    <META NAME="Author" CONTENT=""> 
    <META NAME="Keywords" CONTENT=""> 
    <META NAME="Description" CONTENT=""> 
    <style> 
    body{ 
    font-family:Arial,Helvetica,sans-serif; 
    font-size:0.7em; 
    } 
    .Object{ 
    width:190px; 
    height:100px; 
    border:1px solid black; 
    border-radius:7px 7px 7px 7px; 
    box-shadow:3px 3px 2px #D2D2D2; 
    position:absolute; 
    resize: 
    } 

    .ObjHdr{ 
    color:#fff; 
    background:#363636; 
    padding:3px 0px 3px 7px; 
    border-radius:6px 6px 0px 0px;; 
    font-weight:bold; 
    cursor:move; 
    } 

    .ObjBody{ 
    width:190px; 
    height:77px; 
    overflow:scroll; 
    } 

    .ObjEle{ 
    padding:1px 0px 1px 4px; 
    color:#000; 
    border-bottom:1px solid black; 
    cursor:pointer; 
    } 

    </style> 

    </HEAD> 
    <BODY> 

    <div id="ObjCountry" class="Object"> 
     <div class="ObjHdr">Country</div> 
     <div id =sd class="ObjBody" unselectable="on"> 
     <div class="ObjEle">India</div> 
     <div class="ObjEle">China</div> 
     <div class="ObjEle">USA</div> 
     <div class="ObjEle">Iran</div> 
     <div class="ObjEle">Iraq</div> 
     <div class="ObjEle">Indonesia</div> 
     </div> 
    </div> 

    </BODY> 
    </HTML> 

    <script> 

    var DragHandler = { 

     // private property. 
     _oElem : null, 

     // public method. Attach drag handler to an element. 
     attach : function(oElem) { 
      oElem.onmousedown = DragHandler._dragBegin; 

      // callbacks 
      oElem.dragBegin = new Function(); 
      oElem.drag = new Function(); 
      oElem.dragEnd = new Function(); 

      return oElem; 
     }, 

     // private method. Begin drag process. 
     _dragBegin : function(e) { 
      var oElem = DragHandler._oElem = this; 

      if (isNaN(parseInt(oElem.style.left))) { oElem.style.left = '0px'; } 
      if (isNaN(parseInt(oElem.style.top))) { oElem.style.top = '0px'; } 

      var x = parseInt(oElem.style.left); 
      var y = parseInt(oElem.style.top); 

      e = e ? e : window.event; 
      oElem.mouseX = e.clientX; 
      oElem.mouseY = e.clientY; 

      oElem.dragBegin(oElem,x,y); 

      //document.onmousemove = DragHandler._drag; 
      document.onmouseup = DragHandler._dragEnd; 
      oElem.onmousemove = DragHandler._drag; 
      oElem.onmouseup = DragHandler._dragEnd; 
      return false; 
     }, 

     // private method. Drag (move) element. 
     _drag : function(e) { 
      var oElem = DragHandler._oElem; 

      var x = parseInt(oElem.style.left); 
      var y = parseInt(oElem.style.top); 

      e = e ? e : window.event; 

      var tmpX = x + (e.clientX - oElem.mouseX); 
      var tmpY = y + (e.clientY - oElem.mouseY); 

      if(tmpX<=0){tmpX = 0;} 
      if(tmpY<=0){tmpY = 0;} 


      oElem.style.left = tmpX + 'px'; 
      oElem.style.top = tmpY + 'px'; 

      oElem.mouseX = e.clientX; 
      oElem.mouseY = e.clientY; 

      oElem.drag(oElem, x,y); 

      return false; 
     }, 

     // private method. Stop drag process. 
     _dragEnd : function() { 
      var oElem = DragHandler._oElem; 

      var x = parseInt(oElem.style.left); 
      var y = parseInt(oElem.style.top); 

      oElem.dragEnd(oElem, x, y); 

      oElem.onmousemove = null; 
      oElem.onmouseup = null; 
      document.onmousemove=null; 
      document.onmouseup=null; 
      DragHandler._oElem = null; 

     } 

    } 

    DragHandler.attach(document.getElementById('ObjCountry')); 

    </script> 

回答

1

如下我會做它:

-create在draghandler一種新方法,它調用只有dragend私有方法 - 創建一個鼠標按下事件ID =「ObjHdr」 - 它開始拖動 - 創建mouseup event to id =「ObjHdr」 - 它結束拖動

到拖拽操作器: detach:function(oElem){oElem.onmousedown = DragHandler._dragEnd;返回oElem; },

document.getElementById(「ObjHdr」)。onmousedown =「DragHandler.attach(document.getElementById(」ObjCountry「));」 「document.getElementById(」ObjCountry「));」

結果: 拖放事件僅在單擊標題並以鼠標懸停結束時纔會啓動。 任何操作,如果你試着點擊 「ObjBody」 - 沒有dragprocess將開始..

問候 Ozsi

0

這是因爲,拖動適用於所有的div,包括滾動條。因爲它是在mousedown上調用的,所以它也是在單擊滾動條時調用的。