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日

相关文章

  • 详解CSS-opacity子元素继承父元素透明度的解决方法

    下面是详解 “CSS-opacity子元素继承父元素透明度的解决方法” 的攻略。 什么是 CSS-opacity? 在 CSS 中,opacity 属性指定元素的透明度,即元素的不透明度程度。该属性的值介于 0(完全透明) 和 1(完全不透明)之间。例如,设置一个元素的 opacity 为 0.5,那么这个元素会半透明显示。 想象一个问题 当一个元素设置了 …

    css 2023年6月10日
    00
  • alt属性和title属性

    我来详细讲解一下“alt属性和title属性”的完整攻略。 什么是alt属性和title属性? 在HTML中,图片是通过标签来插入的。其中,图片不能够像文字那样直接传达信息,所以需要使用alt属性和title属性来描述图片。通过这两种属性,用户可以更好的了解图片的内容,也可以帮助屏幕阅读器等工具更好的解读图片。 alt属性 alt属性是用于描述图片的,当图片…

    css 2023年6月10日
    00
  • 推荐10款最热门jQuery UI框架 原创

    推荐10款最热门jQuery UI框架 本文将介绍当前最受欢迎的10款jQuery UI框架,并为您提供示例说明,让您轻松了解如何使用这些框架。 1. jQuery UI jQuery UI是一个功能强大的jQuery插件,它提供了一组易于使用的UI组件和工具,如按钮、对话框、进度条、日历、自动完成等。 通过使用jQuery UI,您可以快速创建现代化的We…

    css 2023年6月10日
    00
  • 门户网站构建CSS框架的规则

    当我们构建门户网站时,CSS框架是必不可少的,因为它能够使网站的样式表现更为一致和美观。下面是建立门户网站 CSS 框架的规则和示例说明。 规则 样式重置: 不同浏览器的默认样式各不相同,为了让不同页面在不同浏览器上展示相同的外观,首先需要进行样式重置。 BEM 命名规范:使用 BEM 命名约定可以让代码更为清晰、易于理解和维护。BEM 规范是由块 (blo…

    css 2023年6月10日
    00
  • IE浏览器专有css属性之zoom详解

    IE浏览器专有CSS属性之zoom详解 对于一些老版浏览器,如 IE6、IE7 等,常常渲染网页会出现问题,此时常常可以采用一些浏览器专有的 CSS 属性来解决问题,其中 zoom 属性就是其中之一。 zoom 属性的作用 zoom 属性可以设置元素及元素中的文本按照比例进行缩放。对于 IE 浏览器,它是一项非常有用的属性,可以解决一些 IE 渲染问题。 基…

    css 2023年6月10日
    00
  • CSS 即将支持嵌套,SASS/LESS 等预处理器该何去何从

    CSS 即将支持嵌套,SASS/LESS 等预处理器该何去何从 在 CSS 3 中,嵌套选择器是一种非常有用的选择器,可以让开发者更加方便地编写 CSS 样式。然而,CSS 3 中的嵌套选择器只能嵌套一层,对于复杂的嵌套结构,仍然需要使用类名或 ID 来实现。近期,CSS 工作组提出了一个新的 CSS 规范,即 CSS Nesting,该规范将支持多层嵌套选…

    css 2023年5月18日
    00
  • 需灵活掌握的Bootstrap预定义排版类 你精通吗?

    Bootstrap是一个广泛应用于Web开发项目的前端框架,其提供了大量的预定义排版类,可以极大地提高Web页面的开发效率。其中一些常用、常见的预定义排版类是必须要熟练掌握的。 需灵活掌握的Bootstrap预定义排版类 文字相关的预定义排版类 Bootstrap提供了大量的预定义排版类,用来控制文字的大小、颜色、字体等属性。其中一些常用的预定义排版类包括:…

    css 2023年6月9日
    00
  • CSS设置列表样式和创建导航菜单实现代码

    下面是“CSS设置列表样式和创建导航菜单实现代码”的完整攻略。 CSS设置列表样式 当我们需要在页面中使用列表时,我们可以通过CSS来设置不同样式的列表,以提高页面的可读性和美观性。下面是两个示例: 1. 设置无序列表(ul)的样式 ul { list-style: none; /* 去除默认样式 */ padding: 0; margin: 0; } ul…

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