1. 程式人生 > 其它 >Vue Grid Layout - ️ Vue.js 實現工作臺的card拖拽效果

Vue Grid Layout - ️ Vue.js 實現工作臺的card拖拽效果

npm install vue-grid-layout --save
 import VueGridLayout from 'vue-grid-layout';
<template>
    <div>
        <grid-layout :layout.sync="layout"
                     :col-num="colNum"
                     :row-height="30"
                     :is-draggable="draggable"
                     :is-resizable
="resizable" :vertical-compact="true" :use-css-transforms="true" > <grid-item v-for="item in layout" :static="item.static" :x="item.x" :y="item.y" :w
="item.w" :h="item.h" :i="item.i" > <el-card class="box-card" style="width: 100%;height: 100%;"> <div slot="header" class="clearfix"> <span>卡片名稱</span> <el-button
style="float: right; padding: 3px 0" type="text">操作按鈕</el-button> </div> <div v-for="o in 4" :key="o"> {{'列表內容 ' + o }} </div> </el-card> </grid-item> </grid-layout> </div> </template> <script> import { GridLayout, GridItem } from "vue-grid-layout" export default { components: { GridLayout, GridItem }, data() { return { layout: [ { x: 0, y: 0, w: 4, h: 5, i: "0" }, { x: 2, y: 0, w: 4, h: 5, i: "1" }, { x: 4, y: 0, w: 4, h: 5, i: "2" }, { x: 6, y: 0, w: 4, h:5, i: "3" }, { x: 8, y: 0, w: 4, h: 5, i: "4" }, ], draggable: true, resizable: true, colNum: 12, } }, mounted() { }, methods: { } } </script> <style> .layoutJSON { background: #ddd; border: 1px solid black; margin-top: 10px; padding: 10px; } .columns { -moz-columns: 120px; -webkit-columns: 120px; columns: 120px; } /*************************************/ .remove { position: absolute; right: 2px; top: 0; cursor: pointer; } .vue-grid-layout { background: #eee; } .vue-grid-item:not(.vue-grid-placeholder) { background: #ccc; /*border: 1px solid black;*/ } .vue-grid-item .resizing { opacity: 0.9; } .vue-grid-item .static { background: #cce; } .vue-grid-item .text { font-size: 24px; text-align: center; position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; height: 100%; width: 100%; } .vue-grid-item .no-drag { height: 100%; width: 100%; } .vue-grid-item .minMax { font-size: 12px; } .vue-grid-item .add { cursor: pointer; } .vue-draggable-handle { position: absolute; width: 20px; height: 20px; top: 0; left: 0; background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'><circle cx='5' cy='5' r='5' fill='#999999'/></svg>") no-repeat; background-position: bottom right; padding: 0 8px 8px 0; background-repeat: no-repeat; background-origin: content-box; box-sizing: border-box; cursor: pointer; } </style>