vue-grid-layout詳解

vue-grid-layout 教程

vue-grid-layout 是一個用于 Vue.js 的響應式拖放網格布局組件,允許開發者創建可調整大小、可拖放的布局,廣泛用于儀表板、管理面板等復雜布局需求。本教程將介紹如何安裝、配置和使用 vue-grid-layout

目錄

  • 安裝
  • 基本使用
    • 布局設置
    • 拖拽和調整大小
  • 高級使用
    • 響應式布局
    • 保存和加載布局
  • 屬性
  • 事件處理
  • 樣式自定義
  • 參考資源

安裝

你可以通過 npm 或 yarn 安裝 vue-grid-layout

npm install vue-grid-layout
# or
yarn add vue-grid-layout

基本使用

布局設置

以下示例展示了如何定義一個簡單的拖放網格布局。

<template><GridLayout:layout.sync="layout":col-num="12":row-height="30":is-draggable="true":is-resizable="true":vertical-compact="true":use-css-transforms="true"><GridItemv-for="item in layout":key="item.i":x="item.x":y="item.y":w="item.w":h="item.h"><div class="grid-item">{{ item.i }}</div></GridItem></GridLayout>
</template><script>
import { GridLayout, GridItem } from "vue-grid-layout";export default {components: {GridLayout,GridItem,},data() {return {layout: [{ i: "0", x: 0, y: 0, w: 2, h: 2 },{ i: "1", x: 2, y: 0, w: 2, h: 4 },{ i: "2", x: 4, y: 0, w: 2, h: 5 },],};},
};
</script><style scoped>
.grid-item {background-color: #b3cde0;border: 1px solid #ccc;display: flex;align-items: center;justify-content: center;
}
</style>

拖拽和調整大小

GridLayout 中設置 is-draggableis-resizabletrue 可以啟用拖拽和調整大小功能。

  • :is-draggable="true": 啟用拖拽功能。
  • :is-resizable="true": 啟用調整大小功能。
<template><GridLayout :layout.sync="layout" :is-draggable="true" :is-resizable="true"><GridItemv-for="item in layout":key="item.i":x="item.x":y="item.y":w="item.w":h="item.h"><div class="grid-item">{{ item.i }}</div></GridItem></GridLayout>
</template>

高級使用

響應式布局

vue-grid-layout 支持響應式布局,可以為不同的屏幕尺寸設置不同的列數和斷點。

<template><GridLayout:layout.sync="layout":col-num="12":row-height="30":breakpoints="{ lg: 1200, md: 996, sm: 768, xs: 480 }":cols="{ lg: 12, md: 10, sm: 8, xs: 6 }"><GridItemv-for="item in layout":key="item.i":x="item.x":y="item.y":w="item.w":h="item.h"><div class="grid-item">{{ item.i }}</div></GridItem></GridLayout>
</template>

保存和加載布局

可以將當前布局保存到 localStorage,并在頁面重新加載時從 localStorage 中恢復布局。

<template><GridLayout:layout.sync="layout":col-num="12":row-height="30":is-draggable="true":is-resizable="true"@layout-updated="onLayoutUpdated"><GridItemv-for="item in layout":key="item.i":x="item.x":y="item.y":w="item.w":h="item.h"><div class="grid-item">{{ item.i }}</div></GridItem></GridLayout><button @click="saveLayout">Save Layout</button>
</template><script>
import { GridLayout, GridItem } from "vue-grid-layout";export default {components: {GridLayout,GridItem,},data() {return {layout: JSON.parse(localStorage.getItem("layout")) || [{ i: "0", x: 0, y: 0, w: 2, h: 2 },{ i: "1", x: 2, y: 0, w: 2, h: 4 },{ i: "2", x: 4, y: 0, w: 2, h: 5 },],};},methods: {onLayoutUpdated(newLayout) {this.layout = newLayout;},saveLayout() {localStorage.setItem("layout", JSON.stringify(this.layout));},},
};
</script>

好的,這里是 vue-grid-layout 的所有重要屬性的詳細列表,包括 GridLayoutGridItem 組件的屬性。

屬性

GridLayout 屬性

layout
  • 類型: Array<Object>
  • 默認值: []
  • 描述: 定義布局中所有網格項的數組,每個對象應包含 ixywh 等屬性。
col-num
  • 類型: Number
  • 默認值: 12
  • 描述: 網格系統的列數。
row-height
  • 類型: Number
  • 默認值: 150
  • 描述: 每一行的高度(以像素為單位)。
