Vue Grid Layout -️ 适用Vue.js的栅格布局系统,在vue3+上使用

news2024/11/24 12:52:15

文章目录

  • 1、官网简介
  • 2、在vue3中使用
    • 1)、需要导入vue3支持的版本插件
    • 2)、在mian.js里引入:
    • 3)、在组件中使用
  • 3、layout布局的计算逻辑
  • 4、 gridLayout 的属性

该栅格系统目前对 vue2 的支持是最好的,vue3 是需要用插件支持的,会在小节详细讲解。

1、官网简介

官网地址:https://madewithvuejs.com/vue-grid-layout
中文文档:https://github.com/jbaysolutions/vue-grid-layout/blob/master/README-zh_CN.md

该栅格布局有以下特点:

  • 可拖拽
  • 可调整大小
  • 静态部件(不可拖拽、调整大小)
  • 拖拽和调整大小时进行边界检查
  • 增减部件时避免重建栅格
  • 可序列化和还原的布局
  • 自动化RTL支持
  • 响应式
  • Min/max w/h per item

2、在vue3中使用

1)、需要导入vue3支持的版本插件

pnpm add vue-grid-layout@3.0.0-beta1
// 安装结果
"vue-grid-layout": "3.0.0-beta1"

2)、在mian.js里引入:

import gridLayout  from 'vue-grid-layout' 
app.use(gridLayout)

注:在main.js注册后,在具体使用的组件中不需要在 import 引入,可直接使用(App.vue)

因为vue-grid-layout是vue2版本的 但自己用的是vue3版本,所以要安装vue3的依赖和相关配置

3)、在组件中使用

<template>
 <grid-layout
      v-model:layout="layout"
      :col-num="24"
      :row-height="30"
      :is-draggable="true"
      :is-resizable="true"
      :is-mirrored="false"
      :vertical-compact="true"
      :margin="[10, 10]"
      :use-css-transforms="true"
    >
      <grid-item
        v-for="item in layout"
        :key="item.i"
        :x="item.x"
        :y="item.y"
        :w="item.w"
        :h="item.h"
        :i="item.i"
        :static="item.static"
      >
        <MyTasks
          v-if="item.name === '我的模块1'"
          :id="item.i"
          @deletePanelItemEvent="deletePanelItem"
        />
        <MyData
          v-if="item.name === '我的模块2'"
          :id="item.i"
          @deletePanelItemEvent="deletePanelItem"
        />
        <MyModel
          v-if="item.name === '我的模块3'"
          :id="item.i"
          @deletePanelItemEvent="deletePanelItem"
        />
        <ModelRun
          v-if="item.name === '我的模块4'"
          :id="item.i"
          @deletePanelItemEvent="deletePanelItem"
        />
      </grid-item>
    </grid-layout>
</template>

<script setup>
import { reactive } from "vue";

const layout= [
  { x: 0, y: 0, w: 12, h: 8, i: 0, name: '我的模块1', static: true,},
  { x: 12, y: 0, w: 12, h: 8, i: 1, name: '我的模块2' },
  { x: 0, y: 8, w: 12, h: 8, i: 2, name: '我的模块3' },
  { x: 12, y: 8, w: 12, h: 8, i: 3, name: '我的模块4' },
]
</script>

<style>
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
</style>

在这里插入图片描述

3、layout布局的计算逻辑

这是gridItem的数据项:{ “x”: 0, “y”: 0, “w”: 2, “h”: 2, “i”: “0” },包含x、y、w、h、i。

  1. i: 栅格中元素的ID
  2. x: 标识栅格元素位于第几列
  3. y: 标识栅格元素位于第几行
  4. w: 标识栅格元素的初始宽度(值为colWidth的倍数)
  5. h: 标识栅格元素的初始高度(值为rowHeight的倍数)
    理解基本概念后,详细说说参数含义(只取第一个数据项:{ “x”: 0, “y”: 0, “w”: 2, “h”: 2, “i”: “0” }):
  6. minW:栅格元素的最小宽度(值为colWidth的倍数)
  7. minH:栅格元素的最小高度(值为rowHeight的倍数)
  8. maxW:栅格元素的最大宽度(值为colWidth的倍数)
  9. maxH:栅格元素的最大高度(值为rowHeight的倍数)

