2012-02-03 4 views
0

Я создал одно окно div, которое перетаскивается, и создал один дочерний 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 частный метод -Создание MouseDown событие ид = «ObjHdr» - он начинает перетягивания -Создание mouseup event to id = "ObjHdr" - он заканчивает перетаскивание

в draghandler: detach: function (oElem) {oElem.onmousedown = DragHandler._dragEnd; return oElem; },

document.getElementById ("ObjHdr"). Onmousedown = "DragHandler.attach (document.getElementById (" ObjCountry "));" document.getElementById ("ObjHdr"). Onmouseup = "DragHandler.detach (document.getElementById (" ObjCountry "));

результат: Событие перетаскивания начинается только в том случае, если вы нажмете на заголовок и закончите работу с мышью. никаких действий, если вы пытаетесь нажать на "ObjBody" - нет dragprocess не начнется ..

рассматривает Ozsi

0

Это связано с тем, что перетаскивание применимо во всех направлениях, включая полосу прокрутки. поскольку он вызывается в mousedown, он вызывается также при нажатии на полосу прокрутки.

Смежные вопросы