|
|
|
|
@ -39,11 +39,15 @@
|
|
|
|
|
}"
|
|
|
|
|
>
|
|
|
|
|
<div class="head" id="head">
|
|
|
|
|
<div class="line" v-if="lineData" :style="{
|
|
|
|
|
<div class="line" v-if="lineData && distance1>0" :style="{
|
|
|
|
|
width:lineData.distance + 'px',
|
|
|
|
|
transform: ` rotate(${lineData.degree}deg)`
|
|
|
|
|
}"
|
|
|
|
|
></div>
|
|
|
|
|
>
|
|
|
|
|
<span style="color: #fff;position:absolute;left: 50%;transform: translateX(-50%)">
|
|
|
|
|
{{ distance1.toFixed(0) }}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="scan"></div>
|
|
|
|
|
</div>
|
|
|
|
|
@ -58,7 +62,10 @@
|
|
|
|
|
bottom: `${getDotY(dot.y)}%`,
|
|
|
|
|
transform: `translate(-50%, 50%) `
|
|
|
|
|
}"
|
|
|
|
|
></div>
|
|
|
|
|
style="white-space: nowrap"
|
|
|
|
|
>
|
|
|
|
|
<!-- {{ getDotX(dot.x) }} - {{ getDotY(dot.y) }}-->
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
@ -69,6 +76,8 @@ import {ref, computed, onMounted, onBeforeUnmount, watch, nextTick} from 'vue'
|
|
|
|
|
|
|
|
|
|
const boxRef = ref(null)
|
|
|
|
|
|
|
|
|
|
const distance1 = ref(0)
|
|
|
|
|
|
|
|
|
|
const props = defineProps({
|
|
|
|
|
width: {type: Number, required: true,},
|
|
|
|
|
height: {type: Number, required: true,},
|
|
|
|
|
@ -78,8 +87,21 @@ const props = defineProps({
|
|
|
|
|
})
|
|
|
|
|
const boxContentX = ref(0)
|
|
|
|
|
const boxContentY = ref(0)
|
|
|
|
|
watch(() => props.boxPos, (newVal, oldVal) => {
|
|
|
|
|
watch(() => JSON.stringify(props.boxPos), (newVal, oldVal) => {
|
|
|
|
|
getBoxPos()
|
|
|
|
|
getDistanceAndZoom()
|
|
|
|
|
if (distance1.value) {
|
|
|
|
|
if (distance1.value <= 100) {
|
|
|
|
|
zoomScale(props.boxPos.y, 1)
|
|
|
|
|
if (distance1.value <= 10) {
|
|
|
|
|
zoomScale(props.boxPos.y, 2)
|
|
|
|
|
}
|
|
|
|
|
getBoxPos()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (props.dotIndex >= 0) {
|
|
|
|
|
getLineData('head', `dot${props.dotIndex + 1}`)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
getBoxPos()
|
|
|
|
|
@ -90,10 +112,36 @@ onMounted(() => {
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
watch(() => props.dotIndex, (newVal, oldVal) => {
|
|
|
|
|
getBoxPos()
|
|
|
|
|
getDistanceAndZoom()
|
|
|
|
|
if (distance1.value) {
|
|
|
|
|
if (distance1.value <= 100) {
|
|
|
|
|
zoomScale(props.boxPos.y, 1)
|
|
|
|
|
if (distance1.value <= 10) {
|
|
|
|
|
zoomScale(props.boxPos.y, 2)
|
|
|
|
|
}
|
|
|
|
|
getBoxPos()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (props.dotIndex >= 0) {
|
|
|
|
|
getLineData('head', `dot${props.dotIndex + 1}`)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
const getDistanceAndZoom = () => {
|
|
|
|
|
if (props.dotIndex === -1) {
|
|
|
|
|
distance1.value = 0
|
|
|
|
|
} else {
|
|
|
|
|
let dotx = props.dots[props.dotIndex].x
|
|
|
|
|
let doty = props.dots[props.dotIndex].y
|
|
|
|
|
let carx = props.boxPos.x
|
|
|
|
|
let cary = props.boxPos.y
|
|
|
|
|
let a = dotx - carx
|
|
|
|
|
let b = doty - cary
|
|
|
|
|
distance1.value = Math.sqrt(a * a + b * b);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
const getBoxPos = () => {
|
|
|
|
|
centerValue.value = props.boxPos.y
|
|
|
|
|
boxContentX.value = (props.boxPos.x / props.width) * 100
|
|
|
|
|
@ -143,6 +191,9 @@ const zoomType = ref(0)
|
|
|
|
|
function zoomScale(value, type) {
|
|
|
|
|
centerValue.value = value
|
|
|
|
|
zoomType.value = type
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
getLineData('head', `dot${props.dotIndex + 1}`)
|
|
|
|
|
}, 10)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// zoomScale(300, 1)
|
|
|
|
|
@ -171,7 +222,7 @@ const leftTicks = computed(() => {
|
|
|
|
|
return arr
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let factor = zoomType.value === 1 ? 10 : zoomType.value === 2 ? 100 : 1
|
|
|
|
|
let factor = zoomType.value === 1 ? 10 : zoomType.value === 2 ? 50 : 1
|
|
|
|
|
let step = Math.floor(10 / factor)
|
|
|
|
|
if (step < 1) step = 1
|
|
|
|
|
|
|
|
|
|
|