jquery拖拽效果完整实例(附demo源码下载)

下面是详细讲解“jquery拖拽效果完整实例(附demo源码下载)”的攻略:

1. 简介

此篇攻略是介绍如何使用 jQuery 实现拖拽效果的教程,旨在帮助初学者理解 jQuery 中的基本操作和拖拽效果的实现细节。完整实例中所用的 demo 源码下载资源需要自行查找并下载。

2. 操作步骤

步骤一:引入样式表和脚本

首先,在 HTML head 标签中引入样式表和 jQuery 脚本:

<head>
    <link rel="stylesheet" href="style.css">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>

步骤二:创建元素并设置样式

然后,我们创建一个 div 元素,并设置它的样式:

<body>
    <div id="drag" class="drag">拖我拖我</div>
</body>
.drag {
    width: 80px;
    height: 80px;
    background-color: #f00;
    color: #fff;
    text-align: center;
    line-height: 80px;
    border-radius: 50%;
    cursor: move;
}

步骤三:绑定拖拽事件

接下来,我们通过 jQuery 将拖拽事件绑定到这个 div 元素上:

$('#drag').mousedown(function(event) {
    var startX = event.clientX;
    var startY = event.clientY;

    var dragElement = $(this).get(0); // 当前需要拖拽的元素

    var startLeft = parseInt(dragElement.style.left) || 0;
    var startTop = parseInt(dragElement.style.top) || 0;

    var disX = startX - startLeft;
    var disY = startY - startTop;

    $(document).mousemove(function(event) {
        var endX = event.clientX;
        var endY = event.clientY;

        var left = endX - disX;
        var top = endY - disY;

        dragElement.style.left = left + 'px';
        dragElement.style.top = top + 'px';
    });

    $(document).mouseup(function() {
        $(this).off('mousemove');
    });
});

解析:
- 上面的代码中,我们为 div 元素添加了鼠标按下事件处理函数(mousedown),在该处理函数中,我们获取鼠标按下时的位置,并记录当前 div 元素的当前位置;
- 接下来,我们为整个文档添加鼠标移动事件处理函数(mousemove),在该处理函数中,我们获取当前鼠标位置,计算出 div 元素应该移动的距离,并调整 div 元素的 left 和 top 样式,实现了拖拽效果;
- 最后,我们为整个文档添加鼠标松开事件处理函数(mouseup),在该处理函数中关闭鼠标移动事件处理函数,终止拖拽效果。

步骤四:完成

好了,到此为止,我们就实现了用 jQuery 实现拖拽效果的基本操作,整个实例代码示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery拖拽效果完整实例</title>
    <link rel="stylesheet" href="style.css">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
    <div id="drag" class="drag">拖我拖我</div>
    <script>
        $('#drag').mousedown(function(event) {
            var startX = event.clientX;
            var startY = event.clientY;

            var dragElement = $(this).get(0); // 当前需要拖拽的元素

            var startLeft = parseInt(dragElement.style.left) || 0;
            var startTop = parseInt(dragElement.style.top) || 0;

            var disX = startX - startLeft;
            var disY = startY - startTop;

            $(document).mousemove(function(event) {
                var endX = event.clientX;
                var endY = event.clientY;

                var left = endX - disX;
                var top = endY - disY;

                dragElement.style.left = left + 'px';
                dragElement.style.top = top + 'px';
            });

            $(document).mouseup(function() {
                $(this).off('mousemove');
            });
        });
    </script>
</body>
</html>

3. 示例说明

示例一:实现拖拽只在固定区域内

有些时候,我们希望拖拽只在固定区域内进行,这个时候,我们可以新增一个 div 元素作为限制区域,并将拖拽元素放入该区域中。

下面是示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery拖拽效果完整实例</title>
    <link rel="stylesheet" href="style.css">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
    <div class="wrap">
        <div class="drag-wrap">
            <div id="drag" class="drag">拖我拖我</div>
        </div>
    </div>
    <script>
        $('#drag').mousedown(function(event) {
            var startX = event.clientX;
            var startY = event.clientY;

            var dragElement = $(this).get(0); // 当前需要拖拽的元素

            var startLeft = parseInt(dragElement.style.left) || 0;
            var startTop = parseInt(dragElement.style.top) || 0;

            var disX = startX - startLeft;
            var disY = startY - startTop;
            var maxX = $('.drag-wrap').get(0).offsetWidth - dragElement.offsetWidth;
            var maxY = $('.drag-wrap').get(0).offsetHeight - dragElement.offsetHeight;

            $(document).mousemove(function(event) {
                var endX = event.clientX;
                var endY = event.clientY;

                var left = endX - disX;
                var top = endY - disY;

                left = left < 0 ? 0 : (left > maxX ? maxX : left);
                top = top < 0 ? 0 : (top > maxY ? maxY : top);

                dragElement.style.left = left + 'px';
                dragElement.style.top = top + 'px';
            });

            $(document).mouseup(function() {
                $(this).off('mousemove');
            });
        });
    </script>
</body>
</html>

示例二:实现拖拽松手自动吸附到指定位置

有时候,我们希望在拖拽松手后,元素自动吸附到指定位置,实现类似拖拽排序的效果。