is-draggable
  • 類型: Boolean
  • 默認值: true
  • 描述: 是否允許拖動網格項。
is-resizable
  • 類型: Boolean
  • 默認值: true
  • 描述: 是否允許調整網格項大小。
vertical-compact
  • 類型: Boolean
  • 默認值: true
  • 描述: 是否啟用垂直方向的緊湊排列。
use-css-transforms
  • 類型: Boolean
  • 默認值: true
  • 描述: 是否使用 CSS 變換 (transform) 來移動網格項。
margin
  • 類型: Array<Number>
  • 默認值: [10, 10]
  • 描述: 網格項之間的間距,格式為 [水平間距, 垂直間距]
container-padding
  • 類型: Array<Number>
  • 默認值: [10, 10]
  • 描述: 網格容器的內邊距,格式為 [水平內邊距, 垂直內邊距]
max-cols
  • 類型: Number
  • 默認值: Infinity
  • 描述: 布局中最大列數。
max-rows
  • 類型: Number
  • 默認值: Infinity
  • 描述: 布局中最大行數。
auto-size
  • 類型: Boolean
  • 默認值: true
  • 描述: 是否自動調整容器高度以適應網格項高度。
draggable-handle
  • 類型: String
  • 默認值: ''
  • 描述: 網格項中可用于拖動的 CSS 選擇器。例:.handle
draggable-cancel
  • 類型: String
  • 默認值: ''
  • 描述: 網格項中禁止拖動的 CSS 選擇器。例:.no-drag
resize-handle
  • 類型: Array<String>
  • 默認值: ['se']
  • 描述: 用于調整大小的 CSS 選擇器數組,支持 ['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw']
breakpoints
  • 類型: Object
  • 默認值: {}
  • 描述: 定義不同設備寬度下的斷點,格式為 { 斷點名稱: 像素值 }。例:{ lg: 1200, md: 996, sm: 768, xs: 480 }
cols
  • 類型: Object
  • 默認值: {}
  • 描述: 定義不同斷點下的列數,格式為 { 斷點名稱: 列數 }。例:{ lg: 12, md: 10, sm: 8, xs: 6 }

GridItem 屬性

i
  • 類型: String
  • 默認值: ''
  • 描述: 網格項的唯一標識符,通常用于數據綁定。
x
  • 類型: Number
  • 默認值: 0
  • 描述: 網格項的橫向起始位置(從 0 開始計數)。
y
  • 類型: Number
  • 默認值: 0
  • 描述: 網格項的縱向起始位置(從 0 開始計數)。
w
  • 類型: Number
  • 默認值: 1
  • 描述: 網格項的寬度,以列數為單位。
h
  • 類型: Number
  • 默認值: 1
  • 描述: 網格項的高度,以行數為單位。
is-draggable
  • 類型: Boolean
  • 默認值: true
  • 描述: 單個網格項是否可拖動。
is-resizable
  • 類型: Boolean
  • 默認值: true
  • 描述: 單個網格項是否可調整大小。
min-w
  • 類型: Number
  • 默認值: 1
  • 描述: 網格項的最小寬度(列數)。
max-w
  • 類型: Number
  • 默認值: Infinity
  • 描述: 網格項的最大寬度(列數)。
min-h
  • 類型: Number
  • 默認值: 1
  • 描述: 網格項的最小高度(行數)。
max-h
  • 類型: Number
  • 默認值: Infinity
  • 描述: 網格項的最大高度(行數)。
static
  • 類型: Boolean
  • 默認值: false
  • 描述: 如果設為 true,網格項將不能拖動或調整大小。

事件處理

vue-grid-layout 提供了豐富的事件用于處理布局變化。

  • @layout-updated: 當布局改變時觸發。
  • @drag-start, @drag, @drag-stop: 拖動事件。
  • @resize-start, @resize, @resize-stop: 調整大小事件。
<template><GridLayout:layout.sync="layout":col-num="12"@layout-updated="handleLayoutUpdated"><GridItemv-for="item in layout":key="item.i":x="item.x":y="item.y":w="item.w":h="item.h"><div class="grid-item">{{ item.i }}</div></GridItem></GridLayout>
</template><script>
import { GridLayout, GridItem } from "vue-grid-layout";export default {components: {GridLayout,GridItem,},data() {return {layout: [{ i: "0", x: 0, y: 0, w: 2, h: 2 },{ i: "1", x: 2, y: 0, w: 2, h: 4 },{ i: "2", x: 4, y: 0, w: 2, h: 5 },],};},methods: {handleLayoutUpdated(newLayout) {console.log("Layout updated:", newLayout);},},
};
</script>

