一個使用Jquery寫的一個鼠標拖動效果


      近日項目中要做一個鼠標拖拽層的效果,於是手動使用Jquery做了一個,發出來跟大伙兒分享一下,並希望能得到高手的指點,如果哪位大俠覺得我的思路和代碼不正確或者需要改進的話,希望能指點一二,在下感激不盡。

     我的思路是這樣的:

     1、在鼠標按下的時候,捕獲鼠標的當前位置;

     2、得到要移動對象的當前位置信息;

     3、鼠標移動時,計算鼠標移動的距離,將這個距離更新到對象的位置,在我的代碼中,我試用絕對定位來表示對象的位置;

     4、當鼠標移出對象或者鼠標彈起的時候,則認為對象處於不能移動的狀態。這個在我的代碼中使用一個bool類型的變量isMouseDown表示,當這個變量為true的時候,則說明對象處於可移動狀態,如果為false的時候,表示對象處於不可移動狀態。鼠標移出對象或者彈出的時候,就將isMouseDown置為false。

    好了,思路就是這樣,下面將代碼貼出來,如果我的思路中表達的不清楚的話,可以在代碼中看出來:

    注:依照樓下的建議調整了一下代碼,基本上兼容瀏覽器,但是鼠標移動太快的時候就會出現不能移動,這一點如果有哪位大俠知道的話還請指點一下

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2  <html xmlns="http://www.w3.org/1999/xhtml" >
 3  <head>
 4      <title>使用鼠標拖動層代碼</title>
 5      <style type="text/css">
 6          #Main
 7          {
 8              width:400px;
 9              height:400px;
10              position:absolute;
11              top:10px;
12              left:0;
13              border:1px solid #CCC;
14              border-radius:5px;
15              background-color:Green;
16          }
17          h3
18          {
19              margin:0;
20              width:400px;
21              height:40px;
22              background-color:Gray;
23              cursor:move;
24              line-height:40px;
25              border-radius:5px 5px 0 0;
26          }
27      </style>
28      <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
29      <script type="text/javascript">
30          //注冊一個Jquery的鼠標拖動函數,參數為要拖動的對象
31          $.fn.extend({ SliderObject: function (objMoved) {
32              var mouseDownPosiX;
33              var mouseDownPosiY;
34              var InitPositionX;
35              var InitPositionY;
36              var obj = $(objMoved) == undefined ? $(this) : $(objMoved);
37              $(this).mousedown(function (e) {
38                  //當鼠標按下時捕獲鼠標位置以及對象的當前位置
39                  mouseDownPosiX = e.pageX;
40                  mouseDownPosiY = e.pageY;
41 
42                  InitPositionX = obj.css("left").replace("px", "");
43                  InitPositionY = obj.css("top").replace("px", "");
44                  obj.mousemove(function (e) {//這個地方改成$(document).mousemove貌似可以避免因鼠標移動太快而失去焦點的問題
45                      //貌似只有IE支持這個判斷,Chrome和Firefox還沒想到好的辦法
46                      //if ($(this).is(":focus")) {
47                          var tempX = parseInt(e.pageX) - parseInt(mouseDownPosiX) + parseInt(InitPositionX);
48                          var tempY = parseInt(e.pageY) - parseInt(mouseDownPosiY) + parseInt(InitPositionY);
49                          obj.css("left", tempX + "px").css("top", tempY + "px");
50                      //};
51                      //當鼠標彈起或者離開元素時,將鼠標彈起置為false,不移動對象
52                  }).mouseup(function () {
53                      obj.unbind("mousemove");
54                  }).mouseleave(function () {
55                      obj.unbind("mousemove");
56                  });
57              })
58          }
59          });
60      $(document).ready(function () {
61          $("h3").SliderObject($("#Main"));
62      })
63      </script>
64  </head>
65  <body>
66      <div id="Main">
67          <h3>鼠標放在這里拖動我</h3>
68          <div id="Container">可以使用鼠標拖動的層</div>
69      </div>
70  </body>
71  </html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM