|
|
@@ -8,9 +8,8 @@
|
|
|
<div id="go" />
|
|
|
<div id="back" />
|
|
|
</div> -->
|
|
|
-
|
|
|
<div>
|
|
|
- <div class="viewContainer">
|
|
|
+ <div class="viewContainer" style="display: none !important">
|
|
|
<div id="previous" class="previous desktop-only ui-icon" style="display: none">
|
|
|
<a>
|
|
|
<img rel="tooltip" title="" :src="require('@/assets/images/play.png')" width="24" height="24" data-original-title="播放" />
|
|
|
@@ -43,19 +42,19 @@
|
|
|
|
|
|
<img title="" class="icon icon-inside" :src="require(`@/assets/image/icon/icon_point${!isGuide ? '_active' : '_normal'}.png`)" />
|
|
|
</div>
|
|
|
-
|
|
|
- <!-- 热点列表 -->
|
|
|
- <div v-show="!hideTools" id="myHotList" @click="openTags">
|
|
|
- <!-- 鼠标移入的显示 -->
|
|
|
- <div class="hoverTit">热点列表</div>
|
|
|
- <img :src="require(`@/assets/image/icon/icon_detail${openInd == 1 ? '_active' : '_normal'}.png`)" alt="" />
|
|
|
- </div>
|
|
|
<div title="迷你漫游" data-original-title="迷你模型" id="gui-modes-dollhouse" rel="tooltip">
|
|
|
<!-- 鼠标移入的显示 -->
|
|
|
<div class="hoverTit">三维模型</div>
|
|
|
<img class="icon icon-inside" :src="require('@/assets/image/icon/icon_dollhouse_normal.png')" />
|
|
|
<img class="icon icon-inside active" :src="require('@/assets/image/icon/icon_dollhouse_active.png')" />
|
|
|
</div>
|
|
|
+ <!-- 热点列表 -->
|
|
|
+ <div v-show="!hideTools" id="myHotList" @click="openTags">
|
|
|
+ <!-- 鼠标移入的显示 -->
|
|
|
+ <div class="hoverTit">热点列表</div>
|
|
|
+ <img :src="require(`@/assets/image/icon/icon_detail${openInd == 1 ? '_active' : '_normal'}.png`)" alt="" />
|
|
|
+ </div>
|
|
|
+
|
|
|
<div data-original-title="俯视图" id="gui-modes-floorplan" rel="tooltip" title="顶部俯视">
|
|
|
<!-- 鼠标移入的显示 -->
|
|
|
<div class="hoverTit">俯视平面</div>
|
|
|
@@ -75,7 +74,8 @@
|
|
|
|
|
|
<div v-show="!hideTools" class="pinBottom right hideTarget">
|
|
|
<div class="rightViewContainer clearfix">
|
|
|
- <div class="gui-floor">
|
|
|
+ <!-- 楼层,内外 -->
|
|
|
+ <div class="gui-floor" v-show="false">
|
|
|
<div class="gui-floor-title"></div>
|
|
|
<div class="gui-floor-icon">
|
|
|
<span class="gui-floor-number"></span>
|
|
|
@@ -136,27 +136,117 @@
|
|
|
<!-- 手动触发导览 -->
|
|
|
|
|
|
<transition name="slide" appear>
|
|
|
- <HotList v-if="openInd === 1" @close="openInd = 0" />
|
|
|
+ <HotList v-if="openType === 'hots'" @close="openType = null" />
|
|
|
+ </transition>
|
|
|
+
|
|
|
+ <!-- 小地图控制按钮 -->
|
|
|
+ <div class="minimap-controls" :class="{ open: !miniMapStatus }" @click="toggleMiniMap"></div>
|
|
|
+ <transition name="fade" enter-active-class="animate__animated animate__fadeInUp animate__faster" leave-active-class="animate__animated animate__fadeOutDown animate__faster">
|
|
|
+ <div v-show="openType != 'immersive'" class="new-btn">
|
|
|
+ <div class="button-item" :class="getActive(i.type)" v-for="(i, index) in leftButtons" @click.stop="hanlderButtons(i, i.type)">
|
|
|
+ <img class="normal" :src="i.normalIcon" alt="" />
|
|
|
+ <img class="active" :src="i.activeIcon" alt="" />
|
|
|
+ <div class="tip-box">{{ i.name }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </transition>
|
|
|
+ <div class="kanzhan-btns">
|
|
|
+ <transition name="preScene">
|
|
|
+ <div v-show="openType == 'immersive'" class="button-item">
|
|
|
+ <img class="normal" :src="require('@/assets/image/icon/new-icon/icon_pre.png')" alt="" />
|
|
|
+ </div>
|
|
|
+ </transition>
|
|
|
+ <transition name="activeScene">
|
|
|
+ <div v-show="openType == 'immersive'" class="button-item" @click="openType = null">
|
|
|
+ <img class="normal" :src="require('@/assets/image/icon/new-icon/icon_mod_active.png')" alt="" />
|
|
|
+ </div>
|
|
|
+ </transition>
|
|
|
+ <transition name="nextScene">
|
|
|
+ <div v-show="openType == 'immersive'" class="button-item">
|
|
|
+ <img class="normal" :src="require('@/assets/image/icon/new-icon/icon_next.png')" alt="" />
|
|
|
+ </div>
|
|
|
+ </transition>
|
|
|
+ </div>
|
|
|
+ <transition name="tour">
|
|
|
+ <TourList :tourList="tourList" v-if="openType == 'tour'" @close="openType = null"> </TourList>
|
|
|
+ </transition>
|
|
|
+ <transition name="fade" enter-active-class="animate__animated animate__fadeIn animate__faster" leave-active-class="animate__animated animate__fadeOut animate__faster">
|
|
|
+ <LayerMap v-if="openType == 'map'" @close="openType = null"> </LayerMap>
|
|
|
</transition>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import HotList from "./components/hotList.vue";
|
|
|
+import TourList from "./components/tourList.vue";
|
|
|
+import LayerMap from "./components/layerMap.vue";
|
|
|
import Share from "./components/share.vue";
|
|
|
-
|
|
|
+import { directive } from "vue-awesome-swiper";
|
|
|
+import "swiper/css/swiper.css";
|
|
|
export default {
|
|
|
- components: { HotList, Share },
|
|
|
+ components: { HotList, TourList, LayerMap, Share },
|
|
|
+ directives: {
|
|
|
+ swiper: directive,
|
|
|
+ },
|
|
|
props: {
|
|
|
hideTools: Boolean,
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
+ miniMapStatus: true,
|
|
|
+ isRoute: true,
|
|
|
+
|
|
|
+ tourList: [],
|
|
|
+ openType: null,
|
|
|
isGuide: true,
|
|
|
musicState: false,
|
|
|
// vr---热点列表---分享
|
|
|
openInd: 0,
|
|
|
isFullscreen: false,
|
|
|
+ leftButtons: [
|
|
|
+ {
|
|
|
+ normalIcon: require("@/assets/image/icon/new-icon/icon_dollhouse.png"),
|
|
|
+ activeIcon: require("@/assets/image/icon/new-icon/icon_dollhouse_active.png"),
|
|
|
+ name: "3d模型",
|
|
|
+ type: "model",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ normalIcon: require("@/assets/image/icon/new-icon/icon_map.png"),
|
|
|
+ activeIcon: require("@/assets/image/icon/new-icon/icon_map_active.png"),
|
|
|
+ name: "导航地图",
|
|
|
+ type: "map",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ normalIcon: require("@/assets/image/icon/new-icon/icon_point.png"),
|
|
|
+ activeIcon: require("@/assets/image/icon/new-icon/icon_point_active.png"),
|
|
|
+ name: "重点展位",
|
|
|
+ type: "tour",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ normalIcon: require("@/assets/image/icon/new-icon/icon_detail.png"),
|
|
|
+ activeIcon: require("@/assets/image/icon/new-icon/icon_detail_active.png"),
|
|
|
+ name: "热点列表",
|
|
|
+ type: "hots",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ normalIcon: require("@/assets/image/icon/new-icon/icon_line.png"),
|
|
|
+ activeIcon: require("@/assets/image/icon/new-icon/icon_line_active.png"),
|
|
|
+ name: "展览路线",
|
|
|
+ type: "route",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ normalIcon: require("@/assets/image/icon/new-icon/icon_screen.png"),
|
|
|
+ activeIcon: require("@/assets/image/icon/new-icon/icon_screen_active.png"),
|
|
|
+ name: "全屏",
|
|
|
+ type: "fullScreen",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ normalIcon: require("@/assets/image/icon/new-icon/icon_mod.png"),
|
|
|
+ activeIcon: require("@/assets/image/icon/new-icon/icon_mod_active.png"),
|
|
|
+ name: "沉浸看展",
|
|
|
+ type: "immersive",
|
|
|
+ },
|
|
|
+ ],
|
|
|
};
|
|
|
},
|
|
|
watch: {},
|
|
|
@@ -168,8 +258,78 @@ export default {
|
|
|
this.isFullscreen = !this.isFullscreen;
|
|
|
});
|
|
|
});
|
|
|
+
|
|
|
+ // this.tourList = window.player ? player?.model?.heroLocations : [];
|
|
|
},
|
|
|
methods: {
|
|
|
+ toggleMiniMap() {
|
|
|
+ this.miniMapStatus = !this.miniMapStatus;
|
|
|
+ if (this.miniMapStatus) {
|
|
|
+ $(".cad").addClass("scale-open");
|
|
|
+ $(".cad").removeClass("scale-close");
|
|
|
+ } else {
|
|
|
+ $(".cad").addClass("scale-close");
|
|
|
+ $(".cad").removeClass("scale-open");
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ hanlderButtons(item, type) {
|
|
|
+ if (!["route", "fullScreen"].includes(type)) {
|
|
|
+ if (this.openType != type) {
|
|
|
+ this.openType = type;
|
|
|
+ } else {
|
|
|
+ this.openType = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (item.type) {
|
|
|
+ case "map":
|
|
|
+ break;
|
|
|
+ case "tour":
|
|
|
+ if (!this.tourList.length) {
|
|
|
+ this.tourList = window.player ? player?.model?.heroLocations : [];
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "route":
|
|
|
+ this.isRoute = !this.isRoute;
|
|
|
+ break;
|
|
|
+ case "fullScreen":
|
|
|
+ this.onFullScreen();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getActive(item) {
|
|
|
+ switch (item) {
|
|
|
+ case "model":
|
|
|
+ // return "active";
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "map":
|
|
|
+ if (this.openType == "map") {
|
|
|
+ return "active";
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "tour":
|
|
|
+ if (this.openType == "tour") {
|
|
|
+ return "active";
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "route":
|
|
|
+ if (this.isRoute) {
|
|
|
+ return "active";
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "hots":
|
|
|
+ if (this.openType == "hots") {
|
|
|
+ return "active";
|
|
|
+ }
|
|
|
+ case "fullScreen":
|
|
|
+ if (this.isFullscreen) {
|
|
|
+ return "active";
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ },
|
|
|
openTags() {
|
|
|
if (this.openInd) {
|
|
|
this.openInd = 0;
|
|
|
@@ -410,6 +570,102 @@ export default {
|
|
|
.viewContainer {
|
|
|
padding: 10px 20px 0 34px;
|
|
|
}
|
|
|
+@iconW: 56px;
|
|
|
+@icomarginRight: 25px;
|
|
|
+.minimap-controls {
|
|
|
+ width: 30px;
|
|
|
+ height: 30px;
|
|
|
+ background: url(../../assets/image/icon/new-icon/icon_mini.png) no-repeat;
|
|
|
+ background-size: 100%;
|
|
|
+ border-radius: 0px 0px 0px 0px;
|
|
|
+ position: fixed;
|
|
|
+ top: 25px;
|
|
|
+ right: 25px;
|
|
|
+ cursor: pointer;
|
|
|
+ &.open {
|
|
|
+ background: url(../../assets/image/icon/new-icon/icon_scale.png) no-repeat;
|
|
|
+ background-size: 100%;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.new-btn {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: flex-start;
|
|
|
+ position: absolute;
|
|
|
+ left: 44px;
|
|
|
+ bottom: 40px;
|
|
|
+ .button-item {
|
|
|
+ width: @iconW;
|
|
|
+ height: @iconW;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ margin-right: @icomarginRight;
|
|
|
+ cursor: pointer;
|
|
|
+ position: relative;
|
|
|
+ .tip-box {
|
|
|
+ display: none;
|
|
|
+ position: absolute;
|
|
|
+ top: -38px;
|
|
|
+ left: 50%;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ white-space: nowrap;
|
|
|
+ height: 29px;
|
|
|
+ color: #fff;
|
|
|
+ text-align: center;
|
|
|
+ line-height: 29px;
|
|
|
+ background: rgba(55, 54, 53, 0.6);
|
|
|
+ border: 1px solid #fff;
|
|
|
+ border-radius: 6px;
|
|
|
+ font-size: 14px;
|
|
|
+ font-family: Source Han Sans CN;
|
|
|
+ font-weight: 500;
|
|
|
+ padding: 0 8px;
|
|
|
+ }
|
|
|
+ .active {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+ &:hover {
|
|
|
+ .normal {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+ .active {
|
|
|
+ display: block;
|
|
|
+ }
|
|
|
+ .tip-box {
|
|
|
+ display: block;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &.active {
|
|
|
+ .normal {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+ .active {
|
|
|
+ display: block;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+.kanzhan-btns {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: flex-start;
|
|
|
+ position: absolute;
|
|
|
+ left: 450px;
|
|
|
+ bottom: 40px;
|
|
|
+ .button-item {
|
|
|
+ width: @iconW;
|
|
|
+ height: @iconW;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ margin-right: 25px;
|
|
|
+ cursor: pointer;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// 移动端
|
|
|
@media screen and (max-width: 1000px) {
|
|
|
.hoverTit {
|
|
|
@@ -446,7 +702,7 @@ export default {
|
|
|
// display: flex;
|
|
|
// justify-content: flex-end;
|
|
|
}
|
|
|
- .container{
|
|
|
+ .container {
|
|
|
right: auto;
|
|
|
left: 50% !important;
|
|
|
top: -68px;
|
|
|
@@ -494,4 +750,78 @@ export default {
|
|
|
.slide-leave {
|
|
|
transform: translateX(0);
|
|
|
}
|
|
|
+
|
|
|
+/* 进入的起点、离开的终点 */
|
|
|
+.preScene-enter,
|
|
|
+.preScene-leave-to {
|
|
|
+ transform: translateX(-100%);
|
|
|
+ opacity: 0;
|
|
|
+}
|
|
|
+.preScene-enter-active,
|
|
|
+.preScene-leave-active {
|
|
|
+ transition: 0.3s linear;
|
|
|
+}
|
|
|
+/* 进入的终点、离开的起点 */
|
|
|
+.preScene-enter-to,
|
|
|
+.preScene-leave {
|
|
|
+ transform: translateX(0);
|
|
|
+ opacity: 1;
|
|
|
+}
|
|
|
+.nextScene-enter,
|
|
|
+.nextScene-leave-to {
|
|
|
+ transform: translateX(100%);
|
|
|
+ opacity: 0;
|
|
|
+}
|
|
|
+.nextScene-enter-active,
|
|
|
+.nextScene-leave-active {
|
|
|
+ transition: 0.3s linear;
|
|
|
+}
|
|
|
+/* 进入的终点、离开的起点 */
|
|
|
+.nextScene-enter-to,
|
|
|
+.nextScene-leave {
|
|
|
+ transform: translateX(0);
|
|
|
+ opacity: 1;
|
|
|
+}
|
|
|
+.activeScene-enter,
|
|
|
+.activeScene-leave-to {
|
|
|
+ transform: translateY(-100%);
|
|
|
+ opacity: 0;
|
|
|
+}
|
|
|
+.activeScene-enter-active,
|
|
|
+.activeScene-leave-active {
|
|
|
+ transition: 0.3s linear;
|
|
|
+}
|
|
|
+/* 进入的终点、离开的起点 */
|
|
|
+.activeScene-enter-to,
|
|
|
+.activeScene-leave {
|
|
|
+ transform: translateX(0);
|
|
|
+ opacity: 1;
|
|
|
+}
|
|
|
+.tour-enter,
|
|
|
+.tour-leave-to {
|
|
|
+ transform: translateY(20px);
|
|
|
+ opacity: 0;
|
|
|
+}
|
|
|
+.tour-enter-active,
|
|
|
+.tour-leave-active {
|
|
|
+ transition: 0.3s linear;
|
|
|
+}
|
|
|
+/* 进入的终点、离开的起点 */
|
|
|
+.tour-enter-to,
|
|
|
+.tour-leave {
|
|
|
+ transform: translateX(0);
|
|
|
+ opacity: 1;
|
|
|
+}
|
|
|
+</style>
|
|
|
+<style>
|
|
|
+.scale-close {
|
|
|
+ transition: transform 0.3s;
|
|
|
+ transform: scale(0);
|
|
|
+ transform-origin: 90% 10%;
|
|
|
+}
|
|
|
+.scale-open {
|
|
|
+ transition: transform 0.3s;
|
|
|
+ transform: scale(1);
|
|
|
+ transform-origin: 80% 20%;
|
|
|
+}
|
|
|
</style>
|