CameraContent-1-2-3.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <template>
  2. <div class="camera-content-1-1">
  3. <button
  4. class="return"
  5. @click="handleClose"
  6. />
  7. <div class="content-wrap">
  8. <div class="content-wrap__left">
  9. <p class="card-title left">
  10. 忽必烈召见赵孟頫
  11. </p>
  12. <p class="text-indent">
  13. 赵孟頫觐见忽必烈,得到忽必烈的称许:“果真是一表人才、丰神俊朗,就如那九天之上的仙人啊!朕授予你兵部郎中之职,愿你尽忠职守。”
  14. </p>
  15. </div>
  16. <div class="map">
  17. <p
  18. v-for="(point, idx) in mapPoint"
  19. :key="point"
  20. :class="{
  21. active: idx === curIndex - 1
  22. }"
  23. @click="curIndex = idx + 1"
  24. >
  25. {{ point }}
  26. </p>
  27. <div
  28. v-if="showTipsCover"
  29. class="tips-cover"
  30. @click="closeTipsCover"
  31. >
  32. <span>点击查看</span>
  33. </div>
  34. </div>
  35. <div class="video">
  36. <video
  37. controls
  38. controlsList="nodownload"
  39. autoplay
  40. :src="require(`@/assets/videos/1-2-3/${curIndex}.mp4`)"
  41. x5-playsinline="true"
  42. playsinline="true"
  43. webkit-playsinline="true"
  44. x-webkit-airplay="true"
  45. x5-video-player-type="h5-page"
  46. @play="stopBgAudio"
  47. @ended="startBgAudio"
  48. />
  49. <p
  50. class="img-tips"
  51. style="text-align: center;"
  52. >
  53. {{ imgTips[curIndex - 1] }}
  54. </p>
  55. </div>
  56. </div>
  57. </div>
  58. </template>
  59. <script setup>
  60. import { ref, inject } from 'vue'
  61. const {
  62. windowSizeInCssForRef,
  63. windowSizeWhenDesignForRef,
  64. } = useSizeAdapt(1920, 970)
  65. const TIPS_COVER_KEY = 'ydd-1-2-3-tips'
  66. const startBgAudio = inject("startBgAudio")
  67. const stopBgAudio = inject("stopBgAudio")
  68. const emit = defineEmits(['close'])
  69. const curIndex = ref(1)
  70. const showTipsCover = ref(!localStorage.getItem(TIPS_COVER_KEY))
  71. const mapPoint = ['德清', '南浔', '宝应', '济州', '虎陂', '大都']
  72. const imgTips = [
  73. '德清——赵孟頫接获北上诏令',
  74. '南浔——赵孟頫南浔北得独孤赠兰亭序,舟中写跋',
  75. '宝应——赵孟頫舟中展卷',
  76. '济州——赵孟頫济州急登船',
  77. '虎陂——赵孟頫虎陂等待放闸',
  78. '大都——赵孟頫抵达大都'
  79. ]
  80. const handleClose = () => {
  81. startBgAudio()
  82. emit('close')
  83. }
  84. const closeTipsCover = () => {
  85. showTipsCover.value = false
  86. localStorage.setItem(TIPS_COVER_KEY, 1)
  87. }
  88. </script>
  89. <style lang="less" scoped>
  90. .camera-content-1-1{
  91. position: absolute;
  92. left: 0;
  93. top: 0;
  94. width: 100%;
  95. height: 100%;
  96. background: rgba(0,0,0,0.45);
  97. backdrop-filter: blur(60px);
  98. .tips-cover {
  99. top: calc(-50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  100. left: calc(-70 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  101. right: calc(-70 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  102. bottom: calc(-50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  103. }
  104. >button.return{
  105. position: absolute;
  106. width: 58px;
  107. height: 58px;
  108. left: 42px;
  109. top: 68px;
  110. background-image: url(@/assets/images/btn-return.png);
  111. background-size: contain;
  112. background-repeat: no-repeat;
  113. background-position: center center;
  114. }
  115. .content-wrap{
  116. position: absolute;
  117. top: 0;
  118. left: 0;
  119. right: 0;
  120. bottom: 0;
  121. padding: 0 calc(60 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  122. display: flex;
  123. align-items: center;
  124. gap: calc(150 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  125. background: url(@/assets/images/mobile/bg_1-min.jpg) no-repeat center / 100% 100%;
  126. &__left{
  127. flex: 1;
  128. padding-left: constant(safe-area-inset-left);
  129. padding-left: env(safe-area-inset-left);
  130. height: calc(438 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  131. .card-title {
  132. margin-bottom: 20px;
  133. }
  134. }
  135. }
  136. .video {
  137. width: 850px;
  138. video {
  139. width: 100%;
  140. }
  141. .img-tips {
  142. font-size: 14px;
  143. }
  144. }
  145. .map {
  146. flex-shrink: 0;
  147. position: relative;
  148. width: calc(230 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  149. height: calc(538 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  150. background: url('@/assets/images/map_line-min.png') no-repeat center / contain;
  151. p {
  152. position: absolute;
  153. display: flex;
  154. align-items: center;
  155. justify-content: center;
  156. padding: 0 0 1px 2px;
  157. width: calc(110 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  158. height: calc(80 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  159. cursor: pointer;
  160. box-sizing: border-box;
  161. animation: emisse-ani linear 4s;
  162. background: url('@/assets/images/Rectangle382.png') no-repeat center / cover;
  163. &.active {
  164. font-family: "Source Han Sans SC Bold" !important;
  165. font-size: calc(18 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  166. color: #6A3906;
  167. background: url('@/assets/images/hightline -min.png') no-repeat center / cover;
  168. }
  169. &:nth-child(1) {
  170. left: calc(60 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  171. bottom: calc(0px - 16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  172. }
  173. &:nth-child(2) {
  174. right: calc(-120 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  175. bottom: calc(23 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  176. }
  177. &:nth-child(3) {
  178. left: calc(30 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  179. bottom: calc(86 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  180. }
  181. &:nth-child(4) {
  182. left: calc(82 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  183. bottom: calc(222 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  184. }
  185. &:nth-child(5) {
  186. left: calc(-120 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  187. bottom: calc(296 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  188. }
  189. &:nth-child(6) {
  190. top: calc(0px - 20 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  191. left: calc(80 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  192. }
  193. }
  194. }
  195. }
  196. </style>