CameraContent-1-2-3.vue 8.9 KB

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