jQuery拖拽插件gridster使用指南

jQuery拖拽插件gridster使用指南

简介

gridster是一个优秀的jQuery拖拽插件,可以帮助用户快速实现可拖拽、可排序的网格布局。本文将对gridster的使用进行详细介绍。

安装

使用gridster之前,需要引入jquery和gridster的javascript文件和css文件,可以直接从官方网站下载或使用npm等包管理工具安装,在HTML文档头部引入如下代码:

<link rel="stylesheet" type="text/css" href="gridster.css">
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.gridster.min.js"></script>

基本用法

初始化

在页面加载完成之后,使用以下代码初始化gridster:

$(".gridster ul").gridster({
    widget_margins: [10, 10], // 每个小部件的外边距
    widget_base_dimensions: [100, 55], // 每个小部件的基础尺寸
    min_cols: 2, // 最小列数
    max_cols: 6, // 最大列数
    resize: {
        enabled: true // 允许调整大小
    }
});

插入小部件

插入小部件需要先在html中放置 ul 元素,然后在js中指定要插入小部件的 li 元素的HTML代码,使用 add_widget 函数将小部件插入 ul 元素。

<div class="gridster">
    <ul>
        <li data-row="1" data-col="1" data-sizex="2" data-sizey="2">小部件1</li>
        <li data-row="1" data-col="3" data-sizex="1" data-sizey="2">小部件2</li>
        <li data-row="1" data-col="4" data-sizex="1" data-sizey="1">小部件3</li>
    </ul>
</div>
var widgetHtml = "<li data-row='1' data-col='1' data-sizex='1' data-sizey='1'>新小部件</li>";
$(".gridster ul").add_widget(widgetHtml);

调整大小和移动小部件

通过调整小部件的大小和位置,可以自由排列小部件。下面是一个简单的调整大小和移动小部件的示例:

<div class="gridster">
    <ul>
        <li data-row="1" data-col="1" data-sizex="3" data-sizey="2">小部件1</li>
        <li data-row="3" data-col="1" data-sizex="1" data-sizey="1">小部件2</li>
        <li data-row="3" data-col="2" data-sizex="1" data-sizey="1">小部件3</li>
        <li data-row="4" data-col="2" data-sizex="1" data-sizey="1">小部件4</li>
        <li data-row="5" data-col="1" data-sizex="2" data-sizey="1">小部件5</li>
    </ul>
</div>
$(".gridster ul li:nth-child(1)").resizable({
    // 只允许改变宽度
    handles: "e",
    resize: function(event, ui) {
        var w = ui.size.width;
        var h = ui.size.height;
        var x = ui.position.left;
        var y = ui.position.top;
        $(this).attr("data-sizex", w).attr("data-sizey", h);
    }
});

$(".gridster ul li:nth-child(2)").draggable().resizable({
    // 允许改变大小和位置,并限制在网格中
    containment: ".gridster ul",
    resize: function(event, ui) {
        var w = ui.size.width;
        var h = ui.size.height;
        var x = ui.position.left;
        var y = ui.position.top;
        var row = parseInt(y / 55) + 1;
        var col = parseInt(x / 100) + 1;
        $(this).attr("data-row", row).attr("data-col", col).attr("data-sizex", w).attr("data-sizey", h);
    },
    drag: function(event, ui) {
        var row = parseInt(ui.position.top / 55) + 1;
        var col = parseInt(ui.position.left / 100) + 1;
        $(this).attr("data-row", row).attr("data-col", col);
    }
});

示例说明

示例一

下面我们将使用gridster来创建一个类似于windows桌面的布局。每个小部件代表一个桌面图标,可以拖拽和调整大小。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>gridster示例1</title>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css" integrity="sha512-PHOzYAHFK9F8zrE38UIEkcwdo+d+/Gv2pd90P2axHz0aV/qKq8GKF9soaW2EdvL0QTG9OIkjtWfPSEb5LZ3mg==" crossorigin="anonymous" />
  <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/gridstack.js/1.10.0/gridstack.min.css">
  <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/gridstack.js/1.10.0/gridstack-extra.min.css">
  <script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
  <script type="text/javascript" src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gridstack.js/1.10.0/gridstack.min.js"></script>
  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
</head>
<body>
  <div class="grid-stack">
    <div class="grid-stack-item" data-gs-x="0" data-gs-y="0" data-gs-width="2" data-gs-height="4">
      <div class="grid-stack-item-content">图标1</div>
    </div>
    <div class="grid-stack-item" data-gs-x="2" data-gs-y="0" data-gs-width="2" data-gs-height="4">
      <div class="grid-stack-item-content">图标2</div>
    </div>
    <div class="grid-stack-item" data-gs-x="4" data-gs-y="0" data-gs-width="2" data-gs-height="4">
      <div class="grid-stack-item-content">图标3</div>
    </div>
  </div>
  <script type="text/javascript">
    $(function () {
      var options = {
        cellHeight: 80,
        verticalMargin: 10,
        animate:true,
      };
      $('.grid-stack').gridstack(options);
    });
  </script>
</body>
</html>

在上面的示例中,我们使用了 grid-stack 类来作为容器,并在其中插入了三个小部件。这些小部件都被包装在 wrapper div元素中,wrapper div元素又被包装在 grid-stack-item div元素中。使用 gridstack 初始化函数对 grid-stack 容器进行初始化,指定了小部件的高度、垂直边距和动画效果。

示例二

下面我们将使用gridster来创建一个可排序的照片墙。用户可以通过拖拽照片进行排序,也可以调整照片大小。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>gridster示例2</title>
  <link rel="stylesheet" type="text/css" href="gridster.css">
  <script type="text/javascript" src="jquery.js"></script>
  <script type="text/javascript" src="jquery.gridster.min.js"></script>
  <style>
    .photo {
      background-color: #ccc;
      cursor: move;
      opacity: 0.8;
      padding: 5px;
    }
  </style>
