• 一个使用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>
    这是我的个人博客(https://www.fenghome.top),欢迎大家没事常来转转
  • 相关阅读:
    IO之同步、异步、阻塞、非阻塞 (2)
    IO之同步、异步、阻塞、非阻塞
    Syncthing源码解析
    Syncthing源码解析
    在Gogland里对GO程序进行单元测试!
    GO学习笔记
    GO学习笔记
    GO学习笔记
    GO学习笔记
    GO学习笔记
  • 原文地址:https://www.cnblogs.com/iamshf/p/2830118.html
Copyright © 2020-2023  润新知