jquery实现简单拖拽效果

要使用jQuery实现简单的拖拽效果,可以依次完成以下步骤:

  1. 给需要拖拽的元素添加事件监听器

可以使用jQuery的on()函数给目标元素添加mousedown事件监听器,触发时执行处理函数。在处理函数中,可以设置一些拖拽所需的状态,例如记录当前元素的位置等。

例如,下面的示例中,给#draggable元素添加mousedown事件监听器,触发时记录下当前鼠标位置startXstartY,以及元素初始位置initialPos

$('#draggable').on('mousedown', function(e) {
  var startX = e.pageX;
  var startY = e.pageY;
  var initialPos = $(this).position();
});
  1. 随着鼠标移动,修改元素位置

mousedown事件监听器中,可以添加mousemove事件监听器,触发时修改元素的位置。获取到当前鼠标的位置curXcurY后,可以计算出新的元素位置newPos,并使用css()函数将元素移动到新位置。

例如,下面的示例中,利用上面记录的信息,根据鼠标移动的距离计算出目标元素的新位置,然后使用css()函数将元素移到新位置。

$('#draggable').on('mousemove', function(e) {
  var curX = e.pageX;
  var curY = e.pageY;
  var deltaX = curX - startX;
  var deltaY = curY - startY;
  var newPos = {
    left: initialPos.left + deltaX,
    top: initialPos.top + deltaY
  };
  $(this).css(newPos);
});
  1. 结束拖拽

当鼠标抬起时,需要清理掉之前添加的事件监听器,结束拖拽。

例如,下面的示例中,给目标元素添加mouseup事件监听器,在处理函数中清理掉之前添加的事件监听器。

$('#draggable').on('mouseup', function(e) {
  $(this).off('mousemove');
});

完整的代码示例如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>jQuery拖拽示例</title>
  <style>
  #draggable {
    position: absolute;
    width: 100px;
    height: 100px;
    background: #9ee;
  }
  </style>
</head>
<body>
  <div id="draggable"></div>

  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <script>
  // 给目标元素添加mousedown事件监听器
  $('#draggable').on('mousedown', function(e) {
    var startX = e.pageX;
    var startY = e.pageY;
    var initialPos = $(this).position();

    // 给目标元素添加mousemove事件监听器
    $(this).on('mousemove', function(e) {
      var curX = e.pageX;
      var curY = e.pageY;
      var deltaX = curX - startX;
      var deltaY = curY - startY;
      var newPos = {
        left: initialPos.left + deltaX,
        top: initialPos.top + deltaY
      };
      $(this).css(newPos);
    });

    // 给目标元素添加mouseup事件监听器
    $(this).on('mouseup', function() {
      $(this).off('mousemove');
    });
  });
  </script>
</body>
</html>

实际应用中,可以根据需要添加一些限制,例如限制拖拽的范围、增加拖拽边界等。下面是一些示例:

  1. 限制拖拽范围:可以利用元素的最大最小坐标值来限制拖拽范围。例如,假设目标元素不得超出其父元素的可视区域,可以像下面这样修改上面的代码:
  // 给目标元素添加mousemove事件监听器
  $(this).on('mousemove', function(e) {
    var curX = e.pageX;
    var curY = e.pageY;
    var deltaX = curX - startX;
    var deltaY = curY - startY;
    var newPos = {
      left: initialPos.left + deltaX,
      top: initialPos.top + deltaY
    };
    var parent = $(this).parent();
    var maxX = parent.width() - $(this).width();
    var maxY = parent.height() - $(this).height();
    newPos.left = Math.min(Math.max(newPos.left, 0), maxX);
    newPos.top = Math.min(Math.max(newPos.top, 0), maxY);
    $(this).css(newPos);
  });
  1. 增加拖拽边界:可以在拖拽时,给目标元素添加一些边界效果。例如,拖拽时目标元素被按下的位置有一定的偏移,拖拽过程中也有一定的边界效果。下面是一个示例:
  var boundaryOffset = 5;
  var boundarySensitivity = 10;
  $(this).addClass('dragging');
  // 移除已有的mousemove和mouseup事件监听器
  $(this).off('mousemove').off('mouseup');
  $(document).on('mousemove.dragging', function(e) {
    var curX = e.pageX;
    var curY = e.pageY;
    var deltaX = curX - startX;
    var deltaY = curY - startY;
    var newPos = {
      left: initialPos.left + deltaX,
      top: initialPos.top + deltaY
    };
    var parent = $(drag).parent();
    var maxX = parent.width() - $(drag).width();
    var maxY = parent.height() - $(drag).height();

    // 添加边界效果
    if (newPos.left < boundaryOffset) {
      newPos.left = boundaryOffset;
    } else if (newPos.left > maxX - boundaryOffset) {
      newPos.left = maxX - boundaryOffset;
    } else if (deltaX > boundarySensitivity || deltaX < -boundarySensitivity || deltaY > boundarySensitivity || deltaY < -boundarySensitivity) {
      $('.bg-cover').css('opacity', '0.5');
    }
    if (newPos.top < boundaryOffset) {
      newPos.top = boundaryOffset;
    } else if (newPos.top > maxY - boundaryOffset) {
      newPos.top = maxY - boundaryOffset;
    }
    $(drag).css(newPos);
    return false;
  }).on('mouseup.dragging', function() {
    $(drag).removeClass('dragging');
    $('.bg-cover').css('opacity', '0');
    $(document).off('.dragging');
    $(drag).off('mousemove');
  });

