menu.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661
  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
  8. class="drawbtn"
  9. @click="(isShow = !isShow), (showShare = false)"
  10. >
  11. <img
  12. :src="require(`@/assets/images/btnlist/drawback${!isShow ? '_out' : ''}.png`)"
  13. alt=""
  14. />
  15. </div>
  16. <div class="shouqi" :class="{ active: isShow }">
  17. <div class="viewContainer">
  18. <div
  19. id="previous"
  20. class="previous desktop-only ui-icon"
  21. style="display: none"
  22. >
  23. <a>
  24. <img
  25. rel="tooltip"
  26. title=""
  27. :src="require('@/assets/images/btnlist/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. :src="require('@/assets/images/btnlist/play.png')"
  44. width="24"
  45. height="24"
  46. />
  47. </a>
  48. </div>
  49. <div id="pause" class="ui-icon" style="display: none">
  50. <a>
  51. <img
  52. rel="tooltip"
  53. title=""
  54. :src="require('@/assets/images/btnlist/pause.png')"
  55. width="24"
  56. height="24"
  57. data-original-title="暂停"
  58. />
  59. </a>
  60. </div>
  61. <div
  62. id="next"
  63. class="next desktop-only ui-icon wide"
  64. style="display: none"
  65. >
  66. <a>
  67. <i
  68. rel="tooltip"
  69. title=""
  70. class="icon icon-dpad-right"
  71. data-original-title="下一个"
  72. ></i>
  73. </a>
  74. </div>
  75. <div id="gui-modes-map" class="ui-icon double active">
  76. <div
  77. data-original-title="导览"
  78. @click="isGuide = !isGuide"
  79. id="pullTab"
  80. rel="tooltip"
  81. title=""
  82. >
  83. <img
  84. class="icon icon-inside"
  85. :src="
  86. require(`@/assets/images/btnlist/auto${
  87. !isGuide ? `_active_${theme}` : ''
  88. }.png`)
  89. "
  90. title="导览"
  91. />
  92. </div>
  93. <!-- <div
  94. data-original-title="热点列表"
  95. id="hotList"
  96. rel="tooltip"
  97. title=""
  98. style="display: none"
  99. >
  100. <img
  101. class="icon icon-inside"
  102. :src="require('@/assets/images/btnlist/hotlist.png')"
  103. title="热点列表"
  104. />
  105. </div> -->
  106. <div
  107. data-original-title="全景漫游"
  108. id="gui-modes-inside"
  109. rel="tooltip"
  110. >
  111. <img
  112. class="icon icon-inside"
  113. :src="require('@/assets/images/btnlist/inside.png')"
  114. title="全景漫游"
  115. />
  116. <img
  117. class="icon icon-inside active"
  118. :src="require(`@/assets/images/btnlist/inside_active_${theme}.png`)"
  119. title="全景漫游"
  120. />
  121. </div>
  122. <div
  123. data-original-title="迷你模型"
  124. id="gui-modes-dollhouse"
  125. rel="tooltip"
  126. >
  127. <img
  128. class="icon icon-inside"
  129. :src="require('@/assets/images/btnlist/dollhouse.png')"
  130. title="迷你模型"
  131. />
  132. <img
  133. class="icon icon-inside active"
  134. :src="require(`@/assets/images/btnlist/dollhouse_active_${theme}.png`)"
  135. title="迷你模型 "
  136. />
  137. </div>
  138. <div
  139. data-original-title="俯视图"
  140. id="gui-modes-floorplan"
  141. rel="tooltip"
  142. title=""
  143. >
  144. <img
  145. class="icon icon-inside"
  146. :src="require('@/assets/images/btnlist/floor.png')"
  147. title="俯视图"
  148. />
  149. <img
  150. class="active icon icon-inside active"
  151. :src="require(`@/assets/images/btnlist/floor_active_${theme}.png`)"
  152. title="俯视图"
  153. />
  154. </div>
  155. <div
  156. data-original-title="VR"
  157. id="vr"
  158. rel="tooltip"
  159. title=""
  160. style="display: none"
  161. >
  162. <img
  163. class="icon icon-inside"
  164. :src="require('@/assets/images/btnlist/VR.png')"
  165. title="VR"
  166. />
  167. </div>
  168. <div
  169. data-original-title="消除外壳"
  170. id="gui-remove-face"
  171. rel="tooltip"
  172. title=""
  173. style="display: none; float: left"
  174. >
  175. <img
  176. class="icon icon-inside"
  177. :src="require('@/assets/images/btnlist/face.jpg')"
  178. title="消除外壳"
  179. />
  180. </div>
  181. </div>
  182. </div>
  183. <ul class="btn-list">
  184. <li @click.stop="handleItem(item)" v-for="(item, i) in btnlist" :key="i">
  185. <img
  186. :title="item.title"
  187. :src="require(`@/assets/images/btnlist/${item.id}${btnlistActive==item.id?`_${theme}`:''}.png`)"
  188. />
  189. </li>
  190. <li>
  191. <img
  192. id="bg-music-btn"
  193. :src="require(`@/assets/images/btnlist/bgm_on.png`)"
  194. />
  195. </li>
  196. </ul>
  197. <ul class="btn-list">
  198. <li title="点赞" class="like" @click="handleLike">
  199. <img :src="require(`@/assets/images/btnlist/like.png`)"/>
  200. <span>{{likeNum}} 点赞</span>
  201. <transition name="likeAddAnimate">
  202. <div class="good" v-show="isShowGood">
  203. <div class="pic">
  204. <img :src="require(`@/assets/images/btnlist/like_${theme}.png`)" alt="" />
  205. </div>
  206. <div class="num">+1</div>
  207. </div>
  208. </transition>
  209. </li>
  210. </ul>
  211. </div>
  212. </div>
  213. <div class="pinBottom right hideTarget">
  214. <div class="rightViewContainer clearfix">
  215. <div class="gui-floor">
  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 id="volume" class="ui-icon wide">
  223. <a>
  224. <img
  225. :src="require('@/assets/images/btnlist/解说-打开.png')"
  226. width="24"
  227. height="24"
  228. />
  229. </a>
  230. </div>
  231. <div id="vr" class="ui-icon wide hidden" style="display: none">
  232. <a>
  233. <i
  234. rel="tooltip"
  235. title="{[{ VIEW_IN_VR }]}"
  236. class="icon icon-webvr"
  237. ></i>
  238. </a>
  239. </div>
  240. <div id="sharing" class="ui-icon wide hidden" style="display: none">
  241. <a>
  242. <i
  243. rel="tooltip"
  244. title="{[{ SOCIAL_SHARING }]}"
  245. class="icon icon-share"
  246. ></i>
  247. </a>
  248. </div>
  249. <div
  250. id="gui-fullscreen"
  251. class="ui-icon wide"
  252. data-placement="top"
  253. rel="tooltip"
  254. title="{[{ VIEW_FULLSCREEN }]}"
  255. >
  256. <a title="全屏">
  257. <img class="icon icon-fullscreen" :src="require('@/assets/images/btnlist/大场景-展开.png')"/>
  258. </a>
  259. </div>
  260. <div
  261. id="gui-fullscreen-exit"
  262. class="ui-icon wide"
  263. data-placement="top"
  264. rel="tooltip"
  265. title="{[{ EXIT_FULLSCREEN }]}"
  266. style="display: none"
  267. >
  268. <a title="退出全屏">
  269. <img class="icon-fullscreen-exit" :src="require('@/assets/images/btnlist/大场景-缩小.png')"/>
  270. </a>
  271. </div>
  272. <div class="pull-right terms terms2">
  273. <a>{[{ TERMS }]}</a>
  274. </div>
  275. </div>
  276. </div>
  277. </div>
  278. </template>
  279. <script>
  280. import { checkLogin } from "@/config/api";
  281. import { getStar,dianzan } from "@/config/api";
  282. let menuli = [
  283. {
  284. id: "comment",
  285. path: "",
  286. title:'留言'
  287. },
  288. {
  289. id: "question",
  290. path: "",
  291. title:'答题'
  292. }
  293. ];
  294. export default {
  295. props:['itemctive'],
  296. components:{
  297. },
  298. data() {
  299. let conLi = [
  300. {
  301. id: "previous",
  302. class: "previous desktop-only ui-icon",
  303. style: "display: none",
  304. img: "play",
  305. title: "播放",
  306. },
  307. {
  308. id: "play",
  309. class: "ui-icon",
  310. img: "play",
  311. title: "播放",
  312. },
  313. {
  314. id: "pause",
  315. class: "ui-icon",
  316. style: "display: none",
  317. img: "pause",
  318. title: "暂停",
  319. },
  320. {
  321. id: "next",
  322. class: "next desktop-only ui-icon wide",
  323. style: "display: none",
  324. img: "pause",
  325. title: "下一个",
  326. },
  327. {
  328. id: "gui-modes-map",
  329. class: "ui-icon double active",
  330. subId: "pullTab",
  331. img: "auto",
  332. title: "导览",
  333. activeImg: true,
  334. },
  335. {
  336. id: "hotList",
  337. class: "ui-icon double active",
  338. style: "display: none",
  339. img: "hotlist",
  340. title: "热点列表",
  341. },
  342. {
  343. id: "gui-modes-inside",
  344. class: "ui-icon double active",
  345. img: "inside",
  346. title: "全景漫游",
  347. activeImg: true,
  348. },
  349. {
  350. id: "gui-modes-dollhouse",
  351. subId: "pullTab",
  352. img: "dollhouse",
  353. title: "迷你模型",
  354. activeImg: true,
  355. },
  356. {
  357. id: "gui-modes-floorplan",
  358. img: "floor",
  359. title: "俯视图",
  360. activeImg: true,
  361. },
  362. {
  363. id: "vr",
  364. img: "VR",
  365. style: "display: none",
  366. title: "VR",
  367. },
  368. {
  369. id: "gui-remove-face",
  370. style: "display: none; float: left",
  371. title: "消除外壳",
  372. },
  373. ];
  374. return {
  375. isShow: true,
  376. isGuide: true,
  377. conLi,
  378. showAutoList: false,
  379. btnlistActive:this.itemctive,
  380. isShowGood:false,
  381. likeNum:0
  382. };
  383. },
  384. computed: {
  385. btnlist() {
  386. return menuli;
  387. }
  388. },
  389. methods: {
  390. handleItem(item) {
  391. this.btnlistActive = item.id
  392. console.log('调用了');
  393. this.$emit('btnactive',item.id)
  394. },
  395. handleLike(){
  396. if (this.isShowGood) return
  397. checkLogin(res => {
  398. if (res.data) {
  399. dianzan(()=>{
  400. this.isShowGood = true
  401. setTimeout(() => {
  402. this.isShowGood = false
  403. this.likeNum++
  404. }, 2500);
  405. })
  406. } else {
  407. alert('请登录后操作')
  408. }
  409. })
  410. },
  411. getStar(){
  412. getStar(res=>{
  413. this.likeNum = res.data
  414. })
  415. },
  416. },
  417. mounted(){
  418. this.$bus.$on('resetbtnactive',()=>{
  419. this.btnlistActive = ''
  420. })
  421. this.getStar()
  422. }
  423. };
  424. </script>
  425. <style lang="less" scoped>
  426. #gui-modes-map {
  427. > div {
  428. > img {
  429. display: block!important;
  430. }
  431. .active {
  432. display: none!important;
  433. }
  434. }
  435. .active {
  436. > img {
  437. display: none!important;
  438. }
  439. .active {
  440. display: block!important;
  441. }
  442. }
  443. }
  444. #pinMobile {
  445. > li {
  446. > div {
  447. > img {
  448. display: block;
  449. }
  450. .active {
  451. display: none;
  452. }
  453. }
  454. }
  455. .active {
  456. > div {
  457. > img {
  458. display: none;
  459. }
  460. .active {
  461. display: block;
  462. }
  463. }
  464. }
  465. }
  466. .shouqi {
  467. max-width: 0;
  468. border-radius: 25px;
  469. transition: all 0.3s ease;
  470. display: flex;
  471. overflow: hidden;
  472. }
  473. .shouqi.active {
  474. max-width: 800px;
  475. }
  476. .drawbtn {
  477. display: flex;
  478. background: rgba(0, 0, 0, 0.6);
  479. border-radius: 25px;
  480. width: 48px;
  481. height: 48px;
  482. float: left;
  483. justify-content: center;
  484. align-items: center;
  485. position: relative;
  486. cursor: pointer;
  487. img {
  488. position: absolute;
  489. top: 50%;
  490. left: 50%;
  491. transform: translate(-50%, -50%);
  492. width: 25px;
  493. }
  494. }
  495. .btn-list {
  496. display: flex;
  497. justify-content: space-between;
  498. align-items: center;
  499. background: rgba(0, 0, 0, 0.6);
  500. border-radius: 25px;
  501. margin-left: 20px;
  502. > li {
  503. width: 60px;
  504. height: 48px;
  505. display: flex;
  506. justify-content: center;
  507. align-items: center;
  508. cursor: pointer;
  509. > img {
  510. width: 28px;
  511. height: 28px;
  512. }
  513. }
  514. .like{
  515. min-width: 150px;
  516. width: auto;
  517. >span{
  518. font-size: 14px;
  519. color: #fff;
  520. display: inline-block;
  521. margin-left: 10px;
  522. }
  523. }
  524. }
  525. .hoverCls {
  526. position: absolute;
  527. right: -45px;
  528. bottom: 60px;
  529. > img {
  530. width: 150px;
  531. }
  532. .hoverBody {
  533. position: absolute;
  534. top: 50%;
  535. left: 50%;
  536. transform: translate(-50%, -50%);
  537. width: 100%;
  538. text-align: center;
  539. > img {
  540. width: 70%;
  541. display: block;
  542. margin: 0 auto;
  543. }
  544. span {
  545. margin-top: 20px;
  546. display: inline-block;
  547. }
  548. }
  549. }
  550. #pinMobile {
  551. margin: 0;
  552. max-width: none !important;
  553. background: rgba(0, 0, 0, 0.5);
  554. border-radius: 3px;
  555. margin-bottom: 50px;
  556. > li {
  557. width: 40px !important;
  558. height: 40px !important;
  559. display: flex;
  560. justify-content: center;
  561. align-items: center;
  562. margin: 4px 0;
  563. > div {
  564. > img {
  565. width: 24px;
  566. height: 24px;
  567. }
  568. }
  569. }
  570. }
  571. .menu_btn {
  572. width: 40px;
  573. height: 40px;
  574. position: absolute;
  575. bottom: 0;
  576. right: 0;
  577. background: rgba(0, 0, 0, 0.5);
  578. border-radius: 3px;
  579. > img {
  580. width: 18px;
  581. height: 18px;
  582. position: absolute;
  583. transform: translate(-50%, -50%);
  584. top: 50%;
  585. left: 50%;
  586. }
  587. }
  588. @media only screen and (max-width: 487px), (max-height: 487px) {
  589. .btn-list_m {
  590. margin: 0;
  591. max-width: none !important;
  592. background: rgba(0, 0, 0, 0.5);
  593. border-radius: 3px;
  594. margin-bottom: 50px;
  595. > li {
  596. width: 40px !important;
  597. height: 40px !important;
  598. display: flex;
  599. justify-content: center;
  600. align-items: center;
  601. margin: 4px 0;
  602. cursor: pointer;
  603. > img {
  604. width: 24px;
  605. height: 24px;
  606. }
  607. }
  608. }
  609. }
  610. .likeAddAnimate-enter-active,
  611. .likeAddAnimate-leave-active {
  612. transition: all 2.8s ease;
  613. }
  614. .likeAddAnimate-enter,
  615. .likeAddAnimate-leave {
  616. transform: translateY(0) scale(0);
  617. opacity: 0;
  618. }
  619. .likeAddAnimate-enter-to,
  620. .likeAddAnimate-leave-to {
  621. transform: translateY(-50px) scale(1.2);
  622. opacity: 1;
  623. }
  624. .good {
  625. position: absolute;
  626. bottom: 10px;
  627. right: 70px;
  628. display: flex;
  629. .pic {
  630. width: 35px;
  631. > img {
  632. width: 100%;
  633. height: 100%;
  634. }
  635. }
  636. .num {
  637. margin-top: 10px;
  638. margin-left: 10px;
  639. color: #fff;
  640. text-shadow: 0 0 10px rgba(0, 0, 0, 1);
  641. }
  642. }
  643. </style>