# vue实现拖拉拽效果,类似于禅道首页可拖拽排布展示内容(插件-Grid Layout)

vue实现拖拉拽效果,类似于禅道首页可拖拽排布展示内容(插件-Grid Layout)

这个是类似与禅道那种首页有多个指标模块,允许用户自己拼装内容的那种感觉。

实现效果

插件资料

vue3版本

如果项目是vue3 的话使用的是 Grid Layout Plus

官网:grid-layout-plus.netlify.app/zh/

文档:grid-layout-plus.netlify.app/zh/guide/in...

vue2版本

如果项目是vue2版本的话,可以使用 Vue Grid Layout

官网:jbaysolutions.github.io/vue-grid-la...

文档:jbaysolutions.github.io/vue-grid-la...

vue3项目使用Grid Layout

使用的话也比较简单,现在以vue3使用为例介绍。

安装插件

安装的话只需要一行命令就可以执行:

bash 复制代码
npm i grid-layout-plus

or

yarn add grid-layout-plus

导入插件

导入的话直接在需要的页面导入就可以了:

javascript 复制代码
import {GridLayout, GridItem} from 'grid-layout-plus';

当然,也可以挂在到全局上面:

javascript 复制代码
app.component('GridLayout', GridLayout).component('GridItem', GridItem)

开发

引入之后就可以直接用了,这里可以根据官网文档进行开发,下面给一个小的案例:

javascript 复制代码
<template>
	<div class="ed-page">
		<GridLayout v-model:layout="layout" :col-num="24" :restore-on-drag="true" :vertical-compact="true" :row-height="50">
			<GridItem v-for="item in layout"
			          :key="item.i"
			          :x="item.x"
			          :y="item.y"
			          :w="item.w"
			          :h="item.h"
			          :i="item.i"
			          :is-resizable="item.isResizable">
				<p class="text">{{ item.i }}</p>
				<p class="text">{{ item.title }}</p>
				<p class="text">{{ item.url }}</p>
			</GridItem>
		</GridLayout>
	</div>
</template>
<script setup>
import {GridLayout, GridItem} from 'grid-layout-plus';
import {ref} from "vue";

const layout = ref([
	{
		x: 0,
		y: 0,
		w: 12,
		h: 5,
		i: '0',
		static: false,
		isResizable: false,
		url: "https://grid-layout-plus.netlify.app/zh/",
		title: "grid-layout-plus"
	},
	{x: 12, y: 0, w: 12, h: 5, i: '2', static: false},
]);

</script>
<style scoped lang="scss">
.ed-page {
	height: 100%;
	overflow-y: auto;
	overflow-x: hidden;
}

.vgl-layout {
	//background-color: #eee;
}

.vgl-layout::before {
	position: absolute;
	width: calc(100% - 5px);
	height: calc(100% - 5px);
	margin: 5px;
	content: '';
	background-image: linear-gradient(to right, #E9E9EB 1px, transparent 1px),
	linear-gradient(to bottom, #E9E9EB 1px, transparent 1px);
	background-repeat: repeat;
	background-size: calc(calc(100% - 5px) / 24) 60px;
}

:deep(.vgl-item:not(.vgl-item--placeholder)) {
	background-color: #FFF;
	border: 1px solid #909399;
}

:deep(.vgl-item--resizing) {
	opacity: 90%;
}

:deep(.vgl-item--static) {
	background-color: #cce;
}
</style>

看一下效果:

gif 动图可能有点卡顿,但是实际效果还是不错的,希望有用!拜拜!

相关推荐
tao35566712 分钟前
【用AI学前端】HTML-02-HTML 常用标签(基础)
前端·html
2601_9495328416 分钟前
Psello HTML Template: A Developer‘s Deep-Dive Review and Guide - Download Free
前端·windows·html·seo·wordpress·gpl
CappuccinoRose16 分钟前
CSS前端布局总指南
前端·css·学习·布局·flex布局·grid布局·float布局
穿过锁扣的风27 分钟前
如何操作HTML网页
前端·javascript·html
San30.34 分钟前
从零构建坚固的前端堡垒:TypeScript 与 React 实战深度指南
前端·react.js·typescript
yunhuibin1 小时前
VideoPipe环境搭建及编译ubuntu240403
前端·人工智能
CHANG_THE_WORLD1 小时前
PDF文档结构分析 一
前端·pdf
东东5161 小时前
果园预售系统的设计与实现spingboot+vue
前端·javascript·vue.js·spring boot·个人开发
rainbow68892 小时前
Python学生管理系统:JSON持久化实战
java·前端·python
打小就很皮...2 小时前
React Router 7 全局路由保护
前端·react.js·router