</head>
<body>
  <div class="gridster">
    <ul>
      <li data-row="1" data-col="1" data-sizex="1" data-sizey="1" class="photo" style="background-image: url('photo1.png');"></li>
      <li data-row="1" data-col="2" data-sizex="1" data-sizey="2" class="photo" style="background-image: url('photo2.png');"></li>
      <li data-row="2" data-col="1" data-sizex="2" data-sizey="1" class="photo" style="background-image: url('photo3.png');"></li>
    </ul>
  </div>
  <script type="text/javascript">
    var options = {
      widget_margins: [10, 10],
      widget_base_dimensions: [100, 100],
      min_cols: 3,
      resize: {
        enabled: true
      }
    };
    $('.gridster ul').gridster(options).sortable({
      items: 'li',
      helper: 'clone',
      tolerance: 'pointer',
      forceHelperSize: true,
      placeholder: 'photo-placeholder',
      start: function(event, ui) {
        ui.helper.width(100).height(100);
      },
      stop: function(event, ui) {
        var row = ui.position.top / 100 + 1;
        var col = ui.position.left / 100 + 1;
        $(ui.item).attr('data-row', row).attr('data-col', col);
        $('.gridster ul').gridster().data('gridster').disable().enable();
      }
    });
  </script>
</body>
</html>

在上面的示例中,我们使用了 ul 元素来作为容器,并在其中插入了三张图片。使用了对 gridster 进行初始化的 options 参数,指定了小部件的外边距、基础尺寸和最小列数,并允许调整大小。我们还使用jquery-ui的 sortable 函数来实现排序,使用 helper 属性进行拖动功能,startstop 属性指定移动上限和下限,可拖动的占位符使用 placeholder 属性来指定。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery拖拽插件gridster使用指南 - Python技术站

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

相关文章

  • vue中实现一个项目里兼容移动端和pc端

    在vue中实现一个兼容移动端和PC端的项目,可以按照以下步骤进行: 1. 使用响应式布局 响应式布局可以根据不同设备的屏幕尺寸自动进行布局调整,从而适应不同设备的屏幕大小。可以使用一些CSS框架,如Bootstrap或者Element-UI,它们内置了响应式布局的样式,也可以手动进行响应式布局的设置。 示例: <template> <div…

    css 2023年6月10日
    00
  • 用php实现的下载css文件中的图片的代码

    让我们来详细讲解用php实现下载css文件中的图片的代码的完整攻略。 1. 理解css中的背景图片 在网页中,我们常常使用CSS来设置元素的背景图片,通过如下方式来实现: background-image: url(‘image.jpg’); 其中,url函数的参数就是图片文件的路径。在使用CSS设置背景图片时,路径可以是绝对路径或相对于CSS文件的路径。 …

    css 2023年6月10日
    00
  • JS仿京东移动端手指拨动切换轮播图效果

    下面是总体的攻略: 1. 需求分析 首先需要明确需求,也就是要实现一个仿京东移动端的轮播图效果。该效果的主要特点有: 手指拖动轮播图时,图片可以随着手指滑动而跟随移动,并在释放时自动定到下一个或上一个轮播图。 轮播图可以自动循环播放 底部的小圆点可以随着轮播图的切换而同步更新 2. 技术选型 实现这个效果需要使用以下技术: HTML、CSS、JavaScri…

    css 2023年6月10日
    00
  • 解决html-jquery/js引用外部图片时遇到看不了或出现403的问题

    HTML页面中使用jQuery或JavaScript引用外部图片时可能会出现无法加载图片或403错误的问题,这可能是由于以下原因所导致的: 图片路径不正确 图片链接被防盗链所限制 以下是解决此类问题的攻略: 确认图片路径是否正确 要使用外部图片,必须确定图片的路径是正确的。完整的图片路径应包括图片名称和扩展名,如“http://www.example.com…

    css 2023年6月9日
    00
  • CSS XTHML书写规范以及常见问题总结(页面最优化)

    下面是详细讲解“CSS XHTML书写规范以及常见问题总结(页面最优化)”的攻略。 1. CSS XHTML书写规范 1.1 文档类型声明 在 XHTML 中,一定要声明文档类型,可以使用以下任意一种: <!DOCTYPE html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tra…

    css 2023年6月9日
    00
  • 浅谈解决space-evenly兼容性问题的两种方法

    浅谈解决space-evenly兼容性问题的两种方法 什么是space-evenly space-evenly是CSS中的一个justify-content属性值,用于对齐元素,使元素在容器中均匀分布,并且元素与容器的边缘之间有相同的间隔。 兼容性问题 虽然space-evenly能够方便地实现元素的均匀分布,但是它的兼容性却存在问题。在IE浏览器中,spa…

    css 2023年6月10日
    00
  • 深入理解jquery自定义动画animate()

    深入理解jquery自定义动画animate() 一、简介 jQuery是一套快捷、简洁的JavaScript工具库,在Web开发中广泛应用,尤其是在动态交互方面非常方便。其中,animate()方法是jQuery中自定义动画的重要方法,可以实现页面元素的平滑动画效果。 二、基本用法 animate()方法基本语法如下: $(selector).animat…

    css 2023年6月10日
    00
  • Webpack中publicPath路径问题详解

    下面我会详细讲解“Webpack中publicPath路径问题详解”的完整攻略,并且提供两个示例进行说明。 什么是publicPath? 在webpack构建应用程序时,会将我们的项目中各个模块依赖打包成为块(chunk),最终输出到一个或多个 bundle 中。当我们在使用<script>标签引入这些输出的静态资源时,会发现引用的路径不正确,这…

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