menu.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. <template>
  2. <div
  3. class="pinBottom-container"
  4. :class="{
  5. mobile: isMobile,
  6. }"
  7. >
  8. <div class="pinBottom center">
  9. <div id="view-controllers" />
  10. </div>
  11. <div class="pinBottom left">
  12. <div>
  13. <div class="viewContainer">
  14. <!-- <div
  15. id="previous"
  16. class="previous desktop-only ui-icon"
  17. style="display: none"
  18. >
  19. <a>
  20. <img
  21. rel="tooltip"
  22. title=""
  23. :src="require('@/assets/images/play.png')"
  24. data-original-title="播放"
  25. draggable="false"
  26. />
  27. </a>
  28. </div> -->
  29. <!-- <div
  30. id="play"
  31. class="ui-icon"
  32. rel="tooltip"
  33. data-original-title="播放"
  34. >
  35. <a>
  36. <img
  37. :src="require('@/assets/images/auto-roaming-paused.png')"
  38. draggable="false"
  39. >
  40. </a>
  41. </div> -->
  42. <!-- <div
  43. id="pause"
  44. class="ui-icon"
  45. style="display: none"
  46. >
  47. <a>
  48. <img
  49. rel="tooltip"
  50. title=""
  51. :src="require('@/assets/images/auto-roaming.png')"
  52. data-original-title="暂停"
  53. draggable="false"
  54. >
  55. </a>
  56. </div> -->
  57. <!-- <div
  58. id="next"
  59. class="next desktop-only ui-icon wide"
  60. style="display: none"
  61. >
  62. <a>
  63. <i
  64. draggable="false"
  65. rel="tooltip"
  66. title=""
  67. class="icon icon-dpad-right"
  68. data-original-title="下一个"
  69. ></i>
  70. </a>
  71. </div> -->
  72. <div
  73. id="gui-modes-inside"
  74. data-original-title="全景漫游"
  75. rel="tooltip"
  76. >
  77. <img
  78. draggable="false"
  79. class="icon icon-inside active"
  80. :src="require('@/assets/images/inside.png')"
  81. >
  82. <img
  83. draggable="false"
  84. class="icon icon-inside inactive"
  85. :src="require('@/assets/images/inside-inactive.png')"
  86. >
  87. </div>
  88. <div
  89. id="pullTab"
  90. data-original-title="导览"
  91. rel="tooltip"
  92. title="场景导览"
  93. >
  94. <img
  95. v-if="isGuide"
  96. draggable="false"
  97. title=""
  98. class="icon icon-inside active"
  99. src="@/assets/images/scenes-guide.png"
  100. >
  101. <img
  102. v-if="!isGuide"
  103. draggable="false"
  104. title=""
  105. class="icon icon-inside inactive"
  106. src="@/assets/images/scenes-guide-paused.png"
  107. >
  108. </div>
  109. <div
  110. id="hotList"
  111. data-original-title="热点列表"
  112. rel="tooltip"
  113. title=""
  114. @click="$router.push({name: 'HotspotList'})"
  115. >
  116. <img
  117. draggable="false"
  118. class="icon icon-inside"
  119. :src="require('@/assets/images/hotlist.png')"
  120. >
  121. </div>
  122. <div
  123. id="gui-modes-dollhouse"
  124. title="迷你模型"
  125. data-original-title="迷你模型"
  126. rel="tooltip"
  127. >
  128. <!-- 鼠标移入的显示 -->
  129. <img
  130. draggable="false"
  131. class="icon icon-inside active"
  132. :src="require('@/assets/images/dollhouse.png')"
  133. >
  134. <img
  135. draggable="false"
  136. class="icon icon-inside inactive"
  137. :src="require('@/assets/images/dollhouse-inactive.png')"
  138. >
  139. </div>
  140. <div
  141. id="gui-modes-floorplan"
  142. data-original-title="俯视图"
  143. rel="tooltip"
  144. title="顶部俯视"
  145. >
  146. <!-- 鼠标移入的显示 -->
  147. <img
  148. draggable="false"
  149. class="icon icon-inside active"
  150. :src="require('@/assets/images/floor.png')"
  151. >
  152. <img
  153. draggable="false"
  154. class="icon icon-inside inactive"
  155. :src="require('@/assets/images/floor-inactive.png')"
  156. >
  157. </div>
  158. <!-- <div
  159. data-original-title="VR"
  160. id="vr"
  161. rel="tooltip"
  162. title=""
  163. style="display: none"
  164. >
  165. <img
  166. draggable="false"
  167. class="icon icon-inside"
  168. :src="require('@/assets/images/VR.png')"
  169. />
  170. </div> -->
  171. <!-- <div
  172. data-original-title="消除外壳"
  173. id="gui-remove-face"
  174. rel="tooltip"
  175. title=""
  176. style="display: none; float: left"
  177. >
  178. <img
  179. draggable="false"
  180. class="icon icon-inside"
  181. :src="require('@/assets/images/face.jpg')"
  182. />
  183. </div> -->
  184. </div>
  185. </div>
  186. </div>
  187. <div class="pinBottom right hideTarget">
  188. <div class="rightViewContainer clearfix">
  189. <!-- 音乐 -->
  190. <div
  191. id="volume"
  192. class="ui-icon wide"
  193. title="音乐"
  194. >
  195. <a>
  196. <img
  197. id="openMusic"
  198. style="display: block"
  199. src="../../assets/images/music-muted.png"
  200. alt=""
  201. title="打开音乐"
  202. @click="switchBGM(true)"
  203. >
  204. <img
  205. id="closeMusic"
  206. style="display: none"
  207. src="../../assets/images/music.png"
  208. alt=""
  209. title="关闭音乐"
  210. @click="switchBGM(false)"
  211. >
  212. </a>
  213. </div>
  214. <!-- 全屏 -->
  215. <!-- <div
  216. id="gui-fullscreen"
  217. class="ui-icon wide"
  218. data-placement="top"
  219. rel="tooltip"
  220. title="全屏"
  221. >
  222. <a>
  223. <img
  224. title="全屏"
  225. :src="require('@/assets/images/full.png')"
  226. draggable="false"
  227. >
  228. </a>
  229. </div> -->
  230. <!-- 取消全屏 -->
  231. <!-- <div
  232. id="gui-fullscreen-exit"
  233. class="ui-icon wide"
  234. data-placement="top"
  235. rel="tooltip"
  236. title="关闭全屏"
  237. style="display: none"
  238. >
  239. <a>
  240. <img
  241. title="关闭全屏"
  242. :src="require('@/assets/images/fullAc.png')"
  243. draggable="false"
  244. >
  245. </a>
  246. </div> -->
  247. </div>
  248. </div>
  249. </div>
  250. </template>
  251. <script>
  252. export default {
  253. data() {
  254. return {
  255. isGuide: false,
  256. mutationObserver: null,
  257. }
  258. },
  259. computed: {
  260. currentSceneCode() {
  261. return this.$route.query.m
  262. }
  263. },
  264. watch: {
  265. },
  266. mounted() {
  267. // 创建一个观察器实例并传入回调函数
  268. this.mutationObserver = new MutationObserver((mutationsList, observer) => {
  269. for (let mutation of mutationsList) {
  270. if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
  271. if (mutation.target.classList.contains('open')) {
  272. this.isGuide = true
  273. } else {
  274. this.isGuide = false
  275. }
  276. }
  277. }
  278. })
  279. // 选择需要观察变动的节点
  280. const targetNode = document.querySelector('.pinBottom.left')
  281. // 以上述配置开始观察目标节点
  282. this.mutationObserver.observe(targetNode, { attributes: true, childList: false, subtree: false })
  283. },
  284. beforeDistroy() {
  285. this.mutationObserver.disconnect()
  286. },
  287. methods: {
  288. switchBGM(flag) {
  289. if (flag) {
  290. window.manage.switchBgmState(true)
  291. document.querySelector("#openMusic").style.display = "none"
  292. document.querySelector("#closeMusic").style.display = "block"
  293. } else {
  294. window.manage.switchBgmState(false)
  295. document.querySelector("#openMusic").style.display = "block"
  296. document.querySelector("#closeMusic").style.display = "none"
  297. }
  298. },
  299. },
  300. }
  301. </script>
  302. <style lang="less" scoped>
  303. @button-size: 47px;
  304. @margin-right: 15px;
  305. // ----------左下方菜单--------------
  306. .pinBottom.left {
  307. bottom: 30px;
  308. &.playing {
  309. bottom: 50px !important;
  310. }
  311. &.open {
  312. bottom: 170px !important;
  313. }
  314. &.open.playing {
  315. bottom: 190px !important
  316. }
  317. > div {
  318. > .viewContainer {
  319. display: flex;
  320. flex-direction: row;
  321. margin-left: 30px;
  322. padding: 0;
  323. #play,
  324. #pause {
  325. margin-right: @margin-right;
  326. width: @button-size;
  327. height: @button-size;
  328. padding: 0;
  329. img {
  330. height: 100%;
  331. width: 100%;
  332. }
  333. }
  334. > div {
  335. margin-right: @margin-right;
  336. width: @button-size;
  337. height: @button-size;
  338. padding: 0;
  339. > img {
  340. height: 100%;
  341. width: 100%;
  342. }
  343. }
  344. > #pullTab {
  345. > img.inactive {
  346. display: block !important;
  347. opacity: 0.6;
  348. }
  349. > img.active {
  350. display: block !important;
  351. }
  352. }
  353. > #gui-modes-inside {
  354. > img.active {
  355. display: none;
  356. }
  357. > img.inactive {
  358. display: block;
  359. opacity: 0.6;
  360. }
  361. }
  362. > #gui-modes-dollhouse {
  363. > img.active {
  364. display: none;
  365. }
  366. > img.inactive {
  367. display: block;
  368. opacity: 0.6;
  369. }
  370. }
  371. > #gui-modes-floorplan {
  372. > img.active {
  373. display: none;
  374. }
  375. > img.inactive {
  376. display: block;
  377. opacity: 0.6;
  378. }
  379. }
  380. > #gui-modes-inside.active {
  381. > img.active {
  382. display: block;
  383. }
  384. > img.inactive {
  385. display: none;
  386. }
  387. }
  388. > #gui-modes-dollhouse.active {
  389. > img.active {
  390. display: block;
  391. }
  392. > img.inactive {
  393. display: none;
  394. }
  395. }
  396. > #gui-modes-floorplan.active {
  397. > img.active {
  398. display: block;
  399. }
  400. > img.inactive {
  401. display: none;
  402. }
  403. }
  404. }
  405. }
  406. }
  407. // ----------end of 左下方菜单--------------
  408. // ----------右下方菜单---------------
  409. .pinBottom.right {
  410. &.playing {
  411. bottom: 50px !important;
  412. }
  413. &.open {
  414. bottom: 170px !important;
  415. }
  416. &.open.playing {
  417. bottom: 190px !important
  418. }
  419. .rightViewContainer {
  420. display: flex !important;
  421. align-items: center !important;
  422. margin-right: 30px;
  423. .ui-icon {
  424. width: 47px;
  425. height: 47px;
  426. margin-left: 15px;
  427. margin-right: initial;
  428. background: none;
  429. border: none;
  430. padding: 0 !important;
  431. > a {
  432. width: 100% !important;
  433. height: 100% !important;
  434. > img {
  435. width: 100%;
  436. height: 100%;
  437. }
  438. }
  439. }
  440. }
  441. }
  442. // ----------end of 右下方菜单---------------
  443. // -------------移动端特殊样式---------------
  444. .mobile {
  445. .pinBottom.left {
  446. left: 0;
  447. bottom: 0;
  448. &.playing {
  449. bottom: 20px !important;
  450. }
  451. &.open {
  452. bottom: 137px !important;
  453. }
  454. &.open.playing {
  455. bottom: 157px !important
  456. }
  457. > div {
  458. > .viewContainer {
  459. flex-direction: column;
  460. margin-left: 3.6vw;
  461. margin-bottom: 8.8vw;
  462. padding: 1.3vw;
  463. background: rgba(255,255,255,0.3);
  464. border-radius: 0.9vw;
  465. #play,
  466. #pause,
  467. #gui-modes-inside,
  468. #pullTab,
  469. #hotList,
  470. #gui-modes-dollhouse,
  471. #gui-modes-floorplan {
  472. margin-bottom: 5.3vw;
  473. margin-right: 0;
  474. width: 8vw;
  475. height: 8vw;
  476. img {
  477. }
  478. }
  479. #gui-modes-floorplan {
  480. margin-bottom: initial;
  481. img {
  482. }
  483. }
  484. }
  485. }
  486. }
  487. .pinBottom.right {
  488. right: 0;
  489. bottom: 0;
  490. &.playing {
  491. bottom: 20px !important;
  492. }
  493. &.open {
  494. bottom: 137px !important;
  495. }
  496. &.open.playing {
  497. bottom: 157px !important
  498. }
  499. .rightViewContainer {
  500. margin-right: 3.6vw;
  501. margin-bottom: 8.8vw;
  502. padding: 1.3vw;
  503. flex-direction: column;
  504. align-items: flex-end !important;
  505. background: rgba(255,255,255,0.3);
  506. border-radius: 0.9vw;
  507. .ui-icon {
  508. width: 8vw;
  509. height: 8vw;
  510. margin-bottom: 5.3vw;
  511. margin-left: initial;
  512. > a {
  513. > img {
  514. }
  515. }
  516. }
  517. .ui-icon:last-of-type {
  518. margin-bottom: 0;
  519. }
  520. }
  521. }
  522. }
  523. // -------------end of 移动端特殊样式---------------
  524. </style>