vue-x-split-panel
v1.0.1
Published
一个基于Vue2的分割器工具
Downloads
2
Readme
vue-x-split-panel
一个简单使用的分割器工具
- 支持横向、纵向分隔
- 支持被分隔状态保存
- 支持分隔栏自定义
- 支持分区域样式自定义
- 支持一键收起分隔区域
用法示例
有两个元素的分割,分别占25%和75%的宽度,分隔栏距离两侧被分隔区域距离为20px,并自定义分隔栏的生程、自定义分隔区域的样式
<x-split style="height: 500px;" :sizes="[25,75]"
:gutter-interval="20"
debug
:gutter="handleGutter"
:gutter-color="'#eee'"
:element-style="handleElementStyle"
:gutter-style="handleGutterStyle">
<x-split-area>
panel left
</x-split-area>
<x-split-area>
panel right
</x-split-area>
</x-split>
<script>
export default {
data() {
return {}
},
methods: {
handleGutter(index, direction, pairElement) {
const gutter = document.createElement('div')
gutter.className = `gutter gutter-${direction}`
return gutter
},
handleElementStyle(dimension, elementSize, gutterSize, index) {
return {
'flex-basis': 'calc(' + elementSize + '% - ' + gutterSize + 'px)',
}
},
handleGutterStyle(dimension, gutterSize, index) {
return {
'flex-basis': gutterSize + 'px',
}
}
}
}
</script>
有两个元素的分割,分别占25%和75%的宽度。
<x-split style="height: 500px;" :sizes="[25,75]">
<x-split-area>
panel left
</x-split-area>
<x-split-area>
panel right
</x-split-area>
</x-split>
或
<x-split style="height: 500px;">
<x-split-area :size="25">
panel left
</x-split-area>
<x-split-area :size="75">
panel right
</x-split-area>
</x-split>
由三个元素组成的拆分,从偶数宽度开始,最小宽度分别为100px、100px和300px。
<x-split style="height: 500px;" :sizes="[33,33,33]" :minSizes="[100,100,100]">
<x-split-area>
panel left
</x-split-area>
<x-split-area>
panel center
</x-split-area>
<x-split-area>
panel right
</x-split-area>
</x-split>
或
<x-split style="height: 500px;">
<x-split-area :size="33" :minSize="100">
panel left
</x-split-area>
<x-split-area :size="33" :minSize="100">
panel center
</x-split-area>
<x-split-area :size="33" :minSize="300">
panel right
</x-split-area>
</x-split>
有两个元素的垂直拆分。
<x-split style="height: 500px;" :direction="vertical">
<x-split-area>
panel left
</x-split-area>
<x-split-area>
panel center
</x-split-area>
</x-split>
A将分隔栏大小设置为20px。
<x-split style="height: 500px;" :gutterSize="20">
<x-split-area>
panel left
</x-split-area>
<x-split-area>
panel center
</x-split-area>
</x-split>
事件触发
<x-split style="height: 500px;" @onDragEnd="onDragEnd" @onDragStart="onDragStart" onDrag="onDrag">
<x-split-area>
panel left
</x-split-area>
<x-split-area>
panel center
</x-split-area>
</x-split>
methods: {
onDragStart (size) {
console.log('Drag Start', size) // callback existing size
},
onDrag (size) {
console.log('on Drag', size) // callback new size
},
onDragEnd (size) {
console.log('Drag End', size) // callback new size
}
}
重置面板并获取重置后的新尺寸
<x-split style="height: 500px;" ref="mySplit">
<x-split-area>
panel left
</x-split-area>
<x-split-area>
panel center
</x-split-area>
</x-split>
methods: {
Reset () {
console.log(this.$refs.mySplit.reset())
}
getSizes () {
console.log(this.$refs.mySplit.getSizes())
}
}
API
Split 属性
| 属性名 | 类型 | 默认值 | 描述 |
|--------------------|--------------------|-------------------------------------------------------------------------|----------------------------------------------------------------------------------|
| debug
| Boolean
| false
| 是否是是否调试模式,设置为true控制台将会打印一些必要的信息 |
| storeKey
| Function
| () => 'x-split_' + btoa(window.location.href)
| 分隔器的key,可用来缓存位置 |
| autoSaveSize
| Boolean
| true | 是否自动保存拖动后各个分隔区域的最后的大小 |
| storeSizes
| Function
| (key, sizes) => { localStorage.setItem(key, JSON.stringify(sizes)) }
| 调用这个函数来存储拖动后各个分隔区域的最后的大小 |
| getStoreSizes
| Function
| key => JSON.parse(localStorage.getItem(key))
| 调用这个函数来获取存储拖动后各个分隔区域的最后的大小 |
| removeStoreSizes
| Function
| key => localStorage.removeItem(key)
| 调用这个函数来删除存储拖动后各个分隔区域的最后的大小 |
| direction
| String
| horizontal | 拆分方向:水平:horizontal、垂直:vertical |
| cursor
| String\|Function
| direction => direction === 'horizontal' ? 'col-resize' : 'row-resize'
| 拖动时要显示的光标 |
| elementStyle
| Function
| | 调用这个函数来设置每个被分割的区间的样式 |
| gutter
| Function
| | 调用这个函数来创建分隔栏 |
| gutterColor
| String
| #eee
| 分隔栏颜色 |
| gutterInterval
| NUmber
| | 分隔栏与分隔区域之间的间隔(以像素为单位),水平分隔则是分别距离上下两侧分隔区域的间隔,垂直分隔则是分别距离左右两侧分隔区域的间隔 |
| gutterStyle
| Function
| | 调用这个函数来设置分隔栏的样式 |
| gutterSize
| Number
| 8 | 分隔栏大小(以像素为单位) |
| gutterAlign
| String
| center | 分隔栏在各个分割区域的对齐方式。start
:收缩第一个分隔区域时适合; end
:收缩最后一个分隔区域时适合;center
:可动态调节各分隔区域时适合 |
| snapOffset
| Number
| 30 | 捕捉到以像素为单位的最小大小偏移 |
| dragInterval
| Number
| 1 | 每次拖动递增的像素值 |
| sizes
| Array
| [] | 每个分割区域的初始大小(以百分比或CSS值为单位) |
| minSizes
| Array
| [] | 每个分割区域的最小大小(单位为像素) |
| maxSize
| Array
| [] | 每个分割区域的最大大(单位为像素) |
| expandToMin
| Array
| [] | 将分割区域初始大小设置为minSize
|
Split 事件
| 事件名称 | 描述 | 返回值 |
|---------------|---------|----------|
| onDrag
| 拖动过程中回调 | 当前的 size |
| onDragStart
| 拖动开始回调. | 新的 size |
| onDragEnd
| 拖动结束基调 | 新的 size |
Split 方法
| 方法名称 | 描述 | 参数 |
|------------|---------------------------------------------------------------------------|----------------------------------|
| reset
| 重置 | none |
| setSizes
| 设置分隔各个分割区域的大小,参数sizes代表各分隔区域大小分布数组 | sizes |
| getSizes
| 获取当前各个分割区域的百分比数对应的数组,convertPercentageToSpecificValue 决定是否将百分比转化为具体值 | convertPercentageToSpecificValue |
| collapse
| collapse将下标“index”处分隔区域的大小更改为“minSize”。除最后一个元素外,所有元素都向前(左侧或顶部)折叠。最后一个倒在后面 | index |
| destroy
| 销毁 | none |
SplitArea 属性(优先于Split属性中的sizes、minSizes、maxSizes)
| 属性名 | 类型 | 默认值 | 描述 |
|-----------|----------|----------|---------------------------|
| size
| Array
| 50 | 当前分割区域的初始大小(以百分比或CSS值为单位) |
| minSize
| Number
| 100 | 当前分割区域的最小大小 |
| maxSize
| Number
| Infinity | 当前分割区域的最大大小 |