@jecloud/ui
Version:
JECloud UI库,基于ant-design-vue封装
1 lines • 1.74 kB
JavaScript
import{hasClass as e,forEach as i,toggleClass as n,debounce as t}from"@jecloud/utils";import{setDrawerSize as o}from"../config";export function useSplitter(l){var r=l.panel,a=l.refMaps,c=null,u=t((function(t){var o,l=function(n,t){var o;if(void 0===t&&(t=!0),e(n,"je-panel-splitter")&&i(r.getPanelDomItems("items"),(function(e){var i=e.item,t=e.splitter,l=e.region;n!==t||(o={region:l,container:i,splitter:t})})),o&&t){var l=r.getPanelItem(o.region);if(l.split){var c=a.center.value,u=c.offsetHeight,s=c.offsetWidth,f=o.container,v=f.offsetHeight,g=f.offsetWidth,p=Object.assign({},null==l?void 0:l.props,{collapsed:null==l?void 0:l.collapsed}),m=["top","bottom"].includes(o.region),d=m?v+u:g+s;return Object.assign(o,{panelItem:l,containerSize:m?v:g,containerHeight:v,minSize:p.minSize||0,maxSize:d<p.maxSize?d:p.maxSize,vertical:m,config:p}),o}}}(t.target);if(1===t.which&&l){if(null===(o=l.config.collapsed)||void 0===o?void 0:o.value)return;c=Object.assign({beginX:t.clientX,beginY:t.clientY},l),n(l.splitter,"dragging",!0)}}),100),s=function(){u.cancel()},f=function(){s(),c&&(n(c.splitter,"dragging",!1),c=null,r.refreshLayout())};return{onMousedown:function(){for(var e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];u.apply(void 0,e)},onMouseleave:f,onMouseup:function(){if(s(),c){var e=c.moveSize,i=void 0===e?0:e,n=c.containerSize;c.panelItem.setSize(n+i),f()}},onMousemove:function(e){if(c){e.returnValue=!1;var i=c.splitter,n=c.panelItem,t=c.beginX,l=c.beginY,r=c.vertical,a=c.region,u=c.maxSize,s=c.minSize,f=c.containerSize,v=r?e.clientY-l:e.clientX-t,g=["top","left"].includes(a)?v:-v,p=null==n?void 0:n.$el.value.offsetWidth;if(p+g>u||p+g<s)return!1;c.moveSize=g;var m=f+g;i.style[a]=m+"px",o(null==n?void 0:n.$el.value,m)}}}}