jQuery 拖动层(在可视区域范围内)

jQuery 拖动层是一种常见的 Web 开发技术,它允许 Web 页面上的元素随着用户的鼠标拖动而移动。如果你想要实现拖动层的功能,并且希望元素只能在可视区域范围内进行拖动,那么可以按照以下步骤进行操作。

设置样式

首先需要在 CSS 文件中设置元素的样式。例如,可以设置一个 div 元素,宽度和高度都为 100 像素,并设置背景色和边框。

.draggable {
    width: 100px;
    height: 100px;
    background-color: #EEE;
    border: 1px solid #CCC;
}

开发 jQuery 代码

接下来需要编写 jQuery 代码来实现拖动层的功能。可以使用 mousedownmousemove 事件来捕获鼠标的位置信息,并将元素相对于文档的偏移量保存在变量中。在 mousemove 事件中更新元素的位置,并且添加一个判断,使得元素只能在可视区域范围内移动。

$(function() {
    var draggable = $(".draggable");
    var drag = false;
    var x, y, currentX, currentY;

    draggable.mousedown(function(e) {
        e.preventDefault();
        drag = true;
        x = e.pageX;
        y = e.pageY;
        currentX = draggable.offset().left;
        currentY = draggable.offset().top;
    });

    draggable.mousemove(function(e) {
        if (drag) {
            var moveX = e.pageX - x;
            var moveY = e.pageY - y;
            var maxX = $(document).width() - draggable.outerWidth();
            var maxY = $(window).height() - draggable.outerHeight() + $(window).scrollTop();

            if (currentX + moveX >= 0 && currentX + moveX <= maxX) {
                draggable.css("left", currentX + moveX + "px");
            }

            if (currentY + moveY >= $(window).scrollTop() && currentY + moveY <= maxY) {
                draggable.css("top", currentY + moveY + "px");
            }
        }
    });

    draggable.mouseup(function(e) {
        drag = false;
    });
});

示例说明

下面给出两个示例代码,分别演示如何实现拖动层功能。

示例一

在这个示例中,我们将页面上的一个 div 元素变成可拖动的,并且只能在页面可视区域范围内进行移动。这个示例的 HTML 代码如下所示:

<div class="draggable"></div>

对应的 jQuery 代码如下所示:

$(function() {
    var draggable = $(".draggable");
    var drag = false;
    var x, y, currentX, currentY;

    draggable.mousedown(function(e) {
        e.preventDefault();
        drag = true;
        x = e.pageX;
        y = e.pageY;
        currentX = draggable.offset().left;
        currentY = draggable.offset().top;
    });

    draggable.mousemove(function(e) {
        if (drag) {
            var moveX = e.pageX - x;
            var moveY = e.pageY - y;
            var maxX = $(document).width() - draggable.outerWidth();
            var maxY = $(window).height() - draggable.outerHeight() + $(window).scrollTop();

            if (currentX + moveX >= 0 && currentX + moveX <= maxX) {
                draggable.css("left", currentX + moveX + "px");
            }

            if (currentY + moveY >= $(window).scrollTop() && currentY + moveY <= maxY) {
                draggable.css("top", currentY + moveY + "px");
            }
        }
    });

    draggable.mouseup(function(e) {
        drag = false;
    });
});

示例二

在这个示例中,我们将页面上多个 div 元素变成可拖动的,并且只能在页面可视区域范围内进行移动。这个示例的 HTML 代码如下所示:

<div class="draggable"></div>
<div class="draggable"></div>
<div class="draggable"></div>

对应的 jQuery 代码如下所示:

