修复导览与讲解位置预览逻辑
This commit is contained in:
@@ -126,11 +126,15 @@
|
||||
<text class="layer-mode-label">{{ layerModeActionLabel }}</text>
|
||||
</view>
|
||||
|
||||
<view
|
||||
<scroll-view
|
||||
v-if="showIndoorRightControls && showFloor"
|
||||
class="floor-switcher"
|
||||
:class="`side-${floorSide}`"
|
||||
:style="floorSwitcherStyle"
|
||||
scroll-y
|
||||
:show-scrollbar="false"
|
||||
:scroll-into-view="activeFloorScrollIntoView"
|
||||
:scroll-with-animation="true"
|
||||
>
|
||||
<view
|
||||
v-if="showFloorHeader"
|
||||
@@ -142,15 +146,16 @@
|
||||
<text class="floor-header-label">楼层</text>
|
||||
</view>
|
||||
<view
|
||||
v-for="floor in floorLabels"
|
||||
:key="floor"
|
||||
v-for="floor in floorItems"
|
||||
:id="floor.scrollId"
|
||||
:key="floor.id"
|
||||
class="floor-item"
|
||||
:class="{ active: activeFloor === floor && layerMode !== 'multi' }"
|
||||
@tap="handleFloorChange(floor)"
|
||||
:class="{ active: activeFloorId === floor.id && layerMode !== 'multi' }"
|
||||
@tap="handleFloorChange(floor.label)"
|
||||
>
|
||||
<text class="floor-label">{{ floor }}</text>
|
||||
<text class="floor-label">{{ floor.label }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
<view v-if="showZoomControls" class="zoom-controls" :style="zoomControlsStyle">
|
||||
<view class="zoom-btn" @tap="handleZoomClick('in')">
|
||||
@@ -364,7 +369,7 @@ const props = withDefaults(defineProps<{
|
||||
dimmed: false,
|
||||
targetFocusRequest: null,
|
||||
touchGestureMode: 'orbit',
|
||||
targetFocusDistanceFactor: 0.22,
|
||||
targetFocusDistanceFactor: 0.36,
|
||||
routePreview: null,
|
||||
showRoute: false,
|
||||
disableAutoExit: false,
|
||||
@@ -415,7 +420,11 @@ const indoorRendererRef = ref<{
|
||||
} | null>(null)
|
||||
|
||||
const indoorFloors = computed(() => props.floors.filter((floor) => isIndoorNavigableFloor(floor)))
|
||||
const floorLabels = computed(() => indoorFloors.value.map((floor) => floor.label))
|
||||
const createFloorScrollId = (floorId: string) => `guide-floor-${floorId.replace(/[^a-zA-Z0-9_-]/g, '-')}`
|
||||
const floorItems = computed(() => indoorFloors.value.map((floor) => ({
|
||||
...floor,
|
||||
scrollId: createFloorScrollId(floor.id)
|
||||
})))
|
||||
// #ifdef H5
|
||||
const effectiveIndoorModelSource = computed(() => props.indoorModelSource)
|
||||
// #endif
|
||||
@@ -435,6 +444,29 @@ const activeFloorId = computed(() => {
|
||||
))
|
||||
return normalizedFloor?.id || normalizedFloorId
|
||||
})
|
||||
const activeFloorScrollIntoView = ref('')
|
||||
|
||||
const syncActiveFloorScroll = () => {
|
||||
if (props.mapType !== 'indoor' || props.indoorView === 'overview' || props.layerMode === 'multi') {
|
||||
activeFloorScrollIntoView.value = ''
|
||||
return
|
||||
}
|
||||
|
||||
const matchedFloor = floorItems.value.find((floor) => floor.id === activeFloorId.value)
|
||||
activeFloorScrollIntoView.value = matchedFloor?.scrollId || ''
|
||||
}
|
||||
|
||||
watch(
|
||||
() => [
|
||||
activeFloorId.value,
|
||||
props.indoorView,
|
||||
props.layerMode,
|
||||
props.mapType,
|
||||
floorItems.value.map((floor) => floor.id).join('|')
|
||||
],
|
||||
syncActiveFloorScroll,
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
const searchFieldStyle = computed(() => ({
|
||||
top: props.searchTop
|
||||
|
||||
Reference in New Issue
Block a user