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日

相关文章

  • javascript实现简单的ajax封装示例

    下面是关于“javascript实现简单的ajax封装示例”的完整攻略。 什么是Ajax Ajax(Asynchronous JavaScript and XML)指异步地使用JavaScript进行XMLHttpRequest(XHR)的一套技术方案。通过Ajax,我们可以在当前页面无需刷新的情况下向服务器发起请求并获取数据,从而更新页面展示。 实现Aja…

    jquery 2023年5月27日
    00
  • jquery.post用法之type设置问题

    下面就是关于”jquery.post用法之type设置问题”的完整攻略,包括了基本概念、使用方法、以及示例说明。 什么是type? type(即HTTP请求方法)是jQuery中ajax方法中的一个参数,用于指定HTTP请求的类型。type的取值包括GET、POST、PUT等常见的HTTP请求方法。 举个例子,我们通常使用GET请求来获取服务器端的数据,使用…

    jquery 2023年5月27日
    00
  • jQuery简介

    jQuery简介 什么是jQuery jQuery是一种JavaScript库,可以简化常见的任务,如对HTML文档进行操作、处理事件、创建动画效果和处理AJAX请求等。jQuery可以让JavaScript代码更短、更简洁,并且减少了不同浏览器之间的差异。 安装jQuery 要使用jQuery,首先需要引用jQuery库文件。您可以通过以下方式引入jQue…

    jquery 2023年5月12日
    00
  • jquery中动态效果小结

    jQuery中动态效果小结 在jQuery中,可以通过使用不同的方法和函数来实现网页中的动态效果,比如隐藏或显示元素、动态添加内容和样式、修改网页布局等等。本文将对jQuery中的一些常见动态效果进行简要介绍,并给出具体示例。 隐藏和显示元素 .show() 和 .hide() 可以使用show()和hide()方法来分别显示和隐藏页面上的元素。这些方法可以…

    jquery 2023年5月28日
    00
  • jQWidgets jqxTabs closeButtonSize 属性

    下面我将为你详细讲解一下“jQWidgets jqxTabs closeButtonSize 属性”的完整攻略。 概述 closeButtonSize 是jqxTabs组件的一个属性,用于设置分页标签上关闭按钮的大小。该属性的默认值为 18。 语法 下面是closeButtonSize属性的语法: $("#jqxTabs").jqxTab…

    jquery 2023年5月12日
    00
  • js实现图片上传到服务器和回显

    首先,需要了解图片上传到服务器和回显的基本过程: 前端通过<input type=”file”>标签选择文件并上传到服务器; 服务器将文件存储到指定目录下,并返回图片在服务器的存储路径; 前端通过获取服务器返回的图片路径,并将其作为<img>标签的src属性值,即可实现图片的回显。 接下来,我们将分步骤讲解如何通过JS实现图片上传到服…

    jquery 2023年5月28日
    00
  • jquery和js实现对div的隐藏和显示方法

    介绍jquery和js实现对div的隐藏和显示方法的攻略如下: 使用js对div隐藏和显示的方法 1.使用style属性来操作div的样式 style属性可以获取和设置元素的样式属性。如果要通过js设置元素的样式属性,可以使用该属性。 隐藏元素 可以通过设置style属性的display属性为“none”来将元素隐藏。 document.getElement…

    jquery 2023年5月27日
    00
  • 如何使用jQuery Mobile创建左侧定位的图标选择

    以下是使用jQuery Mobile创建左侧定位的图标选择的完整攻略: 首先,需要在HTML文件中引入jQuery Mobile库。可以通过以下代码实现: <head> <meta name="viewport" content="width=device-width, initial-scale=1&quot…

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