$(function() {
    var draggable = $(".draggable");
    var drag = false;
    var x, y, currentX, currentY;

    draggable.mousedown(function(e) {
        e.preventDefault();
        drag = true;
        x = e.pageX;
        y = e.pageY;
        currentX = $(this).offset().left;
        currentY = $(this).offset().top;
    });

    draggable.mousemove(function(e) {
        if (drag) {
            var moveX = e.pageX - x;
            var moveY = e.pageY - y;
            var maxX = $(document).width() - $(this).outerWidth();
            var maxY = $(window).height() - $(this).outerHeight() + $(window).scrollTop();

            if (currentX + moveX >= 0 && currentX + moveX <= maxX) {
                $(this).css("left", currentX + moveX + "px");
            }

            if (currentY + moveY >= $(window).scrollTop() && currentY + moveY <= maxY) {
                $(this).css("top", currentY + moveY + "px");
            }
        }
    });

    draggable.mouseup(function(e) {
        drag = false;
    });
});

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery 拖动层(在可视区域范围内) - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • HTML5 input新增type属性color颜色拾取器的实例代码

    以下是详细讲解HTML5 input新增type属性color颜色拾取器的实例代码的完整攻略。 HTML5 input新增type属性color HTML5新增的input type属性中,其中比较常用的一种是color颜色拾取器。使用color类型时,可以让用户方便地通过一个颜色选择面板来选择颜色代码,而无需手动输入。color类型的input输入框的外观…

    css 2023年6月9日
    00
  • JavaScript根据CSS的Media Queries来判断浏览设备的方法

    当网页在不同的浏览设备上进行访问时,为了提供良好的用户体验,我们需要根据访问设备的不同特征,为其应用不同的样式。这时就需要使用 CSS 的 Media Queries 了。但是,有时候我们可能希望在 JavaScript 中获取到当前页面所运行的设备的信息,以便动态地进行一些调整。本文将详细讲解如何通过 JavaScript 获取并应用 CSS Media …

    css 2023年6月11日
    00
  • 纯CSS3制作的鼠标悬停时边框旋转

    下面是纯CSS3制作的鼠标悬停时边框旋转的完整攻略。 1. CSS3边框旋转原理 在CSS3中,利用transition、transform、border等属性,我们可以轻松实现边框旋转的效果,具体步骤如下: 为元素设置 border 属性,同时设置好初始状态下的边框样式(比如实线,2px粗细等)。 为元素设置 transition 属性,以便边框旋转时可以…

    css 2023年6月9日
    00
  • div使用margin:0px auto不居中的原因分析及解决

    当我们想要将一个div元素水平居中时,可通过设置其左、右margin的值为auto来实现。但是在实际应用中,我们可能会遇到一些情况,就是这种方法不起作用,导致元素不能居中。这时,我们需要对此进行原因分析并解决。本文详细讲解了div使用margin:0px auto不居中的原因分析及解决攻略。 原因分析 为什么我们设置了margin:0px auto,但是di…

    css 2023年6月9日
    00
  • 从Vue转换看Webpack与Vite 代码转换机制差异详解

    下面给您讲解“从Vue转换看Webpack与Vite 代码转换机制差异详解”的完整攻略。 1. 背景介绍 随着前端技术的不断发展,前端框架的应用也越来越广泛。在Vue框架中,我们经常使用Webpack和Vite来进行代码打包和转换,但是他们的代码转换机制有什么区别呢?接下来,我们将分析这个问题。 2. Webpack的代码转换机制 Webpack是一个模块打…

    css 2023年6月9日
    00
  • div+css样式表的id和class常用命名规则

    使用div+css样式表的id和class时,命名规则非常重要,良好的命名规则可以提高代码的可读性、可维护性和易于理解。下面详细讲解div+css样式表的id和class常用命名规则。 命名规则 id的命名规则 id只能出现一次,不能重复。 id名字应该具有描述性,尽量体现出id关联元素的功能或语义。 id名字应该简短小写,用连字符 – 分隔单词,不要用下划…

    css 2023年6月9日
    00
  • 300 多行css代码搞定微信 8.0 的炸裂特效

    下面就为您详细讲解”300 多行css代码搞定微信 8.0 的炸裂特效”的完整攻略。 1. 背景介绍 本文介绍的是如何利用 CSS3 实现微信8.0新版的炸裂特效。炸裂特效主要是通过 CSS3 动画和过渡来实现的,其效果可以让页面元素在鼠标 hover 或点击时以炸裂的形式消失,十分惊艳。 2. 实现步骤 2.1 HTML结构 首先要有一个 HTML 结构来…

    css 2023年6月9日
    00
  • CSS的相邻兄弟选择器用法简单讲解

    当我们需要选中文档中一个元素旁边的另一个元素时,就可以使用CSS的相邻兄弟选择器。相邻兄弟选择器用“+”符号表示,是紧跟在某个元素后的第一个指定元素。下面来详细讲解一下相邻兄弟选择器的用法。 语法规则: element1 + element2 element1: 要选择元素的前一个兄弟元素。 +: 选择前一个兄弟元素紧随的下一个兄弟元素。 element2:…

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