@ctsy/layui-vue
Version:
a component library for Vue 3 base on layui-vue
107 lines (106 loc) • 4.72 kB
JavaScript
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
import { defineComponent, ref, onMounted, watch, provide, openBlock, createElementBlock, mergeProps, unref, toHandlers, renderSlot } from "vue";
var index = "";
const __default__ = {
name: "laySplitPanel"
};
const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({}, __default__), {
props: {
vertical: { type: Boolean, default: false },
minSize: { default: 50 }
},
setup(__props) {
const props = __props;
let domEvent = ref();
let domStatus = ref(false);
const target = ref();
onMounted(() => {
const boxWidth = target.value.offsetWidth;
const boxHeight = target.value.offsetHeight;
window.addEventListener("scroll", (event) => {
console.log(event);
});
target.value.addEventListener("mousemove", (event) => {
if (domStatus.value) {
const prevDom = domEvent.value.target.previousElementSibling;
const nextDom = domEvent.value.target.nextElementSibling;
if (!props.vertical) {
const prevDomLeft = domEvent.value.target.previousElementSibling.offsetLeft;
const prevDomWidth = domEvent.value.target.previousElementSibling.offsetWidth;
const nextDomWidth = domEvent.value.target.nextElementSibling.offsetWidth;
const otherWidth = boxWidth - (prevDomWidth + nextDomWidth + 5);
const otherWidthPercentage = (prevDomWidth + nextDomWidth + 5) / boxWidth * 100;
if (event.layerX - prevDomLeft < props.minSize || boxWidth - (event.layerX - prevDomLeft) - otherWidth < props.minSize) {
return false;
}
prevDom.style.width = (event.layerX - prevDomLeft) / (prevDomWidth + nextDomWidth + 5) * otherWidthPercentage + "%";
nextDom.style.width = (boxWidth - (event.layerX - prevDomLeft) - otherWidth) / (prevDomWidth + nextDomWidth + 5) * otherWidthPercentage + "%";
} else {
const prevDomTop = domEvent.value.target.previousElementSibling.offsetTop;
const prevDomHeight = domEvent.value.target.previousElementSibling.offsetHeight;
const nextDomHeight = domEvent.value.target.nextElementSibling.offsetHeight;
const otherHeight = boxHeight - (prevDomHeight + nextDomHeight + 5);
const otherHeightPercentage = (prevDomHeight + nextDomHeight + 5) / boxHeight * 100;
if (event.layerY - prevDomTop < props.minSize || boxHeight - (event.layerY - prevDomTop) - otherHeight < props.minSize) {
return false;
}
prevDom.style.height = (event.layerY - prevDomTop) / (prevDomHeight + nextDomHeight + 5) * otherHeightPercentage + "%";
nextDom.style.height = (boxHeight - (event.layerY - prevDomTop) - otherHeight) / (prevDomHeight + nextDomHeight + 5) * otherHeightPercentage + "%";
}
}
});
});
const moveChange = (event, status) => {
domEvent.value = event;
domStatus.value = status;
};
const mouseup = () => {
domStatus.value = false;
};
const steps = ref([]);
watch(steps, () => {
steps.value.forEach((instance, index2) => {
instance.setIndex(index2);
});
});
provide("laySplitPanel", {
props,
steps,
moveChange
});
return (_ctx, _cache) => {
return openBlock(), createElementBlock("div", mergeProps({
ref_key: "target",
ref: target,
class: ["lay-split-panel", __props.vertical ? "lay-split-panel-vertical" : ""],
style: {
cursor: unref(domStatus) ? !__props.vertical ? "col-resize" : "row-resize" : ""
}
}, toHandlers({ mouseup })), [
renderSlot(_ctx.$slots, "default")
], 16);
};
}
}));
_sfc_main.install = (app) => {
app.component(_sfc_main.name, _sfc_main);
};
export { _sfc_main as default };