Skip to content

Commit 5e9e825

Browse files
committed
调整左侧编辑器大小逻辑
优化移动端体验
1 parent 5b427b1 commit 5e9e825

File tree

5 files changed

+83
-24
lines changed

5 files changed

+83
-24
lines changed

package-lock.json

Lines changed: 45 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
},
1212
"dependencies": {
1313
"@prettier/sync": "^0.5.2",
14+
"@vueuse/core": "^13.1.0",
1415
"base-64": "^1.0.0",
1516
"function-plot": "^2.0.0-0",
1617
"json5": "^2.2.3",

src/App.vue

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
11
<template>
2-
<s-page :theme="theme.initialValue" id="soberpage" ref="soberPage" :class="theme.value">
2+
<s-page
3+
:theme="theme.initialValue"
4+
id="soberpage"
5+
ref="soberPage"
6+
:class="theme.value"
7+
>
38
<s-drawer>
49
<Navbar @toggle-drawer="toogleDrawer" />
5-
<s-drawer
6-
id="content"
7-
:class="{ onDrawerResize }"
8-
ref="innerDrawer"
9-
>
10-
<div
11-
slot="start"
12-
id="editor"
13-
:style="{ width: drawerSizeRatio + 'vw' }"
14-
>
10+
<s-drawer id="content" :class="{ onDrawerResize }" ref="innerDrawer">
11+
<div slot="start" id="editor" :style="{ width: drawerSize + 'px' }">
1512
<Editor />
16-
<div id="divider" @mousedown="handleDrawerResize"></div>
13+
<div id="divider" @pointerdown="handleDrawerResize"></div>
1714
</div>
1815
<Graph />
1916
</s-drawer>
@@ -26,7 +23,7 @@ import Navbar from "./ui/navbar.vue";
2623
import Graph from "./graph/index.vue";
2724
import Editor from "./editor/index.vue";
2825
29-
import { ref, watchEffect } from "vue";
26+
import { computed, ref, watch, watchEffect } from "vue";
3027
import { useTheme } from "@/consts";
3128
const theme = useTheme();
3229
const soberPage = ref<HTMLElementTagNameMap["s-page"]>();
@@ -42,30 +39,43 @@ const innerDrawer = ref<HTMLElementTagNameMap["s-drawer"]>();
4239
const toogleDrawer = () => innerDrawer.value?.toggle();
4340
4441
// Drawer resize
45-
const drawerSizeRatio = ref(33);
42+
import { useWindowSize } from "@vueuse/core";
43+
const { width: windowWidth } = useWindowSize();
44+
const toSize = (percent: number) => (percent / 100) * windowWidth.value;
45+
46+
const drawerMinSize = computed(() => 450);
47+
const drawerMaxSize = computed(() => toSize(75));
48+
49+
const restrictRange = (x: number) =>
50+
Math.min(Math.max(drawerMinSize.value, x), drawerMaxSize.value);
51+
52+
const drawerSize = ref(restrictRange(toSize(33)));
4653
const onDrawerResize = ref(false);
54+
55+
watch(windowWidth, () => (drawerSize.value = restrictRange(drawerSize.value)));
56+
4757
function handleDrawerResize() {
4858
onDrawerResize.value = true;
49-
const xfull = window.innerWidth;
50-
const restrictRange = (x: number, min: number, max: number) =>
51-
Math.max(min, Math.min(x, max));
52-
const toRatio = (x: number) => (x / xfull) * 100;
59+
5360
const mousemove = (event: MouseEvent) =>
54-
(drawerSizeRatio.value = restrictRange(toRatio(event.clientX), 25, 75));
55-
document.addEventListener("mousemove", mousemove);
56-
document.addEventListener("mouseup", () => {
57-
document.removeEventListener("mousemove", mousemove);
61+
(drawerSize.value = restrictRange(event.clientX));
62+
const mouseup = () => {
63+
document.body.removeEventListener("pointermove", mousemove);
64+
document.body.removeEventListener("pointerup", mouseup);
5865
onDrawerResize.value = false;
59-
});
66+
};
67+
document.body.addEventListener("pointermove", mousemove);
68+
document.body.addEventListener("pointerup", mouseup);
6069
}
6170
</script>
6271

6372
<style>
6473
html,
65-
body {
74+
body,:root {
6675
margin: 0;
6776
padding: 0;
6877
overflow: hidden;
78+
user-select: none;
6979
}
7080
s-page {
7181
position: absolute;

src/editor/datum.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,8 @@ watch(locale, () => selectKey.value++);
247247
display: flex;
248248
gap: 10px;
249249
align-items: center;
250+
flex-wrap: wrap-reverse;
251+
justify-content: flex-end;
250252
}
251253
.selectors s-picker {
252254
width: 8em;

src/editor/inputs/strInputs.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,6 @@ const emit = defineEmits(["blur"]);
4444
.inputs s-text-field {
4545
font-size: 22px;
4646
flex-grow: 1;
47+
width: 0;
4748
}
4849
</style>

0 commit comments

Comments
 (0)