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

yizhihongxing

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的一些新特性与Canvas的常用属性

    整理HTML5的一些新特性与Canvas的常用属性 HTML5是Hypertext Markup Language的第五个版本,它引入了许多新特性,使得网页开发变得更加便捷,用户体验也得到了显著的提升。 HTML5的新特性 语义化标签 HTML5 引入了一些新的语义化标签,如: <article>:表示文档、页面、站点或应用程序中的一个独立结构,…

    css 2023年6月9日
    00
  • 第8天:CSS布局入门

    下面是“第8天:CSS布局入门”的完整攻略,它包含了一些基本的CSS布局技巧和示例说明。 一、CSS布局的基础知识 在开始学习CSS布局前,我们需要了解一些关键的基础知识。 盒模型: 盒模型是CSS布局的基础,每个HTML元素都是一个盒子,由内容区、填充区、边框和外边距组成。在CSS中设置盒子的宽度和高度是包括盒子的所有部分的总和。 块级元素: 块级元素将自…

    css 2023年6月9日
    00
  • HTML中table表格标签的基础学习教程

    当我们需要在网页中展示各种数据信息时,通常会采用HTML中的表格标签来构建表格,使得数据呈现更加清晰、美观。本篇教程将为大家讲解HTML中table表格标签的基础学习攻略,帮助大家构建出漂亮、实用的表格。 1. table标签的基本语法 使用HTML中的table标签创建一个表格,需要包含如下三个基本部分: 表头区域(thead):包含表格的标题和一些其他相…

    css 2023年6月9日
    00
  • 你知道怎么在 HTML 页面中使用 React吗

    当我们想要在一个 HTML 页面中使用 React 时,我们有如下步骤: 步骤一:引入 React 库 首先我们需要在 HTML 页面中引用 React 库。我们可以使用 CDN 或者通过 npm/yarn 安装。 如果使用 CDN,可在 HTML 页面的 <head> 中添加如下代码: <!– React –> <scri…

    css 2023年6月9日
    00
  • Vue中使用webpack别名的方法实例详解

    标题:Vue中使用webpack别名的方法实例详解 为了更好地管理项目中的模块,我们经常使用别名来代替长长的文件路径。在Vue中,我们可以使用webpack的别名来实现这个功能。下面我来详细讲解一下如何使用webpack别名。 1.配置webpack Vue 使用 webpack 打包,因此我们需要修改 webpack 的配置文件。 在 webpack.co…

    css 2023年6月9日
    00
  • iscroll动态加载数据完美解决方法

    iScroll的概念和使用场景 iScroll是针对web移动端开发的一个JavaScript插件,可以模拟原生的滚动效果,解决了移动端滚动效果卡顿和不流畅的问题。iScroll的使用场景比较广泛,如移动端的下拉刷新、无限滚动等功能都可以使用iScroll来实现,让页面交互更加流畅。 iScroll动态加载数据的解决方法 步骤一:初始化iScroll 使用i…

    css 2023年6月10日
    00
  • JavaScript+CSS实现模态框效果

    根据您的要求,我将为您介绍实现模态框效果的完整攻略。 前言 在前端开发中,模态框一直是很重要的一个组件。通过模态框可以实现对于用户体验的提升和交互效果的丰富。在本文中,我们将通过JavaScript和CSS来实现模态框效果。 实现过程 编写HTML代码 我们首先需要创建模态框的HTML结构。一个基本的模态框由一个触发器按钮、模态框窗口和关闭按钮组成。以下是一…

    css 2023年6月10日
    00
  • 2014 HTML5/CSS3热门动画特效TOP10

    2014 HTML5/CSS3热门动画特效TOP10攻略 为了更好地呈现网站内容并提供更好的用户体验,动画特效在现代Web开发中扮演着重要角色。下面是2014年HTML5/CSS3热门动画特效TOP10攻略: 1. 球形菜单 球形菜单特效通过使用CSS3的transition和transform属性来实现。该特效展示了一个球形的菜单。原始代码如下所示: &l…

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