|
@@ -65,7 +65,7 @@
|
|
|
</div>
|
|
|
<img
|
|
|
class="btn-track"
|
|
|
- src="@/assets/images/people-btn-track.png"
|
|
|
+ :src="require(`@/assets/images/people-btn-track-${sceneIdx + 1}.png`)"
|
|
|
alt=""
|
|
|
draggable="false"
|
|
|
>
|
|
@@ -106,10 +106,10 @@
|
|
|
:key="idx"
|
|
|
class="camera-entry"
|
|
|
:class="{
|
|
|
- active: idx === activeCameraIdx
|
|
|
+ active: idx === (mouseEnterCameraItemIdx === -1 ? cameraIdx : mouseEnterCameraItemIdx)
|
|
|
}"
|
|
|
- @mouseenter="activeCameraIdx = idx"
|
|
|
- @mouseleave="activeCameraIdx = sceneIdx"
|
|
|
+ @mouseenter="mouseEnterCameraItemIdx = idx"
|
|
|
+ @mouseleave="mouseEnterCameraItemIdx = -1"
|
|
|
@click="router.push({
|
|
|
name: route.name,
|
|
|
query:{
|
|
@@ -121,18 +121,21 @@
|
|
|
<span>{{ item.name }}</span>
|
|
|
<img
|
|
|
class="bg-normal"
|
|
|
- src="@/assets/images/camera-list-item-bg.png"
|
|
|
+ :src="require(`@/assets/images/camera-list-item-bg-${sceneIdx + 1}.png`)"
|
|
|
alt=""
|
|
|
draggable="false"
|
|
|
>
|
|
|
<img
|
|
|
class="bg-active"
|
|
|
- src="@/assets/images/camera-list-item-bg-active.png"
|
|
|
+ :src="require(`@/assets/images/camera-list-item-bg-active-${sceneIdx + 1}.png`)"
|
|
|
alt=""
|
|
|
draggable="false"
|
|
|
>
|
|
|
</button>
|
|
|
- <button class="next-camera" />
|
|
|
+ <button
|
|
|
+ class="next-camera"
|
|
|
+ @click="onClickNextCamera"
|
|
|
+ />
|
|
|
</div>
|
|
|
<CameraContent1
|
|
|
v-if="showingContentIdx === 1"
|
|
@@ -160,6 +163,53 @@ import * as krfn from "@/libs/pano-core/index.js"
|
|
|
import CameraDesc from '@/components/CameraDesc.vue'
|
|
|
import CharacterDesc from '@/components/CharacterDesc.vue'
|
|
|
import { defineAsyncComponent } from 'vue'
|
|
|
+import sceneTree from '/public/sceneTree.js'
|
|
|
+
|
|
|
+const btnReturnHomeImgUrl = computed(() => {
|
|
|
+ return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/btn-return-home-${sceneIdx.value + 1}.png`) + ')'
|
|
|
+})
|
|
|
+const btnReturnHomeActiveImgUrl = computed(() => {
|
|
|
+ return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/btn-return-home-active-${sceneIdx.value + 1}.png`) + ')'
|
|
|
+})
|
|
|
+
|
|
|
+const btnOnTrack1ImgUrl = computed(() => {
|
|
|
+ return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-1.png`) + ')'
|
|
|
+})
|
|
|
+const btnOnTrack1ActiveImgUrl = computed(() => {
|
|
|
+ return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-1-active.png`) + ')'
|
|
|
+})
|
|
|
+const btnOnTrack2ImgUrl = computed(() => {
|
|
|
+ return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-2.png`) + ')'
|
|
|
+})
|
|
|
+const btnOnTrack2ActiveImgUrl = computed(() => {
|
|
|
+ return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-2-active.png`) + ')'
|
|
|
+})
|
|
|
+const btnOnTrack3ImgUrl = computed(() => {
|
|
|
+ return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-3.png`) + ')'
|
|
|
+})
|
|
|
+const btnOnTrack3ActiveImgUrl = computed(() => {
|
|
|
+ return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-3-active.png`) + ')'
|
|
|
+})
|
|
|
+const btnOnTrack4ImgUrl = computed(() => {
|
|
|
+ return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-4.png`) + ')'
|
|
|
+})
|
|
|
+const btnOnTrack4ActiveImgUrl = computed(() => {
|
|
|
+ return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-4-active.png`) + ')'
|
|
|
+})
|
|
|
+
|
|
|
+const cameraListBgUrl = computed(() => {
|
|
|
+ return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-list-bg-${sceneIdx.value + 1}.png`) + ')'
|
|
|
+})
|
|
|
+
|
|
|
+const btnOnTrack1Name = computed(() => {
|
|
|
+ return currentCameraList.value[cameraIdx.value].contentPageBtnNameList[0]
|
|
|
+})
|
|
|
+const btnOnTrack2Name = computed(() => {
|
|
|
+ return currentCameraList.value[cameraIdx.value].contentPageBtnNameList[1]
|
|
|
+})
|
|
|
+const btnOnTrack3Name = computed(() => {
|
|
|
+ return currentCameraList.value[cameraIdx.value].contentPageBtnNameList[2]
|
|
|
+})
|
|
|
|
|
|
const CameraContent1 = defineAsyncComponent(() =>
|
|
|
import(`@/components/CameraContent-${Number(route.query.sceneIdx) + 1}-${Number(route.query.cameraIdx) + 1}-1.vue`)
|
|
@@ -171,7 +221,6 @@ const CameraContent3 = defineAsyncComponent(() =>
|
|
|
import(`@/components/CameraContent-${Number(route.query.sceneIdx) + 1}-${Number(route.query.cameraIdx) + 1}-3.vue`)
|
|
|
)
|
|
|
|
|
|
-
|
|
|
const {
|
|
|
windowSizeInCssForRef,
|
|
|
windowSizeWhenDesignForRef,
|
|
@@ -219,131 +268,21 @@ function onClickCharacter() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-const sceneList = ref([
|
|
|
- {
|
|
|
- sceneName: '大汗之城',
|
|
|
- cameraList: [
|
|
|
- {
|
|
|
- name: '雄伟帝都',
|
|
|
- // panoCode: 'WK1730511898643845120',
|
|
|
- panoCode: 'WK1730428603763576832',
|
|
|
- contentPageBtnNameList: [
|
|
|
- '整体设计与规划',
|
|
|
- '营都人员与机构',
|
|
|
- '史料中的元大都',
|
|
|
- ],
|
|
|
- },
|
|
|
- {
|
|
|
- name: '大都宫阙',
|
|
|
- panoCode: 'WK1730165377477955584',
|
|
|
- contentPageBtnNameList: [
|
|
|
- '皇城与宫城',
|
|
|
- '皇城内的建筑布局',
|
|
|
- '忽必烈召见赵孟頫',
|
|
|
- ],
|
|
|
- },
|
|
|
- {
|
|
|
- name: '大都览胜',
|
|
|
- panoCode: 'WK1730164600466362368',
|
|
|
- contentPageBtnNameList: [
|
|
|
- '大都城内的寺庙建筑',
|
|
|
- '大都城内的官署机构',
|
|
|
- '重要建筑构件',
|
|
|
- ],
|
|
|
- },
|
|
|
- ]
|
|
|
- },
|
|
|
- {
|
|
|
- sceneName: '河润大都',
|
|
|
- cameraList: [
|
|
|
- {
|
|
|
- name: '通惠河畅',
|
|
|
- contentPageBtnNameList: [
|
|
|
- '大运河的历史演变',
|
|
|
- '元大都用水水系',
|
|
|
- '水利专家及对通惠河段的治理',
|
|
|
- ],
|
|
|
- },
|
|
|
- {
|
|
|
- name: '舳舻蔽水',
|
|
|
- contentPageBtnNameList: [
|
|
|
- '菏泽沉船',
|
|
|
- '磁县漕船',
|
|
|
- '聊城古船',
|
|
|
- ],
|
|
|
- },
|
|
|
- {
|
|
|
- name: '繁华富庶',
|
|
|
- contentPageBtnNameList: [
|
|
|
- '造福百姓',
|
|
|
- '元代瓷器的发展',
|
|
|
- ' 商品贸易中的货币',
|
|
|
- ],
|
|
|
- },
|
|
|
- ]
|
|
|
- },
|
|
|
- {
|
|
|
- sceneName: '大都风华',
|
|
|
- cameraList: [
|
|
|
- {
|
|
|
- name: '文人雅集',
|
|
|
- contentPageBtnNameList: [
|
|
|
- '元代文化艺术的发展',
|
|
|
- '上流社会的雅集盛会',
|
|
|
- '百工精巧',
|
|
|
- ],
|
|
|
- },
|
|
|
- {
|
|
|
- name: '曲苑杂剧',
|
|
|
- contentPageBtnNameList: [
|
|
|
- '元曲的文化成就',
|
|
|
- '著名元曲作家与作品',
|
|
|
- '表演元曲的著名演员',
|
|
|
- ],
|
|
|
- },
|
|
|
- ]
|
|
|
- },
|
|
|
-])
|
|
|
const currentCameraList = computed(() => {
|
|
|
- return sceneList.value[sceneIdx.value].cameraList
|
|
|
-})
|
|
|
-const activeCameraIdx = ref(sceneIdx.value)
|
|
|
-
|
|
|
-const btnOnTrack1ImgUrl = computed(() => {
|
|
|
- return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-1.png`) + ')'
|
|
|
-})
|
|
|
-const btnOnTrack1ActiveImgUrl = computed(() => {
|
|
|
- return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-1-active.png`) + ')'
|
|
|
-})
|
|
|
-const btnOnTrack2ImgUrl = computed(() => {
|
|
|
- return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-2.png`) + ')'
|
|
|
-})
|
|
|
-const btnOnTrack2ActiveImgUrl = computed(() => {
|
|
|
- return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-2-active.png`) + ')'
|
|
|
-})
|
|
|
-const btnOnTrack3ImgUrl = computed(() => {
|
|
|
- return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-3.png`) + ')'
|
|
|
-})
|
|
|
-const btnOnTrack3ActiveImgUrl = computed(() => {
|
|
|
- return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-3-active.png`) + ')'
|
|
|
-})
|
|
|
-const btnOnTrack4ImgUrl = computed(() => {
|
|
|
- return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-4.png`) + ')'
|
|
|
-})
|
|
|
-const btnOnTrack4ActiveImgUrl = computed(() => {
|
|
|
- return `url(${process.env.VUE_APP_CLI_MODE === 'dev' ? '' : '../'}` + require(`@/assets/images/camera-btn-${sceneIdx.value + 1}-${cameraIdx.value + 1}-4-active.png`) + ')'
|
|
|
+ return sceneTree[sceneIdx.value].cameraList
|
|
|
})
|
|
|
|
|
|
-const btnOnTrack1Name = computed(() => {
|
|
|
- return currentCameraList.value[cameraIdx.value].contentPageBtnNameList[0]
|
|
|
-})
|
|
|
-const btnOnTrack2Name = computed(() => {
|
|
|
- return currentCameraList.value[cameraIdx.value].contentPageBtnNameList[1]
|
|
|
-})
|
|
|
-const btnOnTrack3Name = computed(() => {
|
|
|
- return currentCameraList.value[cameraIdx.value].contentPageBtnNameList[2]
|
|
|
-})
|
|
|
+const mouseEnterCameraItemIdx = ref(-1)
|
|
|
|
|
|
+function onClickNextCamera() {
|
|
|
+ router.push({
|
|
|
+ name: route.name,
|
|
|
+ query: {
|
|
|
+ sceneIdx: sceneIdx.value + 1,
|
|
|
+ cameraIdx: cameraIdx.value,
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
|
|
|
/**
|
|
|
* 全景图
|
|
@@ -481,9 +420,9 @@ onMounted(() => {
|
|
|
|
|
|
onBeforeRouteUpdate((to, from) => {
|
|
|
console.log('to: ', to)
|
|
|
- if (to.name === route.name) {
|
|
|
- loadScene(Number(to.query.sceneIdx), Number(to.query.cameraIdx))
|
|
|
- }
|
|
|
+ // if (to.name === route.name) {
|
|
|
+ // loadScene(Number(to.query.sceneIdx), Number(to.query.cameraIdx))
|
|
|
+ // }
|
|
|
})
|
|
|
</script>
|
|
|
|
|
@@ -507,12 +446,12 @@ onBeforeRouteUpdate((to, from) => {
|
|
|
height: 77px;
|
|
|
top: 43px;
|
|
|
right: 51px;
|
|
|
- background-image: url(@/assets/images/btn-return-home.png);
|
|
|
+ background-image: v-bind(btnReturnHomeImgUrl);
|
|
|
background-size: cover;
|
|
|
background-repeat: no-repeat;
|
|
|
background-position: center center;
|
|
|
&:hover{
|
|
|
- background-image: url(@/assets/images/btn-return-home-active.png);
|
|
|
+ background-image: v-bind(btnReturnHomeActiveImgUrl);
|
|
|
}
|
|
|
}
|
|
|
>.camera-desc{
|
|
@@ -679,7 +618,7 @@ onBeforeRouteUpdate((to, from) => {
|
|
|
right: 0;
|
|
|
width: calc(1346 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
|
|
|
height: calc(161 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
|
|
|
- background-image: url(@/assets/images/camera-list-bg.png);
|
|
|
+ background-image: v-bind(cameraListBgUrl);
|
|
|
background-size: cover;
|
|
|
background-repeat: no-repeat;
|
|
|
background-position: center center;
|