menu.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. <template>
  2. <div class="pinBottom-container" @touchstart.stop @keydown.stop>
  3. <div class="pinBottom center">
  4. <div id="view-controllers"></div>
  5. </div>
  6. <div class="pinBottom left">
  7. <!-- <div v-if="isMobile" id="myClickBox" style="">
  8. <div id="go" />
  9. <div id="back" />
  10. </div> -->
  11. <div>
  12. <div class="viewContainer">
  13. <div id="previous" class="previous desktop-only ui-icon" style="display: none">
  14. <a>
  15. <img rel="tooltip" title="" :src="require('@/assets/images/play.png')" width="24" height="24" data-original-title="播放" />
  16. </a>
  17. </div>
  18. <div id="play" class="ui-icon" rel="tooltip" data-original-title="播放">
  19. <!-- 鼠标移入的显示 -->
  20. <div class="hoverTit">自动漫游</div>
  21. <a>
  22. <img :src="require('@/assets/image/icon/tour-play.png')" width="24" height="24" />
  23. </a>
  24. </div>
  25. <div id="pause" class="ui-icon" v-show="false">
  26. <!-- 鼠标移入的显示 -->
  27. <div class="hoverTit">自动漫游</div>
  28. <a>
  29. <img rel="tooltip" title="" :src="require('@/assets/image/icon/tour-pause.png')" width="24" height="24" data-original-title="暂停" />
  30. </a>
  31. </div>
  32. <div id="next" class="next desktop-only ui-icon wide" style="display: none">
  33. <a>
  34. <i rel="tooltip" title="" class="icon icon-dpad-right" data-original-title="下一个"></i>
  35. </a>
  36. </div>
  37. <div id="gui-modes-map" class="ui-icon double active">
  38. <div data-original-title="导览" @click="isGuide = !isGuide" id="pullTab" rel="tooltip" title="场景导览">
  39. <!-- 鼠标移入的显示 -->
  40. <div class="hoverTit">重点展位</div>
  41. <img title="" class="icon icon-inside" :src="require(`@/assets/image/icon/icon_point${!isGuide ? '_active' : '_normal'}.png`)" />
  42. </div>
  43. <!-- 热点列表 -->
  44. <div v-show="!hideTools" id="myHotList" @click="openTags">
  45. <!-- 鼠标移入的显示 -->
  46. <div class="hoverTit">热点列表</div>
  47. <img :src="require(`@/assets/image/icon/icon_detail${openInd == 1 ? '_active' : '_normal'}.png`)" alt="" />
  48. </div>
  49. <div title="迷你漫游" data-original-title="迷你模型" id="gui-modes-dollhouse" rel="tooltip">
  50. <!-- 鼠标移入的显示 -->
  51. <div class="hoverTit">三维模型</div>
  52. <img class="icon icon-inside" :src="require('@/assets/image/icon/icon_dollhouse_normal.png')" />
  53. <img class="icon icon-inside active" :src="require('@/assets/image/icon/icon_dollhouse_active.png')" />
  54. </div>
  55. <div data-original-title="俯视图" id="gui-modes-floorplan" rel="tooltip" title="顶部俯视">
  56. <!-- 鼠标移入的显示 -->
  57. <div class="hoverTit">俯视平面</div>
  58. <img class="icon icon-inside" :src="require('@/assets/image/icon/icon_floor_normal.png')" />
  59. <img class="active icon icon-inside active" :src="require('@/assets/image/icon/icon_floor_active.png')" />
  60. </div>
  61. <div @click="onFullScreen" v-if="!isMobile" rel="tooltip" title="顶部俯视" id="gui-modes-floorplan" data-original-title="俯视图">
  62. <!-- 鼠标移入的显示 -->
  63. <div class="hoverTit" v-if="!isFullscreen">全屏</div>
  64. <div class="hoverTit" v-else>退出全屏</div>
  65. <img class="icon icon-inside" :src="require(`@/assets/image/icon/icon_screen${isFullscreen ? '_active' : '_normal'}.png`)" />
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. </div>
  71. <div v-show="!hideTools" class="pinBottom right hideTarget">
  72. <div class="rightViewContainer clearfix">
  73. <div class="gui-floor">
  74. <div class="gui-floor-title"></div>
  75. <div class="gui-floor-icon">
  76. <span class="gui-floor-number"></span>
  77. </div>
  78. <div class="container"></div>
  79. </div>
  80. <div id="vr" class="ui-icon wide hidden" style="display: none">
  81. <a>
  82. <i rel="tooltip" title="{[{ VIEW_IN_VR }]}" class="icon icon-webvr"></i>
  83. </a>
  84. </div>
  85. <div id="sharing" class="ui-icon wide hidden" style="display: none">
  86. <a>
  87. <i rel="tooltip" title="{[{ SOCIAL_SHARING }]}" class="icon icon-share"></i>
  88. </a>
  89. </div>
  90. <div class="pull-right terms terms2">
  91. <a>{[{ TERMS }]}</a>
  92. </div>
  93. <!-- 回到pc页面(首页) -->
  94. <div v-show="false" class="toHomeBox" @click="toHomeFu">
  95. <!-- 鼠标移入的显示 -->
  96. <div class="hoverTit">回到首页</div>
  97. <img src="../../assets/img/toHome.png" alt="" />
  98. </div>
  99. <!-- vr -->
  100. <div v-show="false" class="toHomeBox" @click="openVR">
  101. <!-- 鼠标移入的显示 -->
  102. <div class="hoverTit">VR</div>
  103. <img src="../../assets/img/openVR.png" alt="" />
  104. </div>
  105. <!-- 音乐 -->
  106. <div id="volume" class="ui-icon bgandshare wide">
  107. <!-- 鼠标移入的显示 -->
  108. <div class="hoverTit">{{ musicState ? "关闭" : "打开" }}音乐</div>
  109. <div>
  110. <img id="openMusic" style="display: block" @click="switchBGM(true)" src="../../assets/img/musicAc.png" alt="" />
  111. <img id="closeMusic" style="display: none" @click="switchBGM(false)" src="../../assets/img/music.png" alt="" />
  112. </div>
  113. </div>
  114. <!-- 分享 -->
  115. <div v-show="false" class="toHomeBox" @click="openInd = 2">
  116. <!-- 鼠标移入的显示 -->
  117. <div class="hoverTit">分享</div>
  118. <img src="../../assets/img/share.png" alt="" />
  119. </div>
  120. </div>
  121. </div>
  122. <!-- <div class="openBox" :class="{ openBoxAc: openInd }">
  123. <HotList v-if="openInd === 1" @close="openInd = 0" />
  124. <Share v-show="openInd === 2" @close="openInd = 0" :openInd="openInd" />
  125. </div> -->
  126. <!-- 手动触发导览 -->
  127. <transition name="slide" appear>
  128. <HotList v-if="openInd === 1" @close="openInd = 0" />
  129. </transition>
  130. </div>
  131. </template>
  132. <script>
  133. import HotList from "./components/hotList.vue";
  134. import Share from "./components/share.vue";
  135. export default {
  136. components: { HotList, Share },
  137. props: {
  138. hideTools: Boolean,
  139. },
  140. data() {
  141. return {
  142. isGuide: true,
  143. musicState: false,
  144. // vr---热点列表---分享
  145. openInd: 0,
  146. isFullscreen: false,
  147. };
  148. },
  149. watch: {},
  150. computed: {},
  151. mounted() {
  152. let events = ["fullscreenchange", "webkitfullscreenchange", "mozfullscreenchange", "MSFullscreenChange"];
  153. events.forEach((item, index) => {
  154. window.addEventListener(item, () => {
  155. this.isFullscreen = !this.isFullscreen;
  156. });
  157. });
  158. },
  159. methods: {
  160. openTags() {
  161. if (this.openInd) {
  162. this.openInd = 0;
  163. } else {
  164. this.openInd = 1;
  165. }
  166. },
  167. onFullScreen() {
  168. let element = document.documentElement;
  169. if (this.isFullscreen) {
  170. if (document.exitFullscreen) {
  171. document.exitFullscreen();
  172. } else if (document.webkitCancelFullScreen) {
  173. document.webkitCancelFullScreen();
  174. } else if (document.mozCancelFullScreen) {
  175. document.mozCancelFullScreen();
  176. } else if (document.msExitFullscreen) {
  177. document.msExitFullscreen();
  178. }
  179. } else {
  180. if (element.requestFullscreen) {
  181. element.requestFullscreen();
  182. } else if (element.webkitRequestFullScreen) {
  183. element.webkitRequestFullScreen();
  184. } else if (element.mozRequestFullScreen) {
  185. element.mozRequestFullScreen();
  186. } else if (element.msRequestFullscreen) {
  187. element.msRequestFullscreen();
  188. }
  189. }
  190. // 改变当前全屏状态
  191. },
  192. switchBGM(flag) {
  193. this.musicState = flag;
  194. if (flag) {
  195. window.manage.switchBgmState(true);
  196. document.querySelector("#openMusic").style.display = "none";
  197. document.querySelector("#closeMusic").style.display = "block";
  198. // 手动停止自动导览
  199. window.player.director.stopTour();
  200. } else {
  201. window.manage.switchBgmState(false);
  202. document.querySelector("#openMusic").style.display = "block";
  203. document.querySelector("#closeMusic").style.display = "none";
  204. }
  205. },
  206. // 点击vr
  207. openVR() {
  208. window.open("https://www.720yun.com/t/acvkiwdegqb?scene_id=34882556");
  209. },
  210. // 点击回到首页
  211. toHomeFu() {
  212. this.switchBGM(false);
  213. this.$emit("toHome");
  214. },
  215. },
  216. };
  217. </script>
  218. <style lang="less" scoped>
  219. ::-webkit-scrollbar {
  220. width: 5px; /*高宽分别对应横竖滚动条的尺寸*/
  221. }
  222. ::-webkit-scrollbar-thumb {
  223. // box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2);
  224. background: #edd3b0;
  225. border-color: #edd3b0;
  226. color: #edd3b0;
  227. outline: none;
  228. }
  229. // 鼠标移入显示的文字和图片
  230. #gui-modes-inside {
  231. position: relative;
  232. }
  233. #gui-modes-dollhouse {
  234. position: relative;
  235. }
  236. #gui-modes-floorplan {
  237. position: relative;
  238. }
  239. .hoverTit {
  240. pointer-events: none;
  241. transition: all 0.5s;
  242. opacity: 0;
  243. position: absolute;
  244. left: 50%;
  245. transform: translateX(-50%);
  246. top: -40px;
  247. width: 80px;
  248. height: 37px;
  249. line-height: 30px;
  250. text-align: center;
  251. background: url("../../assets/image/img_tip.png");
  252. background-size: 100% 100%;
  253. font-size: 14px;
  254. color: #fff;
  255. }
  256. #play:hover {
  257. .hoverTit {
  258. opacity: 1;
  259. }
  260. }
  261. #pause:hover {
  262. .hoverTit {
  263. opacity: 1;
  264. }
  265. }
  266. #gui-modes-map > div:hover {
  267. .hoverTit {
  268. opacity: 1;
  269. }
  270. }
  271. #volume {
  272. margin-right: 16px;
  273. }
  274. #volume,
  275. #gui-fullscreen,
  276. #gui-fullscreen-exit {
  277. position: relative;
  278. .hoverTit {
  279. width: 70px;
  280. }
  281. &:hover {
  282. .hoverTit {
  283. opacity: 1;
  284. }
  285. }
  286. }
  287. // 右侧菜单栏
  288. @wh: 72px;
  289. @margin: 21px;
  290. #play,
  291. #pause {
  292. margin-right: @margin;
  293. img {
  294. width: @wh;
  295. height: @wh;
  296. }
  297. }
  298. .rightViewContainer {
  299. display: flex !important;
  300. align-items: center !important;
  301. padding-right: 30px;
  302. }
  303. #gui-modes-map {
  304. > div {
  305. margin-right: @margin;
  306. > img {
  307. width: @wh;
  308. height: @wh;
  309. display: block !important;
  310. }
  311. .active {
  312. display: none !important;
  313. }
  314. }
  315. .active {
  316. > img {
  317. display: none !important;
  318. }
  319. .active {
  320. display: block !important;
  321. }
  322. }
  323. }
  324. .pinBottom.right .ui-icon {
  325. background: none;
  326. }
  327. #gui-fullscreen img {
  328. width: 44px;
  329. }
  330. #volume {
  331. width: 44px;
  332. }
  333. #gui-fullscreen-exit img {
  334. width: 44px !important;
  335. }
  336. .bgandshare {
  337. background: none !important;
  338. // margin-right: 20px!important;
  339. > div {
  340. width: 100%;
  341. cursor: pointer;
  342. img {
  343. width: 100%;
  344. }
  345. }
  346. }
  347. .toHomeBox {
  348. margin-right: 20px;
  349. cursor: pointer;
  350. position: relative;
  351. width: 44px;
  352. img {
  353. width: 44px;
  354. }
  355. &:hover {
  356. .hoverTit {
  357. opacity: 1;
  358. }
  359. }
  360. }
  361. .pinBottom-container {
  362. #myHotList {
  363. position: relative;
  364. float: left;
  365. width: 70px;
  366. display: flex;
  367. justify-content: center;
  368. align-items: center;
  369. cursor: pointer;
  370. }
  371. .openBox {
  372. opacity: 0;
  373. pointer-events: none;
  374. transition: all 0.3s;
  375. position: fixed;
  376. z-index: 9999;
  377. top: 0;
  378. left: 0;
  379. width: 100%;
  380. height: 100%;
  381. // background-color: rgba(255, 255, 255, 0.6);
  382. backdrop-filter: blur(10px);
  383. }
  384. .openBoxAc {
  385. opacity: 1;
  386. pointer-events: auto;
  387. }
  388. }
  389. .viewContainer {
  390. padding: 10px 20px 0 34px;
  391. }
  392. // 移动端
  393. @media screen and (max-width: 1000px) {
  394. .hoverTit {
  395. opacity: 0 !important;
  396. }
  397. .viewContainer {
  398. padding: 10px 20px 10px 10px;
  399. & > div {
  400. img {
  401. width: 40px !important;
  402. height: 40px !important;
  403. }
  404. }
  405. }
  406. .pinBottom-container #myHotList {
  407. width: 50px;
  408. margin-bottom: 15px;
  409. }
  410. .pinBottom-container {
  411. .pinBottom.right.hideTarget {
  412. position: fixed;
  413. top: 200px;
  414. right: 10px;
  415. .rightViewContainer {
  416. flex-direction: column;
  417. & > div,
  418. #volume {
  419. width: 50px !important;
  420. text-align: right;
  421. margin-right: 0;
  422. // margin-bottom: 10px;
  423. & > div {
  424. // display: flex;
  425. // justify-content: flex-end;
  426. }
  427. .container{
  428. right: auto;
  429. left: 50% !important;
  430. top: -68px;
  431. }
  432. img {
  433. width: 33px;
  434. height: 33px;
  435. }
  436. }
  437. }
  438. }
  439. }
  440. }
  441. #myClickBox {
  442. display: flex;
  443. flex-direction: column;
  444. position: fixed;
  445. z-index: 999;
  446. left: 50%;
  447. bottom: 38px;
  448. width: 146px;
  449. height: 146px;
  450. transform: translateX(-50%);
  451. background: url("../../assets/img/m_btn.png") no-repeat center / contain;
  452. transition: 0.2s bottom linear;
  453. > div {
  454. flex: 1;
  455. }
  456. }
  457. .pinBottom.open #myClickBox {
  458. bottom: calc(118px + 20px);
  459. }
  460. /* 进入的起点、离开的终点 */
  461. .slide-enter,
  462. .slide-leave-to {
  463. transform: translateX(100%);
  464. }
  465. .slide-enter-active,
  466. .slide-leave-active {
  467. transition: 0.5s linear;
  468. }
  469. /* 进入的终点、离开的起点 */
  470. .hello-enter-to,
  471. .slide-leave {
  472. transform: translateX(0);
  473. }
  474. </style>