因为常常须要做一些动静布局,做了个vue动静布局组件slot-layout,分享下。

  • 组件地址:
    https://github.com/hzsrc/slot...
  • 装置形式:
    npm i slot-layout

这个组件基于一个布局配置对象,通过调整布局配置对象,最终通过映射到对应的vue组件插槽,来动静进行页面布局,布局和配置比拟不便。

个性

  • 通过js布局对象,齐全管制页面布局。
  • 特地适宜用于低代码平台零碎,只需在运行时依照须要动静传入一个布局配置对象,即可随便调整页面布局。无需事后编写布局代码。
  • 反对多层布局嵌套,可实现任意数目、任意档次的布局。
  • 反对任意长度单位,如px、vw、%、rem。
  • 反对填充式布局。即区块填充斥父容器。
  • 组件自带布局配置性能,可轻松实现布局设计。

用法举例如下:

1、简略例子(单层、两个子节点):
查看成果:https://codepen.io/hzsrc/pen/...

<template>  <slot-layout class="full" :layout="layout">    <div slot="left" class="blk f-center">      left    </div>    <div slot="right" class="blk f-center">      <button @click="layout.isVertical=!layout.isVertical">动静调整布局</button>    </div>  </slot-layout></template><script>import slotLayout from "https://cdn.skypack.dev/slot-layout@1.0.4";export default {  components:{    slotLayout  },  data(){    return {      //布局配置对象      layout: {        aySize: '100%',        isVertical: false,        children: [            {slot: 'left', laySize: '60px'},            {slot: 'right', laySize: 'fill'}        ]      }    }  }};</script>

2、简单的例子:
查看成果

<template>    <div class="full">        <layout-designer v-if="isDesign" class="full" :layout="layout" show-result></layout-designer>        <slot-layout v-else class="full pd-10" :layout="layout" gulp="5px">            <aside slot="tree" class="full f-center">aside</aside>            <header slot="top" class="full f-center">header</header>            <nav slot="title" class="full f-center">                <button @click="resetLayout">动静调整布局</button>            </nav>            <div slot="right" class="full f-center">right</div>            <div slot="bottom" class="full f-center">bottom</div>        </slot-layout>        <a class="absolute" @click="isDesign=!isDesign">{{isDesign ? '运行布局' : '设计布局'}}</a>    </div></template><script>    import slotLayout from 'slot-Layout'    import LayoutDesigner from 'slot-Layout/src/design/layoutDesigner';    export default {        name: 'slotLay',        data() {            return {                isDesign: true,                layout: {                    isVertical: false,                    laySize: '100%',                    children: [                        {                            laySize: '15vw',                            slot: 'tree',                        },                        {                            laySize: 'fill',                            isVertical: true,                            children: [                                {                                    slot: 'title',                                    laySize: '60px'                                },                                {                                    slot: 'top',                                    laySize: '30%',                                },                                {                                    slot: 'bottom',                                    laySize: 'fill',                                }                            ]                        },                        {                            laySize: '100px',                            slot: 'right',                        },                    ]                }            }        },        methods: {            resetLayout() {                this.layout.children.reverse()            }        },        components: {            LayoutDesigner,            slotLayout        }    }</script>