宽度:设共可分为 n 列,那么, width - (n+1)*margin / n = 每个元素的实际宽度
高度:设共可分为 m 行,那么,row-height * m + (m + 1) * margin <= height
因此,元素的宽高,可以根据实际的拖拽区的宽高,动态计算出来

4、 gridLayout 的属性

  1. layout:栅格布局的数据源,数据源为数组Array,数据项为对象,必须包含 i, x, y, w 和 h 属性.
  2. colNum:定义栅格系统的列数
  3. rowHeight:每行的高度,单位像素
  4. maxRows:定义最大行数
  5. isDraggable:标识栅格中的元素是否可拖拽
  6. isResizable:标识栅格中的元素是否可调整大小
  7. preventCollision:防止碰撞属性,值设置为ture时,栅格只能拖动至空白处

(我们将数据项宽度高度设为1,便于查看效果)

colNum:是定义列数

rowHeight:是指每一行的高度(这个的单位是 px)

margin:定义栅格中的元素边距(数组中第一个元素表示水平边距,第二个表示垂直边距,单位为像素)

其他属性就比较简单了,不再大篇幅介绍了,后面遇到了我们再细说。主要大家一定要了解计算规则,这个框架就非常容易掌握了,遇到BUG,基本上是margin的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1021820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

目标检测:Edge Based Oriented Object Detection

论文作者&#xff1a;Jianghu Shen,Xiaojun Wu 作者单位&#xff1a;Harbin Institute of Technology Shenzhen 论文链接&#xff1a;http://arxiv.org/abs/2309.08265v1 内容简介&#xff1a; 1&#xff09;方向&#xff1a;遥感领域中的目标检测技术 2&#xff09;应用&…

肖sir__mysql之存储__012

mysql之存储 一、存储 1、什么是存储过程 定义&#xff1a;存储过程就是实现某个特定功能的sql语句的集合&#xff0c;编译后的存储过程会保存在数据库中&#xff0c;通过存储过程的名称可以反复的调用执行。 2、存储过程的优点? (1)存储创建后&#xff0c;可以反复的调用&am…

液晶LCD显示驱动VK2C23可支持最大416点(52SEGx8COM)的LCD屏提供LQFP48、LQFP64的封装

VK2C23是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大224点&#xff08;56SEGx4COM&#xff09;或者最大416点&#xff08;52SEGx8COM&#xff09;的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据&#xff0c;也可通过指令进入省电模式。其高抗干扰&#xff…

Zoho Projects登顶福布斯2023年项目管理工具排行榜

Zoho Projects一款集成度较高的项目管理工具&#xff0c;近日入选福布斯2023年十佳项目管理工具榜单。作为一款为中小企业量身定制的解决方案&#xff0c;Zoho Projects以其卓越的功能和性价比&#xff0c;赢得了市场的广泛认可。 在当今竞争激烈的市场环境中&#xff0c;选择一…

F.cross_entropy的使用困惑--终结

1.由于按照cross_entropy的计算公式&#xff0c;F.cross_entropy(outs,label)这里面的outs和label的应该都是batch_size * one_hot_vec的形状&#xff0c;但是&#xff0c;这个函数呢&#xff0c;第二个label只要是batch_size * scalar即可&#xff0c;那个scalar就是index的位…

如果你用Markdown写公众号文章,试试我做的在线转换神器

大家好&#xff0c;我希望向大家介绍一款我最近开发的实用工具——"MarkdownConvert"&#xff0c;它能够以极简和高效的方式将Markdown文本转换为微信公众号所支持的HTML格式。它是我基于一个开源项目改进优化了页面&#xff0c;增加了自己喜欢的文章主题。 先聊聊这…

微信小程序传参的五种方式

文章目录 前言一、URL参数传递1.api跳转2.组件跳转 二、Storage本地存储三、全局变量globalData四、页面跳转时传参五、页面栈传参总结结语 前言 大家好&#xff0c;今天和大家分享一下微信小程序页面之间传参的五种方式&#xff0c;这个的话也是有人问了我一嘴&#xff0c;然…

Python进阶复习-文件与异常

目录 文件打开文件路径打开模式字符编码 文件读取逐行读取读取所有行 文件写入既读又写两种数据存储结构csv文件json文件 程序异常Exception万能捕捉 文件打开 文件路径 完整路径 with open("E:\hello.txt", "r", encoding"UTF-8") as file:c…

