# 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 动图可能有点卡顿,但是实际效果还是不错的,希望有用!拜拜!

相关推荐
Awu12276 分钟前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude
咪库咪库咪29 分钟前
Vue3-生命周期
前端
莪_幻尘1 小时前
你的 AI Skill 越多越蠢?Token 上下文爆炸的求生指南
前端·ai编程
lichenyang4531 小时前
从 has.echo 到异步 API 注册表:一次 ASCF API 回调不触发的排查复盘
前端
林瞅瞅1 小时前
Nuxt3 项目部署 Nginx 防盗链后特定 JS 文件 403 问题修复方案
前端
kyriewen2 小时前
别再每次都 Google 了:我整理了前端日常最常踩的 10 个 Git 坑,附速查表
前端·javascript·git
一颗奇趣蛋2 小时前
Web 视频开发完全指南:从入门到精通
前端
非洲农业不发达2 小时前
windows终端体验大升级,让你拥有macos级别的美化
前端·后端
妙码生花3 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十七):登录接口完善,登录页接口整合,解决跨域
前端·后端·ai编程
唐诗3 小时前
改 3 行配置,我的 Tauri dev 冷启动从 100 秒干到 4 秒
前端·客户端