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日

相关文章

  • CSS层透明实现方法

    关于CSS层透明实现方法,下面是一份完整攻略: 什么是CSS层透明? 我们都知道CSS可以控制元素的显示及样式,而CSS层透明则是指让一个元素透过另一个元素的背景进行显示。这对于设计一些特殊效果的网站非常有用。CSS中有两种实现层透明的方法,下面将一一介绍。 CSS透明度(opacity) CSS中有opacity属性,可以用来设置元素的透明度,其值的范围从…

    css 2023年6月10日
    00
  • vue内置组件transition简单原理图文详解(小结)

    下面是我对“vue内置组件transition简单原理图文详解(小结)”的完整攻略。 一、前言 在Vue.js中,<transition> 组件为我们提供了一种简单的方式来处理元素的过渡效果。使用 <transition> 组件,我们可以很容易地在元素进入或离开页面时应用过渡效果,比如淡入淡出、滑动等。 二、transition组件原…

    css 2023年6月10日
    00
  • vue3+vite assets动态引入图片的三种方法及解决打包后图片路径错误不显示的问题

    下面我将为您详细讲解“vue3+vite assets动态引入图片的三种方法及解决打包后图片路径错误不显示的问题”的完整攻略。 一、问题描述 在使用vue3和vite搭建前端项目时,我们可能会遇到动态引入图片的问题。具体而言,我们需要在vue3的template中动态引入图片资源进行展示,但是在打包部署的时候,我们发现图片路径出现错误,导致图片无法显示。因此…

    css 2023年6月9日
    00
  • 基于slideout.js实现移动端侧边栏滑动特效

    以下是基于slideout.js实现移动端侧边栏滑动特效的完整攻略。 第一步:引入slideout.js文件 在html文件中引入slideout.js文件,可以从slideout.js的官网或GitHub上获取到文件,并保存在项目中。例如: <script src="js/slideout.min.js"></scri…

    css 2023年6月10日
    00
  • css2.1多重背景和边框效果实现原理及代码(图文介绍)

    下面是对”css2.1多重背景和边框效果实现原理及代码(图文介绍)”的完整攻略的介绍。 背景效果的实现原理 实现多重背景的关键在于CSS2.1引入了多背景的概念。多背景是指在一个元素中可以设置多个背景图像。每个背景图像都可以有自己的颜色、大小、位置等属性。这个特性被广泛应用于网站设计中。 多重背景图片可以通过设置多个background-image属性来实现…

    css 2023年6月9日
    00
  • 谈自适应宽度

    谈自适应宽度是前端开发中非常关键的一部分,它可以让网站在不同设备上拥有更好的显示效果。自适应宽度是通过CSS实现的,下面是一些实用的技巧和示例。 什么是自适应宽度? 自适应宽度指的是网站中元素的宽度可以根据设备的不同自动适应,从而保证在不同的屏幕上显示效果良好。常见的自适应宽度方法包括CSS3中的媒体查询和弹性布局等。 使用媒体查询实现自适应宽度 媒体查询是…

    css 2023年6月10日
    00
  • 页面出现滚动条的时候如何让滚动条不影响页面宽度

    要让页面出现滚动条的时候不影响页面宽度,我们可以采用以下几种方法: 一、使用 overflow: hidden; 可以在需要限制宽度的容器上设置 overflow: hidden;。这样就能阻止滚动条的出现,同时保持页面的宽度不变。 .container { max-width: 1000px; overflow: hidden; } 二、使用 overfl…

    css 2023年6月10日
    00
  • 使用CSS text-emphasis对文字进行强调装饰的实现代码

    使用CSS的text-emphasis属性可以对文字进行强调装饰,使文字看起来更加突出。下面就是实现的攻略: 1. 了解text-emphasis的基本语法 text-emphasis属性包含两个关键词值:mark和dot,用于设置强调装饰的样式。它们可以单独使用,也可以同时使用。text-emphasis还可以与text-emphasis-color属性一…

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