一个使用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>

 

posted @ 2012-12-23 18:15  iamshf  阅读(4863)  评论(6编辑  收藏  举报