樣式自定義

你可以根據項目需求自定義每個 GridItem 的樣式。以下是一個簡單的樣式示例。

<template><GridLayout :layout.sync="layout" :col-num="12" :row-height="30"><GridItemv-for="item in layout":key="item.i":x="item.x":y="item.y":w="item.w":h="item.h"><div class="custom-grid-item">{{ item.i }}</div></GridItem></GridLayout>
</template><style scoped>
.custom-grid-item {background-color: #f0f0f0;border: 1px solid #ddd;display: flex;align-items: center;justify-content: center;padding: 10px;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
</style>

參考資源

  • vue-grid-layout GitHub 倉庫
  • vue-grid-layout 官方文檔

這篇教程概述了 vue-grid-layout 的基本和高級使用方法。如果你有任何問題或需要更多功能,可以參考官方文檔或相關資源。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44129.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44129.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44129.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

怎樣在 C 語言中進行類型轉換?

&#x1f345;關注博主&#x1f397;? 帶你暢游技術世界&#xff0c;不錯過每一次成長機會&#xff01; &#x1f4d9;C 語言百萬年薪修煉課程 通俗易懂&#xff0c;深入淺出&#xff0c;匠心打磨&#xff0c;死磕細節&#xff0c;6年迭代&#xff0c;看過的人都說好。 文章目…

暑假自律日記九

7.10 &#xff08;半小時日記打卡之——暑假第九天&#xff09; 前言&#xff1a;或許是累了&#xff0c;今天的效率和進度可以說是歷史最低了&#xff0c;調休了一天&#xff0c;算是歇會 日程 八點二十起床&#xff0c;在床上賴了一會 九點二十抵達逸夫樓&#xff0c;開始補…

kafka發送消息流程

配置props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, RoundRobinPartitioner.class); public Map<String,Object> producerConfigs(){Map<String,Object> props new HashMap<>();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers…

Spring Boot中的安全配置與實現

Spring Boot中的安全配置與實現 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將深入探討Spring Boot中的安全配置與實現&#xff0c;看看如何保護你的…

在表格中把tab換成enter鍵------ivx

為了方便用戶輸入&#xff0c;把tab鍵替換成enter回車 方法如下&#xff1a; 添加一個fx函數 document.addEventListener(‘keydown’, function(event) { if (event.key ‘Enter’ && !event.shiftKey) { event.preventDefault(); var focusableElements document.q…

昇思25天打卡營-mindspore-ML- Day22-應用實踐-自然語言處理-LSTM+CRF序列標注

昇思25天打卡營-mindspore-ML- Day22-應用實踐-自然語言處理-LSTMCRF序列標注 今天學習了 LSTMCRF 序列標注方法&#xff0c;它是一種結合了循環神經網絡&#xff08;RNN&#xff09;和條件隨機場&#xff08;CRF&#xff09;的強大模型&#xff0c;用于處理序列標注問題&#…

【C++BFS】690. 員工的重要性

本文涉及知識點 CBFS算法 LeetCode690. 員工的重要性 你有一個保存員工信息的數據結構&#xff0c;它包含了員工唯一的 id &#xff0c;重要度和直系下屬的 id 。 給定一個員工數組 employees&#xff0c;其中&#xff1a; employees[i].id 是第 i 個員工的 ID。 employees[…

RabbitMQ 高級功能

RabbitMQ 是一個廣泛使用的開源消息代理&#xff0c;它支持多種消息傳遞協議&#xff0c;可以在分布式系統中用于可靠的消息傳遞。除了基本的消息隊列功能外&#xff0c;RabbitMQ 還提供了一些高級功能&#xff0c;增強了其在高可用性、擴展性和靈活性方面的能力。以下是一些主…

軟件架構之嵌入式系統設計(2)

軟件架構之嵌入式系統設計&#xff08;2&#xff09; 12.4 嵌入式網絡系統12.4.1 現場總線網12.4.2 家庭信息網11.4.3 無線數據通信網12.4.4 嵌入式 Internet 12.5 嵌入式數據庫管理系統12.5.1 使用環境的特點12.5.2 系統組成與關鍵技術 12.6 實時系統與嵌入式操作系統12.6.1 嵌…

MyBatis(38)MyBatis 如何與 Spring Boot 集成,有哪些實踐技巧

集成MyBatis與Spring Boot可以極大地提升開發效率&#xff0c;簡化配置&#xff0c;并利用Spring Boot的自動配置特性優化項目結構和性能。下面我們將詳細探討如何實現這一集成&#xff0c;并分享一些實踐技巧。 1. 添加依賴 首先&#xff0c;在pom.xml中添加MyBatis和Spring…

AI學習指南機器學習篇-聚類樹的剪枝

AI學習指南機器學習篇-聚類樹的剪枝 在機器學習領域&#xff0c;聚類是一種常用的無監督學習方法&#xff0c;通過對數據進行分組來發現數據中的結構和模式。聚類樹是一種常用的聚類算法之一&#xff0c;它通過構建一個樹狀結構來展示聚類的層次關系&#xff0c;并能夠幫助我們…

Linux 忘記root密碼,通過單用戶模式修改

銀河麒麟桌面操作系統 V10&#xff08;sp1&#xff09;”忘記用戶密碼&#xff0c;需要修改用戶密碼所寫&#xff0c;可用于 X86 架構和 arm 架構。 2. 選擇第一項&#xff0c;在上圖界面按“e”鍵進行編輯修改。 3. 在以 linux 開頭這行的行末&#xff0c;添加“init/bin/bas…

Rockchip Android平臺編譯生成userdata.img

Rockchip Android平臺編譯生成userdata.img 適用版本 本修改方法適用于Android12及以上版本 代碼修改 device/rockchip/rk3576&#xff1a; --- a/rk3576_u/BoardConfig.mkb/rk3576_u/BoardConfig.mk-28,4 28,7 PRODUCT_KERNEL_CONFIG pcie_wifi.configBOARD_GSENSOR_MXC…

SSE(Server-Send-Event)服務端推送數據技術

SSE&#xff08;Server-Send-Event&#xff09;服務端推送數據技術 大家是否遇到過服務端需要主動傳輸數據到客戶端的情況&#xff0c;目前有三種解決方案。 客戶端輪詢更新數據。服務端與客戶端建立 Socket 連接雙向通信服務端與客戶建立 SSE 連接單向通信 幾種方案的比較&…

【前端】fis框架學習

文章目錄 1. 介紹 1. 介紹 FIS是專為解決前端開發中自動化工具、性能優化、模塊化框架、開發規范、代碼部署、開發流程等問題的工具框架。 使用FIS我們可以快速的完成各種前端項目的資源壓縮、合并等等各種性能優化工作&#xff0c;同時FIS還提供了大量的開發輔助功能 首先我們…

Nginx上配置多個網站

一、需求描述 我們只有一臺安裝了Nginx的服務器,但是我們需要實現在這臺服務器上部署多個網站,用以對外提供服務。 二、Nginx上配置多個網站分析 一般網站的格式為:【http://ip地址:端口號/URI】(比如:http://192.168.3.201:80),IP地址也可用域名表示;那么要實現在Nginx…

QT實現WebSocket通信

文章目錄 WebSocket服務端WebSocket客戶端html websocket客戶端在Qt5中實現WebSocket通信可以通過使用QtWebSockets模塊來實現。這個模塊提供了一個WebSocket客戶端和服務器的實現,可以很方便地在你的應用程序中集成WebSocket功能。 使用的時候,首先在pro工程文件中添加對應的…

【Vue】vue-element-admin概述

一、項目簡介 定位&#xff1a;vue-element-admin是一個后臺集成解決方案&#xff0c;旨在提供一種快速開發企業級后臺應用的方案&#xff0c;讓開發者能更專注于業務邏輯和功能實現&#xff0c;而非基礎架構的搭建。技術棧&#xff1a;該項目基于Vue.js、Element UI、Vue Rou…

Redis 7.x 系列【24】哨兵模式配置項

有道無術&#xff0c;術尚可求&#xff0c;有術無道&#xff0c;止于術。 本系列Redis 版本 7.2.5 源碼地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目錄 1. 前言2. 配置項2.1 protected-mode2.2 port2.3 daemonize2.4 pidfile2.5 loglevel2.…

i18n、L10n、G11N 和 T9N 的含義

注&#xff1a;機翻&#xff0c;未校對。 Looking into localization for the first time can be terrifying, if only due to all of the abbreviations. But the meaning of i18n, L10n, G11N, and T9N, are all very easy to understand. 第一次研究本地化可能會很可怕&…