|
|
|
|
@ -49,7 +49,7 @@
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="scan"></div>
|
|
|
|
|
<div :class="scan ? 'scan' : 'scan1'"></div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div
|
|
|
|
|
@ -70,6 +70,7 @@
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
v-show="dot1Show"
|
|
|
|
|
v-for="(dot, index) in dots1"
|
|
|
|
|
:key="index"
|
|
|
|
|
class="dot"
|
|
|
|
|
@ -99,13 +100,15 @@ const boxRef = ref(null)
|
|
|
|
|
const distance1 = ref(0)
|
|
|
|
|
|
|
|
|
|
const props = defineProps({
|
|
|
|
|
width: {type: Number, required: true,},
|
|
|
|
|
height: {type: Number, required: true,},
|
|
|
|
|
boxPos: {type: Object, required: true,},
|
|
|
|
|
dots: {type: Array, required: true,},
|
|
|
|
|
dotIndex: {type: Number, required: true,},
|
|
|
|
|
dots1: {type: Array, required: true,},
|
|
|
|
|
dotIndex1: {type: Number, required: true,}
|
|
|
|
|
width: {type: Number, required: true},
|
|
|
|
|
height: {type: Number, required: true},
|
|
|
|
|
boxPos: {type: Object, required: true},
|
|
|
|
|
dots: {type: Array, required: true},
|
|
|
|
|
dotIndex: {type: Number, required: true},
|
|
|
|
|
dots1: {type: Array, required: true},
|
|
|
|
|
dotIndex1: {type: Number, required: true},
|
|
|
|
|
dot1Show: {type: Boolean, required: true},
|
|
|
|
|
scan: {type: Boolean, required: true},
|
|
|
|
|
})
|
|
|
|
|
const boxContentX = ref(0)
|
|
|
|
|
const boxContentY = ref(0)
|
|
|
|
|
@ -239,7 +242,6 @@ function zoomScale(value, type) {
|
|
|
|
|
}, 10)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// zoomScale(300, 1)
|
|
|
|
|
|
|
|
|
|
function getAxisRange() {
|
|
|
|
|
if (!leftTicks.value || leftTicks.value.length === 0) return {min: 0, max: props.height}
|
|
|
|
|
@ -265,8 +267,8 @@ const leftTicks = computed(() => {
|
|
|
|
|
return arr
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let factor = zoomType.value === 1 ? Math.ceil(props.height / 120) : zoomType.value === 2 ? Math.ceil(props.height / 30) : 1
|
|
|
|
|
let step = Math.floor(10 / factor)
|
|
|
|
|
let factor = zoomType.value === 1 ? (Math.sqrt(props.height / 22)) : 1
|
|
|
|
|
let step = (10 / factor)
|
|
|
|
|
if (step < 1) step = 1
|
|
|
|
|
|
|
|
|
|
const visibleCount = 21
|
|
|
|
|
@ -274,6 +276,7 @@ const leftTicks = computed(() => {
|
|
|
|
|
|
|
|
|
|
let startValue = centerValue.value - half * step
|
|
|
|
|
let endValue = centerValue.value + half * step
|
|
|
|
|
console.log(endValue - startValue)
|
|
|
|
|
|
|
|
|
|
if (startValue < 0) {
|
|
|
|
|
endValue += -startValue
|
|
|
|
|
@ -289,12 +292,16 @@ const leftTicks = computed(() => {
|
|
|
|
|
for (let i = 0; i <= totalSteps; i++) {
|
|
|
|
|
let value = startValue + i * step
|
|
|
|
|
value = Math.floor(value) // 强制整数
|
|
|
|
|
if (value % 10 !== 0) {
|
|
|
|
|
let num = Math.floor(value / 10) * 10
|
|
|
|
|
if (!arr.find(e => e.value === num)) {
|
|
|
|
|
value = Math.floor(value / 10) * 10
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
let isMajor = false
|
|
|
|
|
|
|
|
|
|
if (zoomType.value === 1) {
|
|
|
|
|
isMajor = value % 10 === 0
|
|
|
|
|
} else if (zoomType.value === 2) {
|
|
|
|
|
isMajor = true // 类型2只显示大刻度
|
|
|
|
|
} else {
|
|
|
|
|
isMajor = (value * factor) % 100 === 0
|
|
|
|
|
}
|
|
|
|
|
@ -313,7 +320,7 @@ const ticks = computed(() => {
|
|
|
|
|
for (let i = 0; i <= steps; i++) {
|
|
|
|
|
let value = i * step
|
|
|
|
|
if (value > props.width) value = props.width // 防止超过最大值
|
|
|
|
|
const isMajor = value % 100 === 0
|
|
|
|
|
const isMajor = value % 10 === 0
|
|
|
|
|
const percent = (value / props.width) * 100
|
|
|
|
|
arr.push({value, major: isMajor, percent})
|
|
|
|
|
}
|
|
|
|
|
@ -477,6 +484,17 @@ const ticks = computed(() => {
|
|
|
|
|
right: 15px;
|
|
|
|
|
transform: translateY(-50%);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.scan1 {
|
|
|
|
|
position: absolute;
|
|
|
|
|
background-image: url("../assets/scan.png");
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
width: 100px;
|
|
|
|
|
height: 100px;
|
|
|
|
|
top: 50%;
|
|
|
|
|
right: 15px;
|
|
|
|
|
transform: translateY(-50%);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|