Socks5与HTTP的区别与应用场景

在网络访问中&#xff0c;代理服务器扮演着重要角色&#xff0c;用于保护用户隐私、提高访问速度等。Socks5代理和HTTP代理是两种常见的代理协议&#xff0c;它们在功能和应用场景上有所不同。本文将深入解析Socks5代理和HTTP代理的区别&#xff0c;帮助您更好地了解并选择适合…

Linux 信号捕捉函数 signal sigaction

signal函数 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 功能&#xff1a;设置某个信号的捕捉行为 参数&#xff1a; -signum&#xff1a;要捕捉的信号 handler&#xff1a;对捕捉到的信号怎么处理…

安装了多个版本VS导致无法安装vsix

如&#xff0c;先后安装了VS2015、VS2019&#xff0c;现在想给VS2015安装一个qt-vsaddin插件&#xff0c;运行vsix报错 “View Install Log”里显示 2023/9/19 10:03:46 - 正在搜索适用的产品... 2023/9/19 10:03:46 - 找到的已安装产品 - Microsoft Visual Studio Ultimate …

中标麒麟--国产操作系统-九五小庞

那么&#xff0c;我国国产操作系统现状到底如何呢&#xff1f; 自 1999 年徐冠华部长一语点破我们的产业软肋之后&#xff0c;国产操作系统起步于国家“七五”计划期间&#xff0c;目前国产操作系统均是基于Linux内核进行的二次开发&#xff0c;中国国产操作系统进入Linux元年…

多线程详解(上)

文章目录 一、线程的概念1&#xff09;线程是什么2&#xff09;为甚要有线程&#xff08;1&#xff09;“并发编程”成为“刚需”&#xff08;2&#xff09;在并发编程中, 线程比进程更轻量. 3&#xff09;线程和进程的区别 二、Thread的使用1&#xff09;线程的创建继承Thread…

【随想】每日两题Day.7

题目&#xff1a;面试题 02.07.链表相交 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 …

Excel中的宏、VBA

一、宏是什么&#xff1f; EXCEL MACRO 是一种记录和播放工具&#xff0c;它仅记录您的 Excel 步骤&#xff0c;并且宏将根据需要播放任意多次。 VBA 宏可自动执行重复任务&#xff0c;从而节省了时间。 这是一段可在 Excel 环境中运行的编程代码&#xff0c;但您无需成为编码…

EtherCAT 总线型 4 轴电机控制卡解决方案

 技术特点  支持标准 100M/s 带宽全双工 EtherCAT 总线网络接口及 CoE 通信协议一 进一出&#xff08;RJ45 接口&#xff09;&#xff0c;支持多组动态 PDO 分组和对象字典的自动映射&#xff0c;支持站 号 ID 的自动设置与保存&#xff0c;支持 SDO 的电机参数设置与…

设计模式之解析器(Interpreter)的C++实现

1、解析模式的提出 在软件开发的过程中&#xff0c;需要实现一种需求&#xff0c;该需求的结构稳定&#xff0c;但是需求的业务内容会频繁变化&#xff0c;如果使用普通语法实现需求&#xff0c;需要经常更新代码&#xff0c;不具有灵活性。可以使用解析器模式解决实现该类需求…

css花字效果

<div data-subtitle"春江潮水连海平" class"colorText">春江潮水连海平</div>.colorText{font-family:ZhanKuKuaiLeTi2016XiuDingBan;font-size: 50px;font-weight: bold;position: relative;background-image: linear-gradient(90deg,#A1B3FB…

同步 -- 自旋锁

基础学习--原子操作 typedef struct {int counter; } atomic_t;static __always_inline void atomic_set(atomic_t *v, int i) {instrument_atomic_write(v, sizeof(*v));raw_atomic_set(v, i); }static __always_inline void raw_atomic_set(atomic_t *v, int i) {arch_atomic…

集丰照明|别墅设计:从空间规划到奢华元素的精心打造

当人们谈论别墅时&#xff0c;总会不自觉地与豪华、舒适、私人空间等词汇联系在一起。确实&#xff0c;别墅作为一种住宅形式&#xff0c;其设计不仅需要满足基本的生活需求&#xff0c;更要有独特的风格和品味。本文将从别墅设计的各个方面进行探讨&#xff0c;带您领略从空间…