HomeView.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <template>
  2. <div class="home">
  3. <transition name="fade-out">
  4. <div
  5. v-if="isShowVideo"
  6. class="video-wrap"
  7. >
  8. <video
  9. id="VideoDom"
  10. src="@/assets/videos/swkk-fade-in-video.mp4"
  11. muted
  12. autoplay
  13. playsinline
  14. x5-playsinline
  15. webkit-playsinline
  16. @ended="onVideoHide"
  17. />
  18. <button
  19. class="skip"
  20. :class="{ active: isShowSkip }"
  21. @click="onVideoHide"
  22. >
  23. <span>跳过</span>
  24. </button>
  25. </div>
  26. </transition>
  27. <button
  28. class="music"
  29. @click="toggleMute"
  30. >
  31. <img
  32. :src="isMuted ? require('@/assets/images/music-muted-homepage.png') : require('@/assets/images/music-homepage.png')"
  33. alt="声音"
  34. draggable="false"
  35. >
  36. </button>
  37. <img
  38. class="title"
  39. src="@/assets/images/title.png"
  40. alt="雨花台烈士纪念馆"
  41. draggable="false"
  42. >
  43. <div class="button-group">
  44. <router-link
  45. class="router-link"
  46. to="./swkk-view?floor=1"
  47. >
  48. <img
  49. src="@/assets/images/button-to-scenes.png"
  50. alt="场馆漫游"
  51. draggable="false"
  52. >
  53. <span>场馆漫游</span>
  54. </router-link>
  55. <router-link
  56. class="router-link"
  57. to="./oblique-view"
  58. >
  59. <img
  60. src="@/assets/images/button-to-panos.png"
  61. alt="全景风貌"
  62. draggable="false"
  63. >
  64. <span>全景风貌</span>
  65. </router-link>
  66. <router-link
  67. class="router-link"
  68. to="./relics-appr"
  69. >
  70. <img
  71. src="@/assets/images/button-to-relics.png"
  72. alt="文物赏析"
  73. draggable="false"
  74. >
  75. <span>文物赏析</span>
  76. </router-link>
  77. </div>
  78. </div>
  79. </template>
  80. <script>
  81. export default {
  82. name: 'HomeView',
  83. components: {
  84. },
  85. beforeRouteEnter (to, from, next) {
  86. next(vm => {
  87. if (!from.name) {
  88. vm.isShowVideo = true
  89. }
  90. })
  91. },
  92. data() {
  93. return {
  94. isShowSkip: false,
  95. isShowVideo: false,
  96. }
  97. },
  98. computed: {
  99. ...globalMapState([
  100. 'isMuted',
  101. ])
  102. },
  103. mounted() {
  104. setTimeout(() => {
  105. this.isShowSkip = true
  106. }, 3000)
  107. // setTimeout(() => {
  108. // let dom = document.querySelector("#VideoDom")
  109. // if (dom) {
  110. // console.log('找到了视频')
  111. // dom.play()
  112. // dom.addEventListener('canplaythrough', () => {
  113. // console.log('play!!!!!')
  114. // dom.play()
  115. // })
  116. // dom.addEventListener("ended", () => {
  117. // this.isShowVideo = false
  118. // })
  119. // } else {
  120. // console.error('居然没找到视频?!')
  121. // }
  122. // }, 2000)
  123. },
  124. methods: {
  125. ...globalMapMutations([
  126. 'toggleMute',
  127. ]),
  128. onVideoHide() {
  129. this.isShowVideo = false
  130. const audioNode = document.getElementById('global-audio')
  131. audioNode.src = require(`@/assets/audios/${globalConfig.audioName.homeView}.mp3`)
  132. audioNode.play()
  133. }
  134. }
  135. }
  136. </script>
  137. <style lang="less" scoped>
  138. .home {
  139. position: relative;
  140. height: 100%;
  141. background-color: #D8B275;
  142. background-image: url(@/assets/images/homepage-bg.jpg);
  143. background-size: cover;
  144. .video-wrap {
  145. position: absolute;
  146. top: 0;
  147. left: 0;
  148. width: 100%;
  149. height: 100%;
  150. z-index: 2;
  151. background-color: #000;
  152. > video {
  153. width: 100%;
  154. height: 100%;
  155. object-fit: cover;
  156. }
  157. .skip {
  158. opacity: 0;
  159. pointer-events: none;
  160. transition: opacity 0.5s;
  161. background-image: url("@/assets/images/skip.png");
  162. background-size: 100% 100%;
  163. position: absolute;
  164. bottom: 4.96rem;
  165. right: 1.29rem;
  166. width: 5.42rem;
  167. height: 5.42rem;
  168. font-size: 1.25rem;
  169. color: #930909;
  170. &.active {
  171. opacity: 1;
  172. pointer-events: auto;
  173. }
  174. span {
  175. position: absolute;
  176. left: 50%;
  177. top: 50%;
  178. transform: translate(-40%, -50%);
  179. }
  180. }
  181. }
  182. button.music {
  183. position: absolute;
  184. width: 3.08rem;
  185. height: 3.08rem;
  186. top: 1.1rem;
  187. right: 1.79rem;
  188. > img {
  189. width: 100%;
  190. height: 100%;
  191. }
  192. }
  193. .title {
  194. position: absolute;
  195. width: 39.63rem;
  196. top: 9.4%;
  197. left: 50%;
  198. transform: translateX(-50%);
  199. }
  200. .button-group {
  201. position: absolute;
  202. left: 50%;
  203. bottom: 8.08rem;
  204. transform: translateX(-50%);
  205. display: inline-flex;
  206. flex-direction: column;
  207. gap: 3rem;
  208. > .router-link {
  209. display: inline-block;
  210. width: 21.67rem;
  211. height: 6.25rem;
  212. position: relative;
  213. > img {
  214. width: 100%;
  215. height: 100%;
  216. }
  217. > span {
  218. position: absolute;
  219. top: 50%;
  220. left: 8.46rem;
  221. transform: translateY(-50%);
  222. color: #fff;
  223. font-weight: bold;
  224. font-size: 1.83rem;
  225. }
  226. }
  227. }
  228. }
  229. </style>