menu.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. <template>
  2. <div class="pinBottom-container">
  3. <div class="pinBottom center">
  4. <div id="view-controllers"></div>
  5. </div>
  6. <div class="pinBottom left">
  7. <div class="pinBflex">
  8. <Danmaku
  9. class="danmaku"
  10. :quotes="quotes"
  11. :danmuArr="danmu"
  12. :showIcon="require(`@/assets/images/icon/danmu_open.png`)"
  13. :closeIcon="require('@/assets/images/icon/danmu_close.png')"
  14. :arrowIcon="require('@/assets/images/icon/danmu_top.png')"
  15. />
  16. <div class="viewContainer">
  17. <div
  18. id="previous"
  19. class="previous desktop-only ui-icon tooltip"
  20. style="display: none"
  21. title="播放"
  22. >
  23. <a>
  24. <img
  25. rel="tooltip"
  26. title=""
  27. :src="require('@/assets/images/play.png')"
  28. width="24"
  29. height="24"
  30. data-original-title="播放"
  31. />
  32. </a>
  33. </div>
  34. <div
  35. id="play"
  36. class="ui-icon"
  37. rel="tooltip"
  38. data-original-title="播放"
  39. >
  40. <a>
  41. <img
  42. title="自动导览"
  43. class="tttttt"
  44. :src="require('@/assets/images/icon/bigscene/play.png')"
  45. width="24"
  46. height="24"
  47. />
  48. </a>
  49. </div>
  50. <div id="pause" class="ui-icon" style="display: none">
  51. <a>
  52. <img
  53. rel="tooltip"
  54. title="自动导览"
  55. class="tttttt"
  56. :src="require('@/assets/images/icon/bigscene/pause.png')"
  57. width="24"
  58. height="24"
  59. data-original-title="暂停"
  60. />
  61. </a>
  62. </div>
  63. <div
  64. id="next"
  65. class="next desktop-only ui-icon wide"
  66. style="display: none"
  67. >
  68. <a>
  69. <i
  70. rel="tooltip"
  71. title=""
  72. class="icon icon-dpad-right"
  73. data-original-title="下一个"
  74. ></i>
  75. </a>
  76. </div>
  77. <div id="gui-modes-map" class="ui-icon double active">
  78. <div
  79. data-original-title="导览"
  80. @click="handleguide"
  81. id="pullTab"
  82. rel="tooltip"
  83. title="导览片段"
  84. class="tttttt"
  85. >
  86. <img
  87. class="icon icon-inside"
  88. :src="
  89. require(`@/assets/images/icon/bigscene/auto${
  90. !isGuide ? '_active' : ''
  91. }.png`)
  92. "
  93. />
  94. </div>
  95. <div
  96. data-original-title="全景漫游"
  97. id="gui-modes-inside"
  98. rel="tooltip"
  99. title="全景漫游"
  100. class="tttttt"
  101. >
  102. <img
  103. class="icon icon-inside"
  104. :src="require('@/assets/images/icon/bigscene/inside.png')"
  105. />
  106. <img
  107. class="icon icon-inside active"
  108. :src="require('@/assets/images/icon/bigscene/inside_active.png')"
  109. />
  110. </div>
  111. <div
  112. data-original-title="迷你模型"
  113. id="gui-modes-dollhouse"
  114. rel="tooltip"
  115. title="迷你模型"
  116. class="tttttt"
  117. >
  118. <img
  119. class="icon icon-inside"
  120. :src="require('@/assets/images/icon/bigscene/dollhouse.png')"
  121. />
  122. <img
  123. class="icon icon-inside active"
  124. :src="require('@/assets/images/icon/bigscene/dollhouse_active.png')"
  125. title="navigation icon "
  126. />
  127. </div>
  128. <div
  129. data-original-title="俯视图"
  130. id="gui-modes-floorplan"
  131. rel="tooltip"
  132. title="俯视图"
  133. class="tttttt"
  134. >
  135. <img
  136. class="icon icon-inside"
  137. :src="require('@/assets/images/icon/bigscene/floor.png')"
  138. />
  139. <img
  140. class="active icon icon-inside active"
  141. :src="require('@/assets/images/icon/bigscene/floor_active.png')"
  142. />
  143. </div>
  144. <div rel="music">
  145. <img title="音频"
  146. @click="switchBGM"
  147. class="tttttt icon" :src="require(`@/assets/images/icon/bigscene/music${music?'off':'on'}.png`)" />
  148. </div>
  149. <div rel="like">
  150. <div title="点赞" class="likekkk tttttt">
  151. <img
  152. :class="[isdianzan?'likeactive':'nolike']"
  153. @click.stop="dianzan"
  154. class=" icon" :src="require('@/assets/images/icon/bigscene/likexuliezhen.png')" />
  155. </div>
  156. </div>
  157. <div class="submenu">
  158. <img title="更多菜单" class="tttttt" @click="isShowList=!isShowList" :src="require(`@/assets/images/icon/bigscene/menu${isShowList?'_active':''}.png`)" />
  159. <ul class="ul" :class="{'activeUl':isShowList}">
  160. <li :title="item.name" class="tttttt" v-for="(item,i) in subList" :key="i">
  161. <img @click="clickItem(item)" :src="require(`@/assets/images/icon/bigscene/sublist/${item.img + (subActive==item.img?'_active':'')}.png`)" alt="">
  162. </li>
  163. </ul>
  164. </div>
  165. <div
  166. data-original-title="VR"
  167. id="vr"
  168. rel="tooltip"
  169. title=""
  170. style="display: none"
  171. >
  172. <img
  173. class="icon icon-inside"
  174. :src="require('@/assets/images/VR.png')"
  175. />
  176. </div>
  177. <!-- <div
  178. data-original-title="热点列表"
  179. id="hotList"
  180. rel="tooltip"
  181. title=""
  182. style="display: none"
  183. >
  184. <img
  185. class="icon icon-inside"
  186. :src="require('@/assets/images/hotlist.png')"
  187. />
  188. <img
  189. class="icon icon-inside active"
  190. :src="require('@/assets/images/hotlist.png')"
  191. />
  192. </div> -->
  193. <div
  194. data-original-title="消除外壳"
  195. id="gui-remove-face"
  196. rel="tooltip"
  197. title=""
  198. style="display: none; float: left"
  199. >
  200. <img
  201. class="icon icon-inside"
  202. :src="require('@/assets/images/face.jpg')"
  203. />
  204. </div>
  205. </div>
  206. </div>
  207. </div>
  208. </div>
  209. <div class="pinBottom right hideTarget">
  210. <div class="rightViewContainer clearfix">
  211. <xunirenwu :active="xunirenwu" v-if="isMainScene"/>
  212. <div v-if="isMainScene" class="commentator">
  213. <img title="虚拟人物切换" class="tttttt icon" @click="clickItem(curecom)" :src="require('@/assets/images/icon/bigscene/change.png')" />
  214. </div>
  215. <div class="gui-floor tttttt" title="楼层切换">
  216. <div class="gui-floor-title"></div>
  217. <div class="gui-floor-icon">
  218. <span class="gui-floor-number"></span>
  219. </div>
  220. <div class="container"></div>
  221. </div>
  222. <div class="bgandshare">
  223. <div class="ui-icon wide">
  224. <img id="gui-fullscreen" title="全屏" class="tttttt" :src="require('@/assets/images/icon/bigscene/fullscreen.png')" />
  225. <img id="gui-fullscreen-exit" title="退出全屏" class="tttttt" style="display: none" :src="require('@/assets/images/icon/bigscene/screen.png')" />
  226. </div>
  227. </div>
  228. <div id="volume" class="ui-icon wide">
  229. <a>
  230. <img src="images/Volume btn_on.png" width="24" height="24">
  231. </a>
  232. </div>
  233. <div id="vr" class="ui-icon wide hidden" style="display: none">
  234. <a>
  235. <i
  236. rel="tooltip"
  237. title="{[{ VIEW_IN_VR }]}"
  238. class="icon icon-webvr"
  239. ></i>
  240. </a>
  241. </div>
  242. <div id="sharing" class="ui-icon wide hidden" style="display: none">
  243. <a>
  244. <i
  245. rel="tooltip"
  246. title="{[{ SOCIAL_SHARING }]}"
  247. class="icon icon-share"
  248. ></i>
  249. </a>
  250. </div>
  251. <!-- <div
  252. id="gui-fullscreen-exit"
  253. class="ui-icon wide"
  254. data-placement="top"
  255. rel="tooltip"
  256. title="{[{ EXIT_FULLSCREEN }]}"
  257. style="display: none"
  258. >
  259. <a>
  260. <i class="icon icon-fullscreen-exit"></i>
  261. </a>
  262. </div> -->
  263. <div class="pull-right terms terms2">
  264. <a>{[{ TERMS }]}</a>
  265. </div>
  266. </div>
  267. </div>
  268. </div>
  269. </template>
  270. <script>
  271. import Danmaku from "@/components/Danmaku";
  272. import xunirenwu from "@/newcomponents/xunirenwu";
  273. import { getList } from "@/config/api";
  274. export default {
  275. components: {Danmaku,xunirenwu},
  276. data() {
  277. let isMainScene = window.number
  278. return {
  279. isShowList:false,
  280. isMainScene:isMainScene,
  281. isGuide: true,
  282. isdianzan:false,
  283. music:false,
  284. curecom:{ id: 5, current: xunirenwu, img: 'commentator'},
  285. danmu:[
  286. "我是光荣的白衣天使,在春风里绽放笑容",
  287. "救死扶伤的行列里,我们是排头兵",
  288. "用爱心浇灌生命之树常青,用奉献书写神圣历史使命",
  289. "忠诚信仰,血脉传承,追求卓越攀高峰",
  290. ],
  291. subActive:'',
  292. xunirenwu:'male',
  293. quotes:[
  294. "我是光荣的白衣天使,在春风里绽放笑容",
  295. "救死扶伤的行列里,我们是排头兵",
  296. "用爱心浇灌生命之树常青,用奉献书写神圣历史使命",
  297. "忠诚信仰,血脉传承,追求卓越攀高峰",
  298. "以医疗工作为中心,一切为了病人",
  299. "忠诚保健、甘于奉献、精益求精、勇攀高峰",
  300. "服务满腔热忱 技术精益求精"
  301. ],
  302. };
  303. },
  304. computed: {
  305. subList(){
  306. return this.isMainScene ? [{
  307. name: "互动留言",
  308. link: "/message",
  309. id: 2,
  310. img: "chat",
  311. },
  312. {
  313. name: "精品典藏",
  314. link: "/collection",
  315. id: 1,
  316. img: "collection",
  317. },
  318. {
  319. name: "捐赠",
  320. link: "/message",
  321. id: 3,
  322. img: "donate",
  323. },
  324. {
  325. name: "问答",
  326. link: "/message",
  327. id: 4,
  328. img: "Q&A",
  329. }] : [{
  330. name: "互动留言",
  331. link: "/message",
  332. id: 2,
  333. img: "chat",
  334. },
  335. {
  336. name: "捐赠",
  337. link: "/message",
  338. id: 3,
  339. img: "donate",
  340. }]
  341. }
  342. },
  343. mounted(){
  344. this.isMainScene = window.number == '1149_2'
  345. this.$bus.$on('resetbtnactive',()=>{
  346. this.subActive = ''
  347. })
  348. this.$bus.$on('opencommentator',()=>{
  349. this.clickItem(this.curecom)
  350. })
  351. this.getData()
  352. // title提示语
  353. $('.tttttt').tooltipster({
  354. delay: 300,
  355. });
  356. },
  357. methods: {
  358. handleguide(e, outclk){
  359. console.log(e,outclk,111111)
  360. if(outclk){
  361. if(!this.isGuide){
  362. $('#pullTab').click()
  363. this.isGuide = true
  364. }
  365. return
  366. }
  367. else{
  368. this.isGuide = !this.isGuide
  369. }
  370. },
  371. dianzan(){
  372. this.isdianzan = !this.isdianzan
  373. },
  374. clickItem(item){
  375. this.subActive = item.img
  376. this.$emit("btnactive", item.img);
  377. },
  378. async getData() {
  379. let params = {
  380. pageNum: 1,
  381. pageSize: 1000,
  382. };
  383. getList("barrage", params, (res) => {
  384. this.danmu = res.data.list.map(item=>item.content).reverse()
  385. });
  386. },
  387. switchBGM() {
  388. this.music=!this.music
  389. window.ISMUTED = this.music
  390. if(SoundManager.currentAudio.audio){
  391. SoundManager.currentAudio.audio.muted = this.music
  392. if(!this.music){
  393. this.$bus.$emit("changexlzmode","Speaking1")
  394. } else{
  395. this.$bus.$emit("resetxlzmode")
  396. }
  397. }
  398. // console.log(window.ISMUTED);
  399. },
  400. },
  401. };
  402. </script>
  403. <style lang="less" scoped>
  404. @wh: 47px;
  405. @margin: 0px;
  406. #play,
  407. #pause {
  408. margin-right: @margin;
  409. img {
  410. width: @wh;
  411. height: @wh;
  412. }
  413. }
  414. #gui-modes-map {
  415. > div {
  416. margin-right: @margin;
  417. > img {
  418. width: @wh;
  419. height: @wh;
  420. display: block!important;
  421. }
  422. .active {
  423. display: none!important;
  424. }
  425. }
  426. .active {
  427. > img {
  428. display: none!important;
  429. }
  430. .active {
  431. display: block!important;
  432. }
  433. }
  434. }
  435. #gui-modes-map>div[rel], #play, #pause{
  436. width: auto;
  437. margin: 0 12px;
  438. }
  439. .commentator{
  440. width: @wh!important;
  441. height: @wh!important;
  442. margin-bottom: 40px;
  443. >img{
  444. width: 100%;
  445. height: 100%;
  446. }
  447. }
  448. .likekkk{
  449. width: 47px;
  450. height: 47px;
  451. overflow: hidden;
  452. position: relative;
  453. >img {
  454. position: absolute;
  455. left: 0;
  456. width: 2538px!important;
  457. height: 47px!important;
  458. top: 0;
  459. animation-direction: alternate;
  460. }
  461. .likeactive {
  462. animation: like 1.4s steps(53) 1 forwards;
  463. }
  464. .nolike{
  465. animation: nolike 1.4s steps(53) 1 forwards;
  466. }
  467. }
  468. .gui-floor{
  469. width: @wh!important;
  470. height: @wh!important;
  471. border-radius: 50%;
  472. margin-right: 0;
  473. margin-bottom: 0;
  474. position: relative;
  475. background: linear-gradient(359deg, rgba(26, 14, 10, 0.6) 0%, rgba(112, 80, 73, .6) 100%);
  476. // &::before{
  477. // content: '';
  478. // width: 110%;
  479. // height: 110%;
  480. // background: linear-gradient(45deg, #338F7B 0%, #143E3A 100%);
  481. // border-radius: 50%;
  482. // position: absolute;
  483. // z-index: -1;
  484. // top: 50%;
  485. // transform: translate(-50%,-50%);
  486. // left: 50%;
  487. // }
  488. }
  489. .submenu{
  490. display: inline-block;
  491. margin: 0 13px;
  492. position: relative;
  493. >img{
  494. width: @wh;
  495. cursor: pointer;
  496. }
  497. .ul{
  498. display: flex;
  499. align-items: center;
  500. position: absolute;
  501. left: calc(100% + 13px);
  502. top: 50%;
  503. transform: translateY(-50%);
  504. max-width: 0;
  505. overflow: hidden;
  506. transition: .3s ease all;
  507. min-height: 50px;
  508. >li{
  509. margin: 0 13px;
  510. >img{
  511. width: @wh!important;
  512. height: @wh!important;
  513. cursor: pointer;
  514. }
  515. }
  516. }
  517. .activeUl{
  518. max-width: 340px;
  519. }
  520. }
  521. .rightViewContainer {
  522. display: flex;
  523. align-items: flex-end;
  524. flex-direction: column;
  525. justify-content: flex-end;
  526. margin-bottom: 10px;
  527. }
  528. .bgandshare {
  529. display: flex;
  530. justify-content: center;
  531. align-items: center;
  532. > div {
  533. margin-top: 10px;
  534. background: none !important;
  535. cursor: pointer;
  536. margin-right: 0!important;
  537. img {
  538. width: @wh!important;
  539. }
  540. }
  541. }
  542. @media only screen and (max-width: 487px) {
  543. @wh: 70px;
  544. #play,
  545. #pause {
  546. margin-right: @margin;
  547. img {
  548. width: @wh;
  549. height: @wh;
  550. }
  551. }
  552. #gui-modes-map {
  553. > div {
  554. margin-right: @margin;
  555. > img {
  556. width: @wh;
  557. height: @wh;
  558. display: block;
  559. }
  560. .active {
  561. display: none;
  562. }
  563. }
  564. .active {
  565. > img {
  566. display: none;
  567. }
  568. .active {
  569. display: block;
  570. }
  571. }
  572. }
  573. .bgandshare {
  574. display: flex;
  575. position: fixed;
  576. top: 12%;
  577. right: 6px;
  578. flex-direction: column;
  579. > div {
  580. width: @wh!important;
  581. img {
  582. width: 100%;
  583. }
  584. }
  585. }
  586. }
  587. .pinBflex{
  588. display: flex;
  589. align-items: flex-end;
  590. position: relative;
  591. padding-left: 354px;
  592. }
  593. .danmaku{
  594. z-index: 99;
  595. width: 340px;
  596. margin-right: 20px;
  597. position: absolute;
  598. left: 0;
  599. bottom: 4px;
  600. }
  601. @keyframes like {
  602. 0%{
  603. left: 0;
  604. }
  605. 100% {
  606. left: -2491px;
  607. }
  608. }
  609. @keyframes nolike {
  610. 100%{
  611. left: 0;
  612. }
  613. }
  614. </style>