鼠標拖拽的實現(xiàn)原理

參數(shù)解讀
控制距離

JS代碼:

<script>
window.onload=function()
{
  var oDiv=document.getElementById('div');
  var disX=0;
  var disY=0;
  oDiv.onmousedown=function(ev) //鼠標按下DIV
  {
    var oEvent=ev||event;
    disX=oEvent.clientX-oDiv.offsetLeft; //鼠標的X坐標減去DIV的左邊距就等于disX, 這個disXs是用于確定鼠標移動DIV時鼠標點和DIV之間的左面距離,這個距離是不會變的,通過這個新鼠標的X坐標減去disX就是DIV的Left
    disY=oEvent.clientY-oDiv.offsetTop; //鼠標的Y坐標減去DIV的左邊距就等于disY, 這個disY是用于確定鼠標移動DIV時鼠標點和DIV之間的上面距離,這個距離是不會變的,通過這個新鼠標的Y坐標減去disY就是DIV的Top
    document.onmousemove=function(ev) //為了防止鼠標移動太快而離開了DIV產生了bug,所以要給整個頁面加onmousemove事件
    {
      var oEvent=ev||event;
      var oLeft=oEvent.clientX-disX; //新鼠標X坐標減去disX,也就是鼠標移動DIV后的Left
      var oTop=oEvent.clientY-disY; //新鼠標Y坐標減去disY,也就是鼠標移動DIV后的Top
      if(oLeft<0) //當DIV的Left小于0,也就是移出左邊
      {
        oLeft=0; //就把DIV的Left設置為0,就不能移出左邊
      }
      else if(oLeft>document.documentElement.clientWidth-oDiv.offsetWidth) //屏幕寬度減去DIV的寬度就得出了DIV到達最右邊的寬度,如果Left大于這個像素
      {
        oLeft=document.documentElement.clientWidth-oDiv.offsetWidth; //就把Left設置為這個像素
      }
      if(oTop<0) //當DIV的To小于0,也就是移出左邊
      {
        oTop=0; //就把DIV的Top設置為0,就不能移出上邊
      }
      else if(oTop>document.documentElement.clientHeight-oDiv.offsetHeight) //屏幕高度減去DIV的高度就得出了DIV到達最下面邊的像素,如果Top大于這個像素
      {
        oTop=document.documentElement.clientHeight-oDiv.offsetHeight; //就把Top設置為這個像素
      }
      oDiv.style.left=oLeft+'px'; //DIV的Left設置為新鼠標X坐標減去disX的值
      oDiv.style.top=oTop+'px'; //DIV的Top設置為新鼠標Y坐標減去disY的值
    };
    document.onmouseup=function() //鼠標松開時
    {
      document.onmousemove=null; //把鼠標移動清楚
      document.onmouseup=null; //把鼠標松開清楚
    };
    return false; //阻止FireFox的默認事件 bug
  };
};
</script>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Window和document對象的區(qū)別 window對象window對象表示瀏覽器中打開的窗口window對象是...
    FConfidence閱讀 2,364評論 0 5
  • 1. tab列表折疊效果 html: 能源系統(tǒng)事業(yè)部 崗位名稱: 工作地點 崗位名...
    lilyping閱讀 2,008評論 0 1
  • 事件對象 鼠標事件 event.clientX在可視區(qū)中,鼠標點擊的x坐標 event.clientY在可視區(qū)中,...
    LaBaby_閱讀 658評論 0 1
  • 我們首先要明白,我們給頁面添加效果用到的js到底是什么?js其實包含三部分:dom 文檔對象模型 bom 瀏覽...
    一直以來都很好閱讀 867評論 0 0
  • 1. 你不愿意種花,你說,我不愿看見它一點點凋落,是的,為了避免結束,你避 免了一些開始。(顧城《避免》) 2. ...
    縵華纓閱讀 716評論 0 1

友情鏈接更多精彩內容