split.vue 2.02 KB
<template>
    <div class="split-pane-page-wrapper">
        <Split v-model="offset" @on-moving="handleMoving">
            <div slot="left" class="pane left-pane">
                <Split v-model="offsetVertical" mode="vertical" @on-moving="handleMoving">
                    <div slot="top" class="pane top-pane"></div>
                    <div slot="bottom" class="pane bottom-pane"></div>
                    <div slot="trigger" class="custom-trigger">
                        <Icon class="trigger-icon" :size="22" type="android-more-vertical" color="#000000"/>
                    </div>
                </Split>
            </div>
            <div slot="right" class="pane right-pane"></div>
        </Split>
    </div>
</template>

<script>
    export default {
        name: 'split_pane_page',
        data () {
            return {
                offset: 0.6,
                offsetVertical: '250px'
            }
        },
        methods: {
            handleMoving (e) {
                console.log(e.atMin, e.atMax)
            }
        }
    }
</script>

<style lang="less">
    .center-middle {
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
    }

    .split-pane-page-wrapper {
        height: 600px;
        .pane {
            width: 100%;
            height: 100%;
            &.left-pane {
                background: sandybrown;
            }
            &.right-pane {
                background: palevioletred;
            }
            &.top-pane {
                background: sandybrown;
            }
            &.bottom-pane {
                background: palevioletred;
            }
        }
        .custom-trigger {
            width: 20px;
            height: 20px;
            border-radius: 50%;
            background: #fff;
            position: absolute;
            .center-middle;
            box-shadow: 0 0 6px 0 rgba(28, 36, 56, 0.4);
            cursor: row-resize;
            i.trigger-icon {
                .center-middle;
            }
        }
    }
</style>