javascript div元素滑鼠拖動效果詳解

antzone發表於2017-04-07

任何複雜的功能都是由一個個簡單的功能疊加而成,本章節就詳細介紹一下如何實現利用滑鼠拖動div元素運動效果。

並且能夠實現限制div元素拖動的範圍,需要的朋友可以做一下參考。

程式碼例項:

[HTML] 純文字檢視 複製程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
#antzone{
  width:100px;
  height:100px;
  background:red;
  position:absolute
}
</style>
<script type="text/javascript">
window.onload=function(){
  var oDiv=document.getElementById("antzone");
  var x=0;
  var y=0;
  oDiv.onmousedown=function(ev){
    var oEvent=ev||event;
    //滑鼠的橫座標減去div的offsetLeft
    x=oEvent.clientX-oDiv.offsetLeft;
    //滑鼠的縱座標減去div的offsetTop
    y=oEvent.clientY-oDiv.offsetTop; 
       
    document.onmousemove=function(ev){
      var oEvent=ev||event;   
      var left=oEvent.clientX-x;
      var right=oEvent.clientY-y;
      //判斷左邊是否過界
      if(left<0){
        left=0;
      }
      //判斷右邊是否過界
      else if(left>document.documentElement.clientWidth-oDiv.offsetWidth){
        left=document.documentElement.clientWidth-oDiv.offsetWidth;
      }
      //判斷上邊是否過界
      if(right<0){
        right=0;
      }
      //判斷下邊是否過界
      else if(right>document.documentElement.clientHeight){
        right=document.documentElement.clientHeight-oDiv.offsetHeight;
      }
      oDiv.style.left=left+"px";
      oDiv.style.top=right+"px";
    }   
    document.onmouseup=function(){
      //清空document的事件
      document.onmousemove=null;
      document.onmouseup=null;
    }
  }
}
</script>
</head>
<body>
<div id="antzone"></div>
</body>
</html>

上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。

一.程式碼註釋:

(1).window.onload=function(){},當文件內容完全載入完畢再去執行函式中的程式碼。

(2).var oDiv=document.getElementById("antzone"),獲取元素物件。

(3).var x=0,宣告一個變數x,並賦值為0。

(4).var y=0,宣告一個變數y,並賦值為0。

(5).oDiv.onmousedown=function(ev){},為div元素註冊onmousedown事件處理函式。

(6).var oEvent=ev||event,獲取相容所有主流瀏覽器的事件物件。

(7).x=oEvent.clientX-oDiv.offsetLeft,獲取當按下滑鼠鍵的時候,滑鼠指標所在位置距離div元素左側的距離。

(8).y=oEvent.clientY-oDiv.offsetTop,獲取當按下滑鼠鍵的時候,滑鼠指標所在位置距離div元素上側的距離。

(9).document.onmousemove=function(ev){},為文件註冊onmousemove事件處理函式,之所以註冊在文件上是為了防止,滑鼠離開div範圍,導致拖動無效的情況。

(10).var oEvent=ev||event,獲取相容所有瀏覽器的事件物件。

(11).var left=oEvent.clientX-x,計算出拖動時div元素左側距離瀏覽器客戶區左側的距離。

(12).var right=oEvent.clientY-y,計算出拖動時div元素上不距離瀏覽器客戶區上冊的距離。

(13).if(left<0){

  left=0;

},判斷是否小於0,如果小於0就設定為0,防止拖動超出瀏覽器客戶區左側。

(14).else if(left>document.documentElement.clientWidth-oDiv.offsetWidth){

  left=document.documentElement.clientWidth-oDiv.offsetWidth;

},這個是為了防止超出瀏覽器客戶區右側。

(15).document.onmouseup=function(){

  //清空document的事件

  document.onmousemove=null;

  document.onmouseup=null;

},解綁事件處理函式。

二.相關閱讀:

(1).onmousedown時間可以參閱javascript mousedown事件一章節。

(2).var oEvent=ev||event可以參閱var ev=window.event||ev的作用是什麼一章節。

(3).clientX可以參閱javascript clientX一章節。

(4).offsetLeft可以參閱js offsetLeft一章節。

(5).clientWidth可以參閱clientWidth一章節。

(6).offsetWidth可以參閱js offsetWidth一章節。

相關文章