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日

相关文章

  • jQWidgets jqxNumberInput negativeSymbol属性

    以下是关于 jQWidgets jqxNumberInput 组件中 negativeSymbol 属性的详细攻略。 jQWidgets jqxNumberInput negativeSymbol 属性 jQWidgets jqxNumberInput 组件的 negativeSymbol 属性用于设置组件中负数的符号。 语法 $(‘#numberInput…

    jquery 2023年5月12日
    00
  • JQuery结合CSS操作打印样式的方法

    下面是详细讲解“JQuery结合CSS操作打印样式的方法”的完整攻略。 什么是“JQuery结合CSS操作打印样式的方法” JQuery结合CSS操作打印样式的方法是使用JQuery库中的CSS方法,对网页中的元素进行样式的操作,从而实现在打印时改变元素的显示效果。 如何使用JQuery结合CSS操作打印样式的方法 下面是JQuery结合CSS操作打印样式的…

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

    下面是详细讲解“jQuery中:visible选择器用法实例”的完整攻略。 什么是:visible选择器? :visible选择器能够匹配在页面中可见的所有元素。 在jQuery中,通过使用:visible选择器能够很方便地筛选出页面中可见的元素,并进行操作、获取属性等。 :visible选择器的语法 :visible选择器的语法如下: $(‘:visibl…

    jquery 2023年5月28日
    00
  • jQWidgets jqxChart getItemCoord()方法

    jQWidgets 的 jqxChart 组件提供了 getItemCoord() 方法,用于获取图表上指定数据点的坐标。本文将详细介绍 getItemCoord() 方法的使用方法,包括概述、示例以及注意项。 getItemCoord() 方法概述 getItemCoord() 方法用于获取图表上指定数据点的坐标。该方法接受两个参数:数据系列的索引和数据点…

    jquery 2023年5月11日
    00
  • jQWidgets jqxTree selectItem()方法

    jQWidgets jqxTree selectItem() 方法 jqxTree 是 jQWidgets 提供的一个树形组件,它可以展示层级结构的数据支持多种交互。jqxTree 提供了 selectItem() 方法,用于在代码中选择树形组件中的节点。 selectItem() 方法 selectItem() 方法用于在代码中选择树形组件中的节点。该方法…

    jquery 2023年5月11日
    00
  • jQuery AjaxUpload 上传图片代码

    下面我将详细讲解如何使用jQuery AjaxUpload上传图片的完整攻略。 1. 引入jQuery和AjaxUpload插件 首先,我们需要引入jQuery和AjaxUpload插件。可以通过以下方式引入: <!– 引入jQuery文件 –> <script src="https://cdn.bootcss.com/jqu…

    jquery 2023年5月27日
    00
  • jQuery ajaxStart()方法

    jQuery ajaxStart() 方法用于在发送第一个ajax请求时,显示一个动画加载图标或文本提醒,通常配合ajaxStop() 方法使用,可以在所有请求完成后,隐藏加载提示。 该方法定义如下: $(document).ajaxStart(function(){ // 显示加载提示 }); 其中,$(document) 表示在整个页面上实现效果,可以根…

    jquery 2023年5月12日
    00
  • jQuery 使用手册(一)

    以下是详细讲解“jQuery 使用手册(一)”的完整攻略: jQuery 使用手册(一) 什么是 jQuery? jQuery 是一种流行的 JavaScript 库,用于简化 HTML 文档的遍历、事件处理、动画和 Ajax 操作。它被设计为易于使用的操作 DOM 元素的工具。 如何使用 jQuery? 在使用 jQuery 之前,我们需要先引入 jQue…

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