下面是示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery拖拽效果完整实例</title>
    <link rel="stylesheet" href="style.css">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
    <div class="wrap">
        <div class="drag-wrap">
            <div id="drag" class="drag">拖我拖我</div>
        </div>
    </div>
    <script>
        $('#drag').mousedown(function(event) {
            var startX = event.clientX;
            var startY = event.clientY;

            var dragElement = $(this).get(0); // 当前需要拖拽的元素

            var startLeft = parseInt(dragElement.style.left) || 0;
            var startTop = parseInt(dragElement.style.top) || 0;

            var disX = startX - startLeft;
            var disY = startY - startTop;

            var maxX = $('.drag-wrap').get(0).offsetWidth - dragElement.offsetWidth;
            var maxY = $('.drag-wrap').get(0).offsetHeight - dragElement.offsetHeight;

            $(document).mousemove(function(event) {
                var endX = event.clientX;
                var endY = event.clientY;

                var left = endX - disX;
                var top = endY - disY;

                left = left < 0 ? 0 : (left > maxX ? maxX : left);
                top = top < 0 ? 0 : (top > maxY ? maxY : top);

                dragElement.style.left = left + 'px';
                dragElement.style.top = top + 'px';
            });

            $(document).mouseup(function() {
                $(this).off('mousemove');

                var endLeft = parseInt(dragElement.style.left) || 0;
                var endTop = parseInt(dragElement.style.top) || 0;

                var diffX = endLeft - startLeft;
                var diffY = endTop - startTop;

                if (Math.abs(diffX) > 80 || Math.abs(diffY) > 80) {
                    // 自动吸附到指定位置
                    if (diffX > 0) {
                        endLeft = maxX;
                    } else if (diffX < 0) {
                        endLeft = 0;
                    }

                    if (diffY > 0) {
                        endTop = maxY;
                    } else if (diffY < 0) {
                        endTop = 0;
                    }

                    dragElement.style.left = endLeft + 'px';
                    dragElement.style.top = endTop + 'px';
                }
            });
        });
    </script>
</body>
</html>

4. 总结

通过上面的攻略,我们实现了用 jQuery 实现拖拽效果的基本操作,并通过两个示例说明,让我们更深入的理解了拖拽效果的实现原理和细节。

好了,这就是本篇攻略的全部内容,希望对大家有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery拖拽效果完整实例(附demo源码下载) - Python技术站

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

相关文章

  • 基于jQuery实现网页进度显示插件

    实现网页进度显示插件的方法有很多,其中基于jQuery的实现是比较常见的一种。下面是具体的实现攻略: 步骤一:编写HTML模板 首先需要编写一个HTML模板,用于展示进度条等内容。代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset…

    jquery 2023年5月27日
    00
  • jQWidgets jqxDataTable columnsResize属性

    以下是关于“jQWidgets jqxDataTable columnsResize属性”的完整攻略,包含两个示例说明: 简介 columnsResize是 jqx 控件的一个属性,用于启用或用表格列的调整大小功能。 详细攻略 以下是 jqxDataTable 控件的 Resize 属性的详细攻略: 使用 columnsResize 属性 在 jqxData…

    jquery 2023年5月11日
    00
  • 如何用JavaScript或jQuery检查大写锁定是否开启

    检测大写锁定是否开启是一项常见的需求,特别是在需要跟踪用户在输入中使用的字母时。在JavaScript和jQuery中都可以检测大写锁定的状态。 使用JavaScript检查大写锁定状态 JavaScript中可以使用event.getModifierState()方法检测大写锁定状态。该方法返回一个布尔值,如果大写锁定开启,则返回true,否则返回fals…

    jquery 2023年5月13日
    00
  • 如何使用jQuery选择HTML页面中所有可见或隐藏的元素

    使用jQuery选择HTML页面中所有可见或隐藏的元素,需要使用选择器和筛选器的组合来完成,步骤如下: 使用选择器选择元素,语法为:$(selector); 使用.filter()方法可以根据条件筛选选择器选中的元素,语法为:$(selector).filter(condition); 使用:visible或:hidden作为筛选条件,分别选择可见或隐藏的元…

    jquery 2023年5月12日
    00
  • jQuery 如何对选项元素按字母顺序排序

    要对选项元素按字母顺序排序,可以使用jQuery的.sort()方法和.appendTo()方法。以下是详细的攻略: HTML结构 首先,需要在HTML中创建一个选择框,并添加一些选项。以下是一个示例: <select id="mySelect"> <option value="c">C<…

    jquery 2023年5月9日
    00
  • jQuery中:selected选择器用法实例

    jQuery中:selected选择器用法实例 什么是:selected选择器 在jQuery中,:selected选择器用于选择所有被选中的option元素。当一个或多个option元素被选中时,它们将会成为被选中的option集合,而这个集合正是:selected选择器所匹配的对象。 用法示例 示例1:根据选择框选中的值显示相应的内容 <selec…

    jquery 2023年5月28日
    00
  • jQWidgets jqxListBox updateItem()方法

    jQWidgets jqxListBox updateItem()方法详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件工具包。ListBox是其中之一。本文将详细介绍jqxListBox的updateItem()方法,包括定义、语法和示例。 updateItem()方法定义 jqxListBox的updateItem()方法用于…

    jquery 2023年5月10日
    00
  • jQWidgets jqxDataTable getView()方法

    以下是关于“jQWidgets jqxDataTable getView()方法”的完整攻略,包含两个示例说明: 简介 jqxDataTable 控件提供了 getView 方法用于获取表格中可见的行数据。通过使用 getView() 方法,我们可以方便地获取当前可见的行数据,以便进行后续的操作。 详细攻略 以下是 jqxDataTable 控件的 getV…

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