1. 程式人生 > >javascript--滑鼠拖拽視窗案例(滑鼠按下,在滑鼠移動過程中,盒子跟著一起移動,滑鼠鬆開,盒子停止移動)

javascript--滑鼠拖拽視窗案例(滑鼠按下,在滑鼠移動過程中,盒子跟著一起移動,滑鼠鬆開,盒子停止移動)

介面如圖所示:

要求:在“資訊註冊”欄,按下滑鼠,然後滑鼠在頁面移動,在滑鼠移動過程中,該視窗跟著滑鼠移動,當滑鼠鬆開的時候,視窗停止移動。點選“關閉”,該視窗隱藏。

實現思路:

1.頁面結構分析:一個大盒子d-box來確定位置,裡面放一個小盒子drop(存放“註冊資訊(可以拖拽”文字和span標籤,span存放“關閉”,id為box_close),滑鼠在drop中按下,移動時候d-box跟著移動。

2.實現分析:

   2.1 獲取滑鼠在盒子中的位置。通過滑鼠在頁面中的位置-盒子在頁面的位置實現

       ①滑鼠在頁面的位置實現程式碼:

       var x=e.pageX || e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft); 

       var y=e.pageY || e.clientY + (document.body.scrollTop || document.documentElement.scrollTop); 

  ②盒子在頁面中位置實現程式碼:

    var

box_x=box.offsetLeft; 

    var box_y=box.offsetTop; 

  ③滑鼠在盒子中的位置實現程式碼:

    var mouse_in_box_x=x-box_x; 

    var mouse_in_box_y=y-box_y; 

  2.2 獲取滑鼠移動時盒子移動的位置。通過滑鼠移動時,滑鼠在頁面的位置-滑鼠在盒子中的位置實現。

    ①滑鼠在頁面的位置

      

var x=e.pageX || e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft); 

      var y=e.pageY || e.clientY + (document.body.scrollTop || document.documentElement.scrollTop); 

  ②滑鼠移動時盒子移動的位置程式碼實現:

   var boxX=x-mouse_in_box_x; 

      var boxY=y-mouse_in_box_y; 

   2.3 給盒子樣式賦值

   box.style.left=boxX+'px';

      box.style.top=boxY+'px'; 

3.注意:

①要移動的盒子,其pisition必須賦值,absolute或者relative,必須使其脫離文件流才能移動

②給盒子樣式賦值時,一定要注意不能丟掉px單位

③事件物件e,位置e.pageX,滾動條滾動距離的相容性。以前的博文裡面有記錄,完整程式碼中也做了處理。

完整程式碼如下:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>滑鼠拖拽案例</title>
 6         
 7         <style type="text/css">
 8             *{
 9                 margin: 0px;
10                 padding: 0px;
11             }
12             
13             .d-box{
14                 width: 400px;
15                 height: 300px;
16                 border: 5px solid #eee;
17                 box-shadow: 2px 2px 2px 2px #666;
18                 position: absolute;
19                 top: 40%;
20                 left: 40%;
21                 background-color: white;
22             }
23             
24             .hd{
25                 height: 25px;
26                 background-color: #7c9299;
27                 color: white;
28                 line-height: 25px;
29                 cursor: move;
30                 border-bottom: 1px solid #369;
31             }
32             #box_close{
33                 float: right;
34                 cursor: pointer;
35             }
36         </style>
37     </head>
38     <body>
39         <div id="d-box" class="d-box">
40             <div id="drop" class="hd">註冊資訊(可以拖拽)
41                 <span id="box_close">【關閉】</span>
42             </div>
43         </div>
44         
45         <!-- 插入JS程式碼 -->
46         <script type="text/javascript">
47             /****************************盒子拖拽功能********************************/ 
48             //點選拖拽的“註冊資訊欄”,拖動整個盒子的移動。首先獲得要拖拽的盒子
49             var box=document.getElementById('d-box');
50             var drop=document.getElementById('drop');
51             drop.onmousedown=function(e){
52                 e = e || window.event;
53                 //當滑鼠按下的時候,獲得滑鼠在盒子中的位置
54                 //滑鼠在盒子中的位置=滑鼠在頁面中的位置-盒子在頁面的位置
55                 //滑鼠在頁面中的位置
56                 var x=e.pageX || e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);
57                 var y=e.pageY || e.clientY + (document.body.scrollTop || document.documentElement.scrollTop);
58                 
59                 //盒子在頁面中的位置
60                 var box_x=box.offsetLeft;
61                 var box_y=box.offsetTop;
62                 //滑鼠在盒子中的位置
63                 var mouse_in_box_x=x-box_x;
64                 var mouse_in_box_y=y-box_y;
65                 
66                 //註冊滑鼠移動事件,因為滑鼠按下後,在頁面移動,盒子跟著移動
67                 document.onmousemove=function(e){
68                     e = e || window.event;
69                     //滑鼠在頁面中移動時,求盒子的座標
70                     //滑鼠移動時盒子移動位置=滑鼠當前位置-滑鼠在盒子中移動的距離
71                      x=e.pageX || e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);
72                      y=e.pageY || e.clientY + (document.body.scrollTop || document.documentElement.scrollTop);
73                     
74                     var boxX=x-mouse_in_box_x;
75                     var boxY=y-mouse_in_box_y;
76                     //px一定不能忘
77                     box.style.left=boxX+'px';
78                     box.style.top=boxY+'px';
79                 }
80             }
81             
82             //當滑鼠彈起時,移出滑鼠移動事件
83             drop.onmouseup=function(){
84                 document.onmousemove=null;
85             }
86             
87             //點選關閉盒子,隱藏盒子
88             var box_close=document.getElementById('box_close');
89             box_close.onclick=function(){
90                 box.style.display='none';
91             }
92         </script>
93     </body>
94 </html>