在这个例子中,给目标元素添加了一个dragging类,当元素被拖拽时增加该类,移动和抬起鼠标时移除该类。同时,给document对象添加新的mousemovemouseup事件监听器来绑定拖拽效果,这些监听器只在目标元素需要被拖拽的时候才会生效。在移动过程中,通过设置偏移量和敏感度来添加边界效果,当偏移量超过一定值时,顶部添加一个半透明覆盖层。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery实现简单拖拽效果 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 详谈jQuery.load()和Jsp的include的区别

    当我们需要在一个页面中引入另一个页面中的某些部分时,常用的方案是使用 jQuery.load() 或者 JSP 的 include 功能。那么它们之间有什么区别呢? 区别1:请求方式 jQuery.load() jQuery.load() 方法是使用 AJAX 方法点击链接或提交表单时,从服务器返回数据并插入到一个指定的 HTML 元素中。 jQuery.l…

    jquery 2023年5月27日
    00
  • 浅谈jQuery中setInterval()方法

    浅谈jQuery中setInterval()方法 什么是setInterval()方法 setInterval()方法是jQuery中的定时器函数,用于在指定的时间间隔内重复执行一个函数。该方法可以用于实现动画效果、轮播图、定时获取数据等场景。 语法: var intervalId = setInterval(fn, delay); intervalId:计…

    jquery 2023年5月28日
    00
  • 超详细讲解Java秒杀项目登陆模块的实现

    超详细讲解Java秒杀项目登陆模块的实现 在Java秒杀项目中,登陆模块是非常重要的一部分。本文将详细讲解如何实现Java秒杀项目的登陆模块。 确定登陆方式 在实现登陆模块之前,我们需要确定登陆方式。Java秒杀项目通常有三种登陆方式: 普通用户账号密码登陆 手机号短信验证登陆 第三方账号登陆 本文以普通用户账号密码登陆为例介绍登陆模块的实现。 实现登陆接口…

    jquery 2023年5月27日
    00
  • jQuery.prop() 使用详解

    jQuery.prop() 使用详解 介绍 jQuery.prop() 方法用于设置或返回元素的属性值,是使用 jQuery 操作 DOM 元素的一种常用方法。 和 jQuery.attr() 方法不同的是,jQuery.prop() 只对 property 属性进行读写操作,不涉及 HTML attribute 属性,这也是两个方法的主要区别。 语法 $(…

    jquery 2023年5月27日
    00
  • 概述jQuery的元素筛选

    概述jQuery的元素筛选是在处理DOM元素时,筛选出指定的元素。这个过程非常简单,只需要在选择器后添加 : 运算符和对应的筛选器即可,该筛选器筛选范围是选择器所选元素的子元素。下面以两个示例来讲解该过程: 示例1: 假设我们有HTML代码如下所示: <div class="parent"> <div class=&qu…

    jquery 2023年5月28日
    00
  • jQuery EasyUI API 中文文档 – TimeSpinner时间微调器

    我可以为你详细讲解“jQuery EasyUI API 中文文档 – TimeSpinner时间微调器”的完整攻略。TimeSpinner时间微调器是EasyUI提供的一个时间选择工具,可以方便地进行时间选择和微调。下面是完整攻略的内容: 1. 引入EasyUI库文件 在使用TimeSpinner之前,需要先引入EasyUI库文件,可以通过CDN或下载文件到…

    jquery 2023年5月28日
    00
  • jQWidgets jqxTreeGrid beginUpdate()方法

    jQWidgets jqxTreeGrid beginUpdate() 方法 jqxTreeGrid 是 jQWidgets 提供的一个树形表格组件,它可以展示层级结构的数据支持多种交互。jqxTreeGrid 提供了 beginUpdate() 方法,用于开始更新。 beginUpdate() 方法 beginUpdate() 方法用于开始更新。该方法没有…

    jquery 2023年5月11日
    00
  • jQWidgets jqxDropDownButton dropDownHorizontalAlignment属性

    jQWidgets jqxDropDownButton dropDownHorizontalAlignment属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI组件和工具,包括表格、日历、下拉菜单等。jqxDropButton是jQWidgets中的一个组件,用于创建下拉菜单按钮。dropDownHorizontalAlignmen…

    jquery 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部