jQuery使用drag效果实现自由拖拽div

 更新时间:2015年06月11日 11:29:30   投稿:hebedich  
本文给大家分享一款jquery实现的完美拖拽(拖动div层效果),如果你正在找这类效果不妨进入参考一下。

偶然间看到了以前做的一个简洁的div拖拽效果,修改了一下加点注释,经测试完美通过firefox/chrome/ie6-11,现拿来分享一下。

先说一下实现原理及要点,最主要的有三步。第一步是mousedown事件,鼠标mousedown的时候记录此时的鼠标X轴和Y轴以及拖拽框的left和top,并且给拖拽标记赋值true,代表拖拽动作就绪。第二步是mousemove事件,此时动态获取鼠标的X轴和Y轴,然后计算出来拖拽框新的left和top并赋值使其实现拖拽效果。第三步是mouseup事件,鼠标弹起时给拖拽标记赋值false,拖拽动作完成。

html代码如下:

<div class="divWrap" id="move1" style="width: 200px; height: 200px; background: Green; border: 1px solid red; position: absolute; top: 100px; left: 100px; cursor: move; -moz-user-select: none; -webkit-user-select: none;"></div>
<div class="divWrap" style="width: 200px; height: 200px; background: brown; border: 1px solid red; position: absolute; top: 300px; left: 100px;">
  <h3 id="move2" style="height: 45px; line-height: 45px; font-size: 18px; background: red; margin: 0; cursor: move; -moz-user-select: none; -webkit-user-select: none;">Title--Move</h3>
</div>

js代码如下:

(function($) {
  $.fn.dragDiv = function(divWrap) {
    return this.each(function() {
      var $divMove = $(this);//鼠标可拖拽区域
      var $divWrap = divWrap ? $divMove.parents(divWrap) : $divMove;//整个移动区域
      var mX = 0, mY = 0;//定义鼠标X轴Y轴
      var dX = 0, dY = 0;//定义div左、上位置
      var isDown = false;//mousedown标记
      if(document.attachEvent) {//ie的事件监听,拖拽div时禁止选中内容,firefox与chrome已在css中设置过-moz-user-select: none; -webkit-user-select: none;
        $divMove[0].attachEvent('onselectstart', function() {
          return false;
        });
      }
      $divMove.mousedown(function(event) {
        var event = event || window.event;
        mX = event.clientX;
        mY = event.clientY;
        dX = $divWrap.offset().left;
        dY = $divWrap.offset().top;
        isDown = true;//鼠标拖拽启动
      });
      $(document).mousemove(function(event) {
        var event = event || window.event;
        var x = event.clientX;//鼠标滑动时的X轴
        var y = event.clientY;//鼠标滑动时的Y轴
        if(isDown) {
          $divWrap.css({"left": x - mX + dX, "top": y - mY + dY});//div动态位置赋值
        }
      });
      $divMove.mouseup(function() {
        isDown = false;//鼠标拖拽结束
      });
    });
  };
})(jQuery);
//
$(document).ready(function() {
  $("#move1").dragDiv();//拖拽整个div
  $("#move2").dragDiv(".divWrap");//拖拽div头部
});

最后要说明一下,在开始拖拽动作之前,要禁止选中内容,否则影响拖拽效果。firefox和chrome可以通过css来设置:{-moz-user-select: none; -webkit-user-select: none;},ie本来也可以直接在html里写一个onselectstart="return false",但似乎chrome受了点影响,所以决定取消这个写法,然后在js里为ie浏览器写一个onselectstart事件。

这个小插件只是简单实现拖拽效果,但兼容性很好,里面也用到了一些知识点和技巧。当然也可以借助这个插件或里面的思想继续扩展,写一个比较完善的拖拽插件(如:Draggable和Droppable)。

以上所述就是本文的全部内容了,希望大家能够喜欢。

相关文章

  • jquery使用经验小结

    jquery使用经验小结

    本文给大家分享的是个人在使用jQuery的过程中总结的5点比较重要的知识点,这里推荐给小伙伴们,有需要的童鞋可以参考下。
    2015-05-05
  • jquery检测上传文件大小示例

    jquery检测上传文件大小示例

    这篇文章主要介绍了jquery检测上传文件大小,结合完整示例形式分析了jquery针对上传文件大小检测与计算相关操作技巧,需要的朋友可以参考下
    2020-04-04
  • jQuery基础语法实例入门

    jQuery基础语法实例入门

    这篇文章主要介绍了jQuery基础语法,以实例形式分析了jQuery的对象以及针对对象进行的操作用法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • 轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)

    轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)

    这篇文章主要帮助大家轻松学习jQuery插件EasyUI,针对EasyUI实现树形网络基本操作,分为三大方面:动态加载、添加分页、以及惰性加载节点,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • jQuery.clean使用方法及思路分析

    jQuery.clean使用方法及思路分析

    jQuery.clean源码分析包括:jQuery.clean使用方法、思路分析及源码注释分析感兴趣的朋友可以参考下
    2013-01-01
  • JQuery自定义事件的应用 JQuery最佳实践

    JQuery自定义事件的应用 JQuery最佳实践

    本文主要介绍JQuery框架里面支持的自定义事件模型,通过实例说明什么时候可以利用事件模型进行面向对象的JS编程,以及利用“带命名空间的事件处理函数”来避免unbind时影响别的事件订阅。
    2010-08-08
  • jquery实现多条件筛选特效代码分享

    jquery实现多条件筛选特效代码分享

    这篇文章主要介绍了jquery实现多条件筛选特效,推荐给大家,有需要的小伙伴可以参考下。
    2015-08-08
  • jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单

    jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单

    这篇文章主要介绍了jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单,可实现页面向下滑动后导航栏横向悬浮并固定在顶部的功能,涉及jQuery事件响应及页面元素属性动态修改相关操作技巧,需要的朋友可以参考下
    2016-09-09
  • jQuery实现的跨容器无缝拖动效果代码

    jQuery实现的跨容器无缝拖动效果代码

    这篇文章主要介绍了jQuery实现的跨容器无缝拖动效果代码,可实现容器的任意添加与拖动功能,涉及jQuery UI插件的使用技巧,需要的朋友可以参考下
    2016-06-06
  • 手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效

    手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效

    这篇文章主要介绍了手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效的相关资料,这里附有实现代码及实现效果图,需要的朋友可以参考下
    2016-12-12

最新评论