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日

相关文章

  • React css-in-js基础介绍与应用

    React css-in-js是指使用JavaScript对象来定义CSS样式。使用React css-in-js可以提高样式的复用性和可维护性。本文将介绍React css-in-js的基础知识以及如何在React中使用它。 1. React css-in-js基础知识 1.1 为什么使用React css-in-js? 传统的CSS样式定义方式是在CSS…

    css 2023年6月9日
    00
  • 使用Vite处理css less及postcss示例详解

    使用Vite处理css、less及postcss示例详解 在前端开发中,我们常常需要处理各种css预处理器,并采用postcss工具进行后处理。Vite工具可以方便地处理这些过程,本篇攻略将详细介绍如何使用Vite处理css、less及postcss。 步骤一:安装Vite 首先需要安装Node.js和npm,然后在终端输入以下命令安装Vite: npm i…

    css 2023年6月9日
    00
  • css 字体设置(不同浏览器设置效果)

    CSS字体设置是网页设计中的一个重要部分。网站开发者需要确保相同字体在不同浏览器或操作系统下都可以正常显示。以下是关于CSS字体设置的攻略: 1. 使用通用字体族名称 在CSS中,可以使用通用字体族名称来设置字体。这些名称适用于大多数操作系统和浏览器。比如: font-family: Arial, Helvetica, sans-serif; 在这个例子中,…

    css 2023年6月9日
    00
  • css 背景透明 实现代码

    下面是 CSS 背景透明的实现攻略: 方法一:使用 opacity 属性设置背景透明度 opacity 属性可以控制元素的不透明度。该属性取值从 0(完全透明)到 1(完全不透明)。可以将 opacity 属性应用于元素的样式中,实现背景透明的效果。 .element { opacity: 0.5; /* 透明度为 50% */ } 示例 1:设置块状元素的…

    css 2023年6月9日
    00
  • 纯CSS+Div 的标签实现代码

    下面是纯CSS+Div 的标签实现代码攻略。 什么是纯CSS+Div 的标签实现代码 纯CSS+Div 的标签实现代码是一种使用CSS和Div元素来实现各种标签效果的方法。通过CSS的样式设置和Div元素的排版组合,可以实现各种复杂的标签样式,而无需使用传统的HTML标记。 如何实现纯CSS+Div 的标签效果 首先,需要使用CSS样式来设置各种标签的样式属…

    css 2023年6月10日
    00
  • 利用css3如何设置没有上下边的列表间隔线

    想要设置一个没有上下边框的列表间隔线,可以采用下面这两种方法: 方法一:使用伪元素 :before 和 :after 利用 CSS3 中的伪元素 :before 和 :after,可以在每个列表项之前和之后插入一个 li 元素的伪元素,并将其设置为条纹样式,从而达到没有上下边框的列表间隔线的效果。 以下是示例代码: ul { list-style: none…

    css 2023年6月9日
    00
  • css新手教程之背景图充满整个屏幕

    当我们想要在网页中使用背景图时,有时候我们希望这个背景图可以充满整个屏幕。下面是在CSS中实现这个效果的攻略。 设置背景图 首先,我们需要设置这个背景图。我们可以使用background-image属性来设置背景图。例如: body { background-image: url(‘background.jpg’); } 这会将名为background.jp…

    css 2023年6月9日
    00
  • 解析CSS中的Grid布局完全指南

    解析CSS中的Grid布局完全指南攻略 简介 Grid布局是CSS3新引入的一种用于网页布局的方式,它可以精确的控制网页元素的位置和大小,让页面布局更为灵活和可控。本文将详细讲解Grid布局的使用方法和注意事项。 基本用法 首先,我们需要将一个容器标记为Grid布局,我们可以通过在容器上设置display: grid来实现: .container { dis…

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