Browse Source

打勾显隐选区

master
zhangjiming 5 months ago
parent
commit
a41c92ccd4
  1. 20
      src/components/Spray.vue
  2. 4
      src/views/SprayView.vue

20
src/components/Spray.vue

@ -5,7 +5,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, useTemplateRef } from "vue";
import { onMounted, useTemplateRef, watch } from "vue";
import { BehaviorSubject, distinctUntilChanged, skip } from "rxjs"; import { BehaviorSubject, distinctUntilChanged, skip } from "rxjs";
import gripper from "@/assets/gripper.png"; import gripper from "@/assets/gripper.png";
@ -36,12 +36,19 @@ const props = defineProps<{
columns: number; columns: number;
rows: number; rows: number;
cellNum: number; cellNum: number;
hideGripper?: boolean;
}>(); }>();
const emit = defineEmits<{ const emit = defineEmits<{
(e: "selectArea", area: GridArea): void; (e: "selectArea", area: GridArea): void;
}>(); }>();
watch(
() => props.hideGripper,
val => {
draw(selectArea);
}
);
const canvas = useTemplateRef("cnv"); const canvas = useTemplateRef("cnv");
const primaryLineColor = "rgb(203,213,245)"; const primaryLineColor = "rgb(203,213,245)";
const subLineColor = "rgb(226,231,232)"; const subLineColor = "rgb(226,231,232)";
@ -80,7 +87,7 @@ moveSubject
} else if (touchedElem === "Gripper") { } else if (touchedElem === "Gripper") {
newArea = applyIncrement(val, selectArea); newArea = applyIncrement(val, selectArea);
} }
newArea && emit("selectArea", newArea);
newArea && emit("selectArea", newArea);
newArea && draw(newArea); newArea && draw(newArea);
}); });
@ -204,6 +211,7 @@ function drawDragLayer(ctx: CanvasRenderingContext2D, area: GridArea) {
function handleStart(event: MouseEvent | TouchEvent) { function handleStart(event: MouseEvent | TouchEvent) {
event.stopPropagation(); event.stopPropagation();
if (!!props.hideGripper) return;
if ("touches" in event) { if ("touches" in event) {
const touchEvent = event.touches[0]; const touchEvent = event.touches[0];
touchPoint.x = touchEvent.pageX - canvas.value!.offsetLeft; touchPoint.x = touchEvent.pageX - canvas.value!.offsetLeft;
@ -268,10 +276,14 @@ function draw(area: GridArea) {
if (!imgLoaded) { if (!imgLoaded) {
gripperImg.onload = () => { gripperImg.onload = () => {
imgLoaded = true; imgLoaded = true;
drawDragLayer(ctx, area);
if (!props.hideGripper) {
drawDragLayer(ctx, area);
}
}; };
} else { } else {
drawDragLayer(ctx, area);
if (!props.hideGripper) {
drawDragLayer(ctx, area);
}
} }
} }
} }

4
src/views/SprayView.vue

@ -63,6 +63,7 @@
:columns="1" :columns="1"
:rows="3" :rows="3"
:cell-num="25" :cell-num="25"
:hideGripper="!checked.find(c => c === '0')"
@select-area="area => onSelectArea(area, 0)" /> @select-area="area => onSelectArea(area, 0)" />
<Spray <Spray
:width="210" :width="210"
@ -74,6 +75,7 @@
:columns="1" :columns="1"
:rows="3" :rows="3"
:cell-num="25" :cell-num="25"
:hideGripper="!checked.find(c => c === '1')"
@select-area="area => onSelectArea(area, 1)" /> @select-area="area => onSelectArea(area, 1)" />
<Spray <Spray
:width="210" :width="210"
@ -85,6 +87,7 @@
:columns="1" :columns="1"
:rows="3" :rows="3"
:cell-num="25" :cell-num="25"
:hideGripper="!checked.find(c => c === '2')"
@select-area="area => onSelectArea(area, 2)" /> @select-area="area => onSelectArea(area, 2)" />
<Spray <Spray
:width="210" :width="210"
@ -96,6 +99,7 @@
:columns="1" :columns="1"
:rows="3" :rows="3"
:cell-num="25" :cell-num="25"
:hideGripper="!checked.find(c => c === '3')"
@select-area="area => onSelectArea(area, 3)" /> @select-area="area => onSelectArea(area, 3)" />
</section> </section>

Loading…
